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]

 

Dove:

  • 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 (cioè l'output).
  • 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]

 

Dove:

  • /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 abbiamo introdotto 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, che verranno ignorati dal processore dei comandi.

 

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

 

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

 

Dove:

  • [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.