Il 0% ha trovato utile questo documento (0 voti)
9 visualizzazioni7 pagine

3 File Batch

Il documento tratta dei file batch, evidenziando la loro utilità nell'automazione di sequenze di comandi nella shell. Vengono forniti esempi pratici di script per copiare, spostare e cancellare file, con l'inclusione di controlli per gestire errori e condizioni specifiche. Inoltre, si discute l'uso di variabili e parametri di chiamata per rendere gli script più versatili e sicuri.

Caricato da

micol53
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
9 visualizzazioni7 pagine

3 File Batch

Il documento tratta dei file batch, evidenziando la loro utilità nell'automazione di sequenze di comandi nella shell. Vengono forniti esempi pratici di script per copiare, spostare e cancellare file, con l'inclusione di controlli per gestire errori e condizioni specifiche. Inoltre, si discute l'uso di variabili e parametri di chiamata per rendere gli script più versatili e sicuri.

Caricato da

micol53
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

I file batch

La shell è in grado di mandare in esecuzione comandi contenuti in file caratterizzati dalle


estensioni COM, EXE e BAT. I file dei tipi COM ed EXE contengono codice in linguaggio
macchina e, una volta caricati in memoria, possono essere immediatamente eseguiti.
I file di tipo BAT, invece, sono file di testo che contengono sequenze di comandi di shell, perciò
l’interprete dei comandi li tratta come se rispondesse a input da tastiera.
I file di tipo BAT, spesso chiamati file batch (o anche script), costituiscono la maniera più
pratica di automatizzare sequenze di comandi che vengono adoperate spesso oppure che sono
lunghe da eseguire.
Nel primo caso si ottiene un risparmio di battute, e quindi di errori di battitura, mentre nel
secondo l’uso di uno script permette di non attendere il termine di ciascun comando per
impartire il successivo, ottimizzando il tempo totale di esecuzione della sequenza di comandi.
Inoltre il lavoro può essere eseguito in modo non interattivo (modalità batch) senza la necessità
della presenza dell’utente.
Si voglia per esempio costruire un batch file di nome [Link] che svolga le seguenti funzioni:
copiare alcuni file dal disco fisso all’unità E: (per esempio una memoria USB) e cancellare in
seguito i file copiati per motivi di segretezza.

@ECHO OFF
CLS
ECHO Introdurre il disco nell'unità E:
PAUSE
COPY C:\Docum\[Link] E:\File1
COPY C:\Tabelle\[Link] E:\File2
COPY C:\Lettere\[Link] E:\File3
COPY C:\Fatture\Luglio E:\File4
DEL C:\Docum\[Link]
DEL C:\Tabelle\[Link]
DEL C:\Lettere\[Link]
DEL C:\Fatture\Luglio

Il comando può essere eseguito dalla linea comandi scrivendo:

[Link]

o, più semplicemente:

Copia

Con questo batch file, è possibile chiedere al sistema l’esecuzione dei comandi in esso
contenuti nello stesso ordine con il quale sono stati scritti nel testo del file.
Si noti l’istruzione @ECHO OFF che serve a disattivare la ripetizione sullo schermo del
comando in esecuzione; il simbolo @ disattiva anche la visualizzazione del comando echo off
stesso.
Il comando CLS cancella lo schermo e il comando ECHO seguente visualizza un messaggio
informativo.
Il comando PAUSE sospende l’esecuzione che può essere riattivata premendo un tasto
qualsiasi.
I comandi successivi eseguono la copia dei file dal disco fisso all’unità esterna e la successiva
cancellazione dei file copiati.

© Istituto Italiano Edizioni Atlas 1


Un secondo esempio mostra il testo di un batch file che serve a ripristinare i file su disco fisso:

COPY E:\File1 C:\Docum\[Link]


COPY E:\File2 C:\Tabelle\[Link]
COPY E:\File3 C:\Lettere\[Link]
COPY E:\File4 C:\Fatture\Luglio

Il file batch [Link] può essere migliorato introducendo le seguenti righe dopo la sequenza
dei comandi COPY.

DIR E:\
PAUSE

Questo fa sì che il contenuto dell’unità E: venga visualizzato e l’esecuzione sospesa prima di


cancellare i file sul disco fisso. Se si constata che uno o più file non sono stati copiati si può
interrompere l’esecuzione e controllare che cosa sia andato male.
All’interno di uno script è possibile in qualche misura il controllo del flusso di esecuzione, vale
a dire che si può alterare la sequenza con cui i comandi vengono eseguiti, a seguito del
verificarsi o meno di certe condizioni. Per esempio si può controllare che un comando sia stato
eseguito correttamente prima di passare al successivo, oppure si può verificare che un file
esista prima di eseguire operazioni che lo riguardano.
Vediamo qualche esempio:

IF NOT EXIST [Link] GOTO ERRORE


COPY [Link] C:\Archivio
DEL [Link]
GOTO FINE
:ERRORE
ECHO Errore: il file non esiste
:FINE

Quando la shell esegue questo file inizia con la verifica, richiesta con la prima riga, dell’esisten-
za di un file e prende una decisione di conseguenza: se il file non esiste (IF NOT EXIST)
esegue il comando GOTO ERRORE, in modo che il prossimo comando da interpretare sia
quello che segue l’etichetta ERRORE, indicata entro il file con :ERRORE (con i due punti
iniziali). Questo comando è ECHO frase, che causa la visualizzazione di frase sul video.
Se invece il file esiste, l’interpretazione prosegue con la riga successiva all’IF, che ricopia il file
[Link] nella directory C:\Archivio, quindi con DEL [Link], che cancella la versione
originale del file; infine salta all’etichetta FINE, anch’essa indicata entro il file con il simbolo :
(due punti) seguito dal nome dell’etichetta. Oltre a IF NOT EXIST esiste il controllo comple-
mentare, cioè IF EXIST.
Durante l’esecuzione dello script, tutti i comandi in esso contenuti vengono visualizzati: se si
desidera evitare questo, si può introdurre nella prima riga il comando @ECHO OFF che
appunto sopprime l’eco di ogni comando a video.
Desiderando ripristinarlo, si usa il comando ECHO ON.
Per alcuni comandi, è possibile controllare se la loro esecuzione è terminata in modo normale,
oppure con errori, attraverso la struttura IF ERRORLEVEL. Questo è reso possibile dall’uso del
codice di uscita del programma avente la seguente sintassi generale:

IF ERRORLEVEL n comando

dove n è un numero intero maggiore o uguale a zero.

© Istituto Italiano Edizioni Atlas 2


Il nome ERRORLEVEL definisce una variabile predefinita della programmazione batch (varia-
bile di ambiente).
Questa forma di controllo verifica se il codice di uscita è stato posto ad un numero pari a n
o superiore, e in caso positivo la shell manda in esecuzione il comando specificato. Un valore
0 (zero) indica che il comando è terminato con successo, perciò in generale:

IF ERRORLEVEL 1 GOTO ERRORE

causa il salto all’etichetta ERRORE se il comando è terminato in modo anomalo; infatti


qualsiasi codice di uscita diverso da zero viene rilevato da questo controllo.
Per determinare quale errore sia effettivamente accaduto, bisogna controllare tutti i codici in
ordine decrescente, in modo che si abbia riscontro positivo solo al codice effettivamente
trasmesso.

Se è noto che un certo comando può terminare con un codice compreso tra 0 e 5, occorre
controllare i codici nell’ordine da 5 a 1: se il codice di uscita è 3, i controlli su 5 e 4 sono
negativi, mentre è positivo quello su 3.

......
IF ERRORLEVEL 5 GOTO ERRORE5
IF ERRORLEVEL 4 GOTO ERRORE4
IF ERRORLEVEL 3 GOTO ERRORE3
IF ERRORLEVEL 2 GOTO ERRORE2
IF ERRORLEVEL 1 GOTO ERRORE1
:TUTTOOK
...
GOTO FINE
:ERRORE1
...
GOTO FINE
:ERRORE2
...
GOTO FINE
...
...
:ERRORE5
...
GOTO FINE
:FINE

Non tutti i comandi usano il codice di uscita, per esempio il comando DEL non lo adopera e
se si cerca di cancellare un file inesistente, che costituisce evidentemente una situazione
anomala, non si ha modo di verificarlo per mezzo di ERRORLEVEL.
Altri comandi usano più codici di uscita, per esempio FORMAT è in grado di comunicare diversi
eventi anomali che possono verificarsi durante la sua esecuzione per mezzo di diversi codici
di uscita: il loro uso consente di scrivere file batch più raffinati, in grado di prendere le decisioni
giuste in ogni circostanza.

Gli script sono in grado di trattare parametri di chiamata, ovvero stringhe fornite in ingresso
insieme al comando.
Per esempio, lo script seguente accetta in ingresso i nomi di due file e ne visualizza il
contenuto, uno dopo l’altro e una pagina per volta.

© Istituto Italiano Edizioni Atlas 3


@ECHO OFF
TYPE %1 | MORE
PAUSE
TYPE %2 | MORE

Dopo la visualizzazione del primo file, lo script si ferma e attende che l’utente prema un tasto
per continuare (comando PAUSE).
Scrivendo un file [Link] contenente i comandi specificati, se si digita

Scrivi [Link] [Link]

si ottiene l’output dei due file sul video.


Infatti %1 assume il valore corrispondente alla prima stringa che segue il nome del comando
e %2 quello della seconda, perciò i due comandi entro lo script vengono espansi in:
TYPE [Link] | MORE
PAUSE
TYPE [Link] | MORE

Il comando SET assegna un valore a una variabile (SET nomevariabile = valore). Per indicare
il valore di una variabile si usa la notazione %variabile%.
Per controllare l’uguaglianza tra variabili, o tra variabili e stringhe, si usa l’operatore con il
doppio segno == per il confronto:
IF %variab%==%variab2% comando
IF NOT %variab%==%variab2% comando
IF %variab%==stringa comando
IF NOT %variab%==stringa comando

Variabili delle quali si deve controllare il contenuto sono per esempio quelle passate allo script
quando lo si esegue.
IF %1==%C% comando
IF NOT %2==PIPPO comando

Si osservi che viene usato solo un simbolo di percentuale per espandere il contenuto delle
variabili passate allo script.
Se nel secondo caso lo script contenente il controllo viene lanciato senza almeno due stringhe,
il controllo dà luogo ad un errore, perché %2 viene espanso in una stringa nulla, contenente
zero caratteri, e quindi la riga assume l’aspetto seguente
IF NOT ==PIPPO comando

che contiene un errore di sintassi, perché non si può mettere il doppio segno == senza un
argomento che lo preceda. È perciò opportuno usare la forma seguente:

IF NOT "%2"=="PIPPO" comando

In tal modo, se %2 è la stringa nulla, l’espansione genera la riga seguente:

IF NOT ""=="PIPPO" comando

che sintatticamente è corretto.

© Istituto Italiano Edizioni Atlas 4


Usando questo tipo di controlli si possono creare script in grado di eseguire compiti diversi,
in dipendenza da diversi valori di una stringa in ingresso.
Lo script che segue, che chiamiamo [Link], richiede che vengano forniti due o tre parametri
in ingresso, il primo dei quali determina il tipo di operazione da eseguire, i successivi sono nomi
di file sui quali operare.

All’interno del testo sono state introdotte alcune righe di commento per spiegare le funziona-
lità del file batch. Le righe che iniziano con la parola chiave REM contengono i commenti.

@ECHO OFF
REM Gestione di file

REM Variabile per il controllo del tipo di errore


SET TIPO_ERR=0

IF "%1"=="c" GOTO COPIA


IF "%1"=="m" GOTO MUOVI
IF "%1"=="d" GOTO CANCELLA
IF "%1"=="" GOTO ISTRUZIONI

REM Istruzioni per copiare un file in un altro


:COPIA
IF "%3"=="" GOTO ISTRUZIONI
REM Se uso c devo dare anche 2 nomi di file

IF EXIST %3 GOTO ERRORE


SET TIPO_ERR=1
IF NOT EXIST %2 GOTO ERRORE
COPY %2 %3
GOTO FINE

REM Istruzioni per spostare un file in un altro


:MUOVI
IF "%3"=="" GOTO ISTRUZIONI
REM Se uso m devo dare anche 2 nomi di file

IF EXIST %3 GOTO ERRORE


SET TIPO_ERR=1
IF NOT EXIST %2 GOTO ERRORE
MOVE %2 %3
GOTO FINE

REM Istruzioni per cancellare un file


IF "%2"=="" GOTO ISTRUZIONI
REM Occorre un nome di file
:CANCELLA
SET TIPO_ERR=1
IF NOT EXIST %2 GOTO ERRORE
DEL %2
GOTO FINE

© Istituto Italiano Edizioni Atlas 5


REM Se il comando viene eseguito con i parametri
REM sbagliati, vengono visualizzate le istruzioni per l'uso
:ISTRUZIONI
ECHO Istruzioni per l'uso del comando Uti:
ECHO Uti c File1 File2 copia File1 in File2 se File2 non esiste
ECHO Uti m File1 File2 muove File1 in File2 se File2 non esiste
ECHO Uti d File1 cancella File1
GOTO FINE
:ERRORE
IF %TIPO_ERR%==0 ECHO Attenzione, il File %3 esiste gia'
IF %TIPO_ERR%==1 ECHO Attenzione, il File %2 non esiste

:FINE

Come si può vedere dalle istruzioni per l’uso, lo script permette di copiare un file in un altro,
cancellando o no l’originale, oppure di cancellare un file.
Vengono eseguiti alcuni controlli, di correttezza formale e di possibilità di esecuzione. Se la
forma non è rispettata, cioè se i parametri non sono corretti, vengono visualizzate le istruzioni
per l’uso, mentre se un’operazione non può essere eseguita compare un messaggio di errore.
Lo script riconosce due tipi di errore: l’esistenza del file di destinazione e la non esistenza del
file da copiare o cancellare. La gestione è affidata alla variabile TIPO_ERR, che vale 0 all’inizio
e durante il controllo su %3, e viene posta ad 1 subito prima del controllo su %2. In questo
modo, se si ha effettivamente un errore si può controllare il valore di TIPO_ERR per visualizzare
il messaggio corretto.
In sintesi, gli script permettono di eseguire sequenze di comandi con un certo grado di
sicurezza in modo automatico, a condizione che si prevedano le circostanze anomale che
possono verificarsi, soprattutto se lo script deve essere eseguito in modo unattended, cioè
senza la sorveglianza continua di un operatore. La corretta gestione dei codici di uscita e delle
condizioni di esistenza dei file può impedire di causare danni al sistema, o comunque di
eseguire operazioni sbagliate, mentre l’uso delle variabili permette di scrivere script più versa-
tili e potenti.

Il seguente esempio presenta un programma batch che può essere utilizzato per installare su
disco fisso i programmi per la gestione della contabilità, prelevandoli dal CD che si trova
nell’unità D:.
Il programma sarà registrato sullo stesso CD contenente il software con il nome [Link]
e la sua esecuzione potrà essere attivata scrivendo da linea comando:

D:Installa

Il testo del file [Link] è il seguente:

@ECHO OFF
CLS
ECHO INSTALLAZIONE SOFTWARE CONTABILITÀ
ECHO CONTAB
ECHO (VERS. 1.0)
ECHO -----------------------------------------------------
ECHO -----------------------------------------------------

© Istituto Italiano Edizioni Atlas 6


ECHO Con questa installazione CONTAB
ECHO viene creato (o sostituito)
ECHO nella directory del disco fisso C:\CONTAB
ECHO se non vuoi proseguire premi CTRL + C
ECHO -----------------------------------------------------
PAUSE
ECHO prego attendere ....
C:
CD\
COPY D:con*.* C:\contab >NUL
COPY D:[Link] C:\ >NUL
CD\
ECHO -----------------------------------------------------
ECHO Installazione terminata
ECHO -----------------------------------------------------
ECHO -----------------------------------------------------
ECHO PER INIZIARE, DIGITARE: Inizio
ECHO ON

La ridirezione >NUL nel comando Copy serve ad eliminare la visualizzazione dei nomi dei file
che vengono via via copiati dal CD.

© Istituto Italiano Edizioni Atlas 7

Potrebbero piacerti anche