Il File Batch

Cos'è il file batch?

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

Il file batch

Per cominciare, iniziamo con il comando ECHO. ECHO è un comando molto utile, e si utilizza per visualizzare un messaggio prestabilito dal programmatore.

 

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.

 

CLS serve per cancellare lo schermo e PAUSE per mettere in pausa l'esecuzione del programma, che verrà ripresa appena l'utente avrà premuto un tasto.

 

Come abbiamo appena visto, possiamo usare ECHO anche per comporre un messaggio.


Ora facciamo un esempio molto semplice, che riassuma un po' le varie istruzioni:

 

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:

 

 

E' possibile, inoltre, utilizzare ECHO per lasciare una riga vuota. Tuttavia, scrivendo soltanto ECHO ci verrà mostrato solo via messaggio se ECHO è stato attivato oppure no. Tuttavia esiste un'escamotage, molto conosciuto, e sarebbe quello di mettere un carattere non alfanumerico dopo ECHO, per esempio:


echo.

 


Per fare una domanda all'utente si usa il comando CHOICE, ma bisogna tener conto del fatto che non è compatibile con tutte le versioni di Windows. In questo caso, si può utilizzare una sintassi quasi equivalente, che però ha alcune diverse funzionalità rispetto a CHOICE.

 

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, per esempio una domanda.

/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.

 

In alcune versioni di Windows, 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 (EOF starebbe infatti per End of File, cioè la fine del file).

 

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

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 Pinco Pallino!

echo.

echo ...

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; l'altra invece aggiunge alla fine del file l'output del comando specificato. Se il file non esiste, verrà comunque creato in entrambi i casi.

 

comando > file

comando >> file

 

La prima sintassi sovrascrive l'intero contenuto del file con l'output del comando. La seconda aggiunge l'output del comando alla fine del file, senza sovrascrivere nulla.

 

Esempio:

 

echo off

cls

echo Scemo chi legge. > file.txt

echo IHIHIH >> 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.