Dicas de Programação BATch

Embed Size (px)

Citation preview

Dicas de Programao BATch1. Como reiniciar o computador atravs de um programa em BATch ? 2. Inserindo Data e Hora nos seus programas 3. Combinando arquivos em um 4. Formatando um disco sem que o DOS faa perguntas 5. Como saber o Errorlevel e mostr-lo na tela ? 6. Como criar um Menu eficiente ? 7. Como saber se algum programa est na memria, como o ANSI.SYS ? 8. Como voltar para o drive e diretrio inicial ? 9. FOR..IN..DO 10. Sem variveis livres 11. Como fazer se eu precisar usar um PATH maior do que 128 caracteres ? 12. Como no mostrar uma mensagem padro de um programa ? 13. Qual a diferenc entre REM e :: ? 14. Como saber se existe um determinado arquivo no drive ? 15. Livros sobre programao BATch (em ingls)

Como reiniciar o computador atravs de um programa em BATch ?apenas digite a linha de comando abaixo e o arquivo REBOOT.COM ser criado, ao rod-lo, o computador ser reiniciado. ECHO HPS(ALT+203)>REBOOT.COM ou digite esta linha em um programa BATch ECHO G=FFFF:0 | DEBUG >NUL

Inserindo Data e Hora nos seus programasH vrios programinhas que possibilitam a insero da data e hora, como: P2E, GET25, BATCHMAN & STRINGS mas tambm existe uma soluo pura do Ms-DOS: @echo off echo @prompt SET TIME$Q$T$_SET DATE$Q$D >TEMP$TMP.BAT command /c TEMP$TMP.BAT > TEMP$$MP.BAT call TEMP$$MP>BAT >nul del TEMP$?MP.BAT echo. echo A Data De Hoje : %date% echo A Hora Agora : %time% echo. set date= set time=

Combinando arquivos em umO comando COPY do DOS pode ser usado: COPY *.TXT ALL.XXX RENAME ALL.XXX ALL.TXT ou FOR %%f IN (*.TXT) DO TYPE %%f>>ALL.XXX RENAME ALL.XXX ALL.TXT A renomeao necessria

Formatando um disco sem que o DOS faa perguntasCom o MS-DOS 4.0+ use FORMAT A: /AUTOTEST ou echo n>temp.tmp echo n>>temp.tmp Format a: /q /v:DISCO>log.txttemp.tmp copy /b temp.tmp+,, >nul if exist temp.tmp echo Programa: %1 foi encontrado na memria. if not exist temp.tmp echo Programa: %1 no est na memria. if exist temp.tmp del temp.tmp goto end :syntax echo Use: %0 [nome do programa] echo Exemplo: %0 mouse :end

Como voltar para o drive e diretrio inicial ?@echo @prompt SET OLDRV$Q$N$_SET OLDIR$Q$P >TEMP$TMP.BAT @command /c TEMP$TMP.BAT > TEMP$$MP.BAT @call TEMP$$MP>BAT >nul @del TEMP$?MP.BAT Quando este programa for executado, %OLDRV% ser o drive de onde o programa foi executado e %OLDIR% ser o diretrio.

FOR..IN..DO

O comando FOR..IN..DO pode ser usado tanto em arquivos BATch onde deve-se usar %%F (dois sinais de porcentagem e uma varivel) ou no prompt onde apenas um sinal de porcentagem necessrio, simplificadamente, o programa faz o seguinte: "Com cada um destes, faa aquilo." Como na maioria dos programas do DOS, basta pensar um pouco e voc poder fazer coisas complexas com este comando, mas em sua forma mais simples, voc poderia trocar o DIR /B por FOR %F IN (*.*) DO ECHO %F (Voc precisar trocar o %F por %%F se usado em um arquivo BATch) O %F ou %%F apenas um varivel temporria que s ativada enquanto o comando FOR..IN..DO est sendo executado, a letra usada "F" no tem nenhum significado, poderia ser qualquer outra Voc poderia por exemplo usar o comando FOR..IN..DO para rodar todos os seus programas BATch: FOR %B IN (*.BAT) DO CALL %B

Sem variveis livresAs variveis so aquelas com o sinal de porcentagem, como o %PATH% e %PROMPT% e voc pode precisar aumentar o seu tamanho para poder rodar algum programa em BATch que crias suas prprias variveis. Voc pode aumentar o tamanho das variveis usando o parmetro /E no comando SHELL do CONFIG.SYS: SHELL=C:\DOS\COMMAND.COM C:\DOS /E:2048 /P ou voc pode fazer um ajuste temporrio para o arquivo BAT %COMSPEC% /E:2048 /C ARQUIVO.BAT

Como fazer se eu precisar usar um PATH maior do que 128 caracteres ?uma das alternativas usar o comando SUBST, como mostra o exemplo abaixo SUBST K: C:\WINDOWS e ao invs de digitar C:\WINDOWS no Path, digite apenas K:

Como no mostrar uma mensagem padro de um programa ?Basta usar os comandos de redirecionamente do DOS, o sinal de maior (>), por exemplo: "Como fazer para no receber a mensagem padro do comando PAUSE ?" apenas digite : Pause>NUL e a mensagem "Pressione qualquer tecla para continuar..." no aparecer na tela, mas caso voc queira armazenar essa mensagem em um arquivo basta trocar o >NUL por >arquivo.txt

Qual a diferenc entre REM e :: ?

A diferena entre REM e :: que usando o comando REM, o DOS ler toda a linha antes de no execut-la, e usando o ::, o DOS ler apenas os :: ignorando o resto da linha, com isto seu programa ficar mais rpido.

Como saber se existe um determinado arquivo no drive ?CD\ DIR /B /S|FIND /i "filename.ext">FLAG.$$$ COPY /B FLAG.$$$+,, IF EXIST FLAG.$$$ ECHO filename.ext foi encontrado IF NOT EXIST FLAG.$$$ ECHO filename.ext no foi encontrado.