Il File Batch

Cos'è il file batch?

Un file batch è un file che contiene una lista di comandi DOS che vengono eseguiti in ordine, il formato è .bat.

Il file batch

Per cominciare, iniziamo con il comando ECHO:

 

ECHO [ON | OFF]

ECHO [messaggio]

 

ON      Attiva ECHO, cioè visualizza la cartella corrente ed i comandi eseguiti da un

            file batch sono visibili.

OFF    Disattiva ECHO, cioè nasconde la cartella corrente e dei comandi eseguiti

            ne fa vedere solo il risultato.

messaggio    Visualizza il messaggio specificato.

 

Noi useremo in questo caso ECHO OFF per disattivare ECHO.

 

Aggiungiamo CLS per cancellare lo schermo e PAUSE per far continuare solo dopo aver premuto un tasto.

 

Ora usiamo ECHO per comporre un messaggio, esempio:

 

echo off

cls

echo Ciao fratello!

pause

 

In questo modo visualizzerà Ciao fratello! come messaggio, e grazie al comando PAUSE potrà essere visualizzato dall'utente, altrimenti la finestra verrebbe chiusa prima che l'utente abbia il tempo di leggere. Questo sarà il risultato preciso:

 

 

ECHO. serve per lasciare una riga vuota.

 

Per fare una domanda all'utente si usa il comando CHOICE (non presente in versioni precedenti a Vista). Queste sono le possibili sintassi (se non funziona una provate l'altra versione):

 

CHOICE /C:lettere [/N] [/T:tempo,lettera] [testo]

CHOICE /C lettere [/N] [/CS] [/T tempo /D lettera] [/M testo]

 

/C:lettere    Specifica le lettere che l'utente può scegliere per rispondere.

/N                Nasconde le lettere che l'utente può scegliere.

/T:tempo,lettera    Specifica in secondi il tempo di attesa, a tempo scaduto verrà scelta

                                automaticamente la lettera specificata.

testo            Specifica il testo che verrà visualizzato.

/CS              Abilita il case sensitive, ovvero fa distinzione fra maiuscole e minuscole.

 

Esempio:

 

echo off

cls

choice /c:snt /n /t:20,t Eliminare il file C:\file.txt? [S/N]

echo.

if errorlevel 3 (

echo Tempo scaduto. Il file non è stato eliminato.

) else if errorlevel 2 (

echo Il file non verrà eliminato.

) else if errorlevel 1 (

del "C:\file.txt"

echo File eliminato.

)

echo.

pause

 

Qui chiede se eliminare il file C:\file.txt. Le lettere disponibili sono S, N e T, ma non vengono visualizzate; verrà scelto T dopo che sono passati 20 secondi. Se viene scelto T visualizzerà Tempo scaduto. Il file non è stato eliminato., se viene scelto N visualizzerà Il file non verrà eliminato. e se viene scelto S verrà eliminato C:\file.txt e visualizzerà File eliminato..

 

Nell'esempio è usato il costrutto IF ERRORLEVEL n, dove n è un numero che verrà registrato alla risposta, se la lettera scelta è la prima verrà registrato 1, se la seconda 2, ecc...

Dato che IF ERRORLEVEL n ci dice se il valore di ERRORLEVEL è maggiore o uguale a n, dobbiamo cominciare la condizione partendo dal valore più alto possibile. Ad esempio:

 

if errorlevel 2 (echo b) else if errorlevel 1 (echo a)

 

e non:

 

if errorlevel 1 (echo a) else if errorlevel 2 (echo b)

 

Nell'ultimo caso eseguirebbe sempre il comando ECHO a.

 

Nelle versioni precedenti a Vista l'unico modo per chiedere un input all'utente è usare SET /P. Facciamo un esempio analogo a quello precedente:

 

echo off

cls

:start

set /p a=Eliminare il file C:\file.txt? [S/N] 

echo.

if /i "%a%"=="S" (

del "C:\file.txt"

echo File eliminato.

goto end

)

if /i "%a%"=="N" (echo Il file non verrà eliminato.) else (

echo Scegliere tra S e N.

set a=

echo.

goto start

)

:end

echo.

pause

 

Al posto di a può essere specificato un qualsiasi nome di variabile, che non sia PATH, EXTPATH ecc... come al posto di start può essere messa qualsiasi parola.

 

Qui è presente un nuovo comando: GOTO. serve per indirizzare il processore dei comandi ad un'etichetta, ad esempio GOTO LOL mi porta all'etichetta :LOL. Se viene eseguito GOTO EOF viene terminata l'esecuzione del file batch.

 

Il limite di tempo non si può inserire con il comando SET, ma può prendere come input anche una parola o più.

Esempio:

 

echo off

cls

:start

set /p a=Inserire la password per continuare. 

echo.

if "%a%"=="Ajeje" goto ok

echo.

goto start

:ok

echo Benvenuto nel nuovo programma di Alessandro!

echo.

echo Segreti del giorno: ...

echo.

pause

 

Il comando REM è usato per inserire commenti.

 

CALL serve invece per aprire un file batch in un'altra finestra; si utilizza con la seguente sintassi:

 

CALL {[unità:][perc]filebatch | :etichetta}

 

[unità:][perc]filebatch    Apre il file batch specificato in un'altra finestra.

:etichetta                         Manda il processore dei comandi all'etichetta specificata (simile

                                          a GOTO etichetta).

 

Quindi:

 

goto abc

 

E' analogo a:

 

call :abc

 

 

Scrittura su file.

 

Ci sono due tipi di sintassi: una sovrascrive l'intero contenuto del file con l'output del comando specificato; una invece aggiunge al contenuto del file l'output del comando specificato. Se il file non esiste, verrà comunque creato in tutti i casi.

 

comando > file

comando >> file

 

Il primo esempio sovrascrive l'intero file con l'output del comando. Il secondo aggiunge solamente l'output del comando alla fine del file, senza sovrascrivere nulla.

 

Esempio:

 

echo off

cls

echo Scemo chi legge. > file.txt

echo AHAHAHAHAH >> file.txt

 

Se si usa nul al posto del nome del file, l'output non verrà copiato da nessuna parte. La sua vera utilità sta nel poter nascondere l'output di un comando.

 

Esempio:

 

echo off

cls

echo Premi un tasto per terminare l'applicazione.

pause > nul

Se hai delle domande, non esitare a esporle nell'apposita sezione Commenti.