Ricerca nel sito web

Automatizza le attività con i file BAT su FreeDOS


Ecco una guida utile ai file batch in FreeDOS.

Anche se non hai mai utilizzato DOS prima, probabilmente conosci la sua shell della riga di comando, denominata semplicemente COMMAND.COM. La shell COMMAND.COM è diventata sinonimo di DOS, quindi non sorprende che FreeDOS implementi anche una shell simile chiamata "FreeCOM", ma denominata COMMAND.COM proprio come in altri sistemi DOS.

Ma la shell FreeCOM può fare molto di più che fornire semplicemente un prompt della riga di comando in cui eseguire i comandi. Se hai bisogno di automatizzare attività su FreeDOS, puoi farlo utilizzando file batch, chiamati anche "file BAT" perché questi script utilizzano l'estensione .BAT.

I file batch sono molto più semplici degli script che potresti scrivere su Linux. Questo perché quando questa funzionalità fu originariamente aggiunta al DOS, molto tempo fa, era intesa come un modo per gli utenti DOS di "raggruppare" determinati comandi. Non c'è molta flessibilità per la ramificazione condizionale e i file batch non supportano funzionalità più avanzate come espansione aritmetica, reindirizzamento separato per output standard rispetto a messaggi di errore, processi in background, test, loop e altre strutture di script comuni negli script Linux.

Ecco una guida utile ai file batch in FreeDOS. Ricorda di fare riferimento alle variabili di ambiente racchiudendo il nome della variabile tra segni di percentuale (%) come %PATH%. Tuttavia, tieni presente che i cicli FOR utilizzano un costrutto leggermente diverso per ragioni storiche.

Uscita di stampa

Il tuo file batch potrebbe dover stampare messaggi per l'utente, per fargli sapere cosa sta succedendo. Utilizza l'istruzione ECHO per stampare i messaggi. Ad esempio, un file batch potrebbe indicare che è stata completata un'attività con questa istruzione:

ECHO Done

Non sono necessarie virgolette nell'istruzione ECHO. L'istruzione FreeCOM ECHO non tratterà le virgolette in alcun modo speciale e le stamperà proprio come un normale testo.

Normalmente, FreeDOS stampa ogni riga del file batch mentre le esegue. Questo di solito non è un problema in un file batch molto breve che definisce solo alcune variabili di ambiente per l'utente. Ma per i file batch più lunghi che svolgono più lavoro, questa visualizzazione costante delle righe batch può diventare fastidiosa. Per eliminare questo output, utilizza la parola chiave OFF per l'istruzione ECHO, come:

ECHO OFF

Per riprendere a visualizzare le righe batch mentre FreeDOS le esegue, utilizza invece la parola chiave ON:

ECHO ON

La maggior parte dei file batch include un'istruzione ECHO OFF sulla prima riga per eliminare i messaggi. Ma la shell stamperà comunque ECHO OFF sullo schermo mentre esegue l'istruzione. Per nascondere questo messaggio, i file batch spesso utilizzano un segno di chiocciola (@) davanti. Questo carattere speciale all'inizio di qualsiasi riga in un file batch impedisce la stampa di quella riga, anche se ECHO è attivato.

@ECHO OFF

Commenti

Quando scrivono file batch lunghi, la maggior parte dei programmatori preferisce utilizzare i commenti per ricordare a se stessi lo scopo del file batch. Per inserire un commento in un file batch, utilizza la parola chiave REM (per remark). Tutto ciò che segue REM viene ignorato dalla shell FreeCOM.

@ECHO OFF
REM This is a comment

Esecuzione di un file batch "secondario".

Normalmente, FreeCOM esegue solo un file batch alla volta. Tuttavia, potrebbe essere necessario utilizzare un altro file batch per eseguire determinate operazioni, ad esempio impostare variabili di ambiente comuni a più file batch.

Se richiami semplicemente il secondo file batch da un file batch "in esecuzione", FreeCOM passa interamente a quel secondo file batch e interrompe l'elaborazione del primo. Per eseguire invece il secondo file batch "dentro" il primo file batch, devi dire alla shell FreeCOM di chiamare il secondo file batch con la parola chiave CALL.

@ECHO OFF
CALL SETENV.BAT

Valutazione condizionale

I file batch supportano una semplice struttura di valutazione condizionale con l'istruzione IF. Questo ha tre forme base:

  1. Testare lo stato di ritorno del comando precedente
  2. Verificare se una variabile è uguale a un valore
  3. Testare se esiste un file

Un uso comune dell'istruzione IF è verificare se un programma è tornato correttamente al sistema operativo. La maggior parte dei programmi restituirà un valore zero se sono stati completati normalmente o qualche altro valore in caso di errore. In DOS, questo è chiamato livello di errore ed è un caso speciale del test IF.

Per verificare se un programma chiamato MYPROG è terminato correttamente, in realtà vuoi esaminare se il programma ha restituito un livello di errore "zero". Utilizza la parola chiave ERRORLEVEL per verificare un valore specifico, ad esempio:

@ECHO OFF
MYPROG
IF ERRORLEVEL 0 ECHO Success

Testare il livello di errore con ERRORLEVEL è un modo complicato per esaminare lo stato di uscita di un programma. Un modo più utile per esaminare diversi possibili codici di ritorno per un programma DOS è con una variabile speciale che FreeDOS definisce per te, chiamata ERRORLEVEL. Memorizza il livello di errore del programma eseguito più recentemente. Puoi quindi testare valori diversi utilizzando il test ==.

Puoi verificare se una variabile è uguale a un valore utilizzando il test == con l'istruzione IF. Come alcuni linguaggi di programmazione, utilizzi == per confrontare direttamente due valori. Di solito, farai riferimento a una variabile d'ambiente da un lato e a un valore dall'altro, ma potresti anche confrontare i valori di due variabili per vedere se sono uguali. Ad esempio, potresti riscrivere il codice ERRORLEVEL sopra con questo file batch:

@ECHO OFF
MYPROG
IF %ERRORLEVEL%==0 ECHO Success

Inoltre, un altro uso comune dell'istruzione IF è verificare se esiste un file e, in tal caso, agire. Puoi verificare la presenza di un file con la parola chiave EXIST. Ad esempio, per eliminare un file temporaneo denominato TEMP.DAT, potresti utilizzare questa riga nel file batch:

@ECHO OFF
IF EXIST TEMP.DAT DEL TEMP.DAT

Con qualsiasi istruzione IF, puoi utilizzare la parola chiave NOT per negare un test. Per stampare un messaggio se un file non esiste, potresti scrivere:

@ECHO OFF
IF NOT EXIST TEMP.DAT ECHO No file

Esecuzione ramificata

Un modo per sfruttare il test IF è passare a una parte completamente diversa del file batch, a seconda del risultato di un test precedente. Nel caso più semplice, potresti voler saltare alla fine del file batch se un comando da tastiera fallisce. Oppure potresti voler eseguire altre istruzioni se alcune variabili di ambiente non sono impostate correttamente.

Puoi passare alle diverse parti di un file batch utilizzando l'istruzione GOTO. Questo passa a una riga specifica, chiamata etichetta, nel file batch. Tieni presente che questo è un salto "go-to" rigoroso; l'esecuzione del file batch riprende dalla nuova etichetta.

Supponiamo che un programma necessiti di un file vuoto esistente per archiviare dati temporanei. Se il file non esistesse, sarebbe necessario creare un file prima di eseguire il programma. Potresti aggiungere queste righe a un file batch, in modo che il tuo programma abbia sempre un file temporaneo con cui lavorare:

@ECHO OFF
IF EXIST temp.dat GOTO prog
ECHO Creating temp file...
TOUCH temp.dat
:prog
ECHO Running the program...
MYPROG

Naturalmente, questo è un esempio molto semplice. In questo caso, potresti invece riscrivere il file batch per creare il file temporaneo come parte dell'istruzione IF:

@ECHO OFF
IF NOT EXIST temp.dat TOUCH temp.dat
ECHO Running the program...
MYPROG

Iterazione

Cosa succede se è necessario eseguire la stessa attività su una serie di file? Puoi iterare su un insieme di file con il ciclo FOR. Si tratta di un ciclo di una riga che esegue ogni volta un singolo comando con un file diverso.

Il ciclo FOR utilizza una sintassi speciale per la variabile di iterazione, che viene utilizzata in modo diverso rispetto alle altre variabili di ambiente DOS. Per scorrere una serie di file di testo in modo da poterli modificare ciascuno, a turno, utilizza questa istruzione nel file batch:

@ECHO OFF
FOR %%F IN (*.TXT) DO EDIT %%F

Tieni presente che la variabile di iterazione viene specificata con un solo segno di percentuale (%) se esegui questo ciclo dalla riga di comando, senza un file batch:

C:\> FOR %F IN (*.TXT) DO EDIT %F

Elaborazione da riga di comando

FreeDOS fornisce un metodo semplice per valutare qualsiasi opzione della riga di comando che l'utente potrebbe aver fornito durante l'esecuzione di file batch. FreeDOS analizza la riga di comando e memorizza le prime nove opzioni del file batch nelle variabili speciali %1%2, .. e così via fino a %9< /codice>. Si noti che l'undicesima opzione (e oltre) non è direttamente accessibile in questo modo. (La variabile speciale %0 memorizza il nome del file batch.)

Se il tuo file batch deve elaborare più di nove opzioni, puoi utilizzare l'istruzione SHIFT per rimuovere la prima opzione e spostare ogni opzione verso il basso di un valore. Quindi la seconda opzione diventa %1 e la decima opzione diventa %9.

La maggior parte dei file batch deve essere spostata di un valore. Ma se devi spostare di qualche altro incremento, puoi fornire quel parametro all'istruzione SHIFT, ad esempio:

SHIFT 2

Ecco un semplice file batch che mostra lo spostamento di uno:

@ECHO OFF
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
ECHO Shift by one ..
SHIFT 1
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9

L'esecuzione di questo file batch con dieci argomenti mostra come l'istruzione SHIFT riordina le opzioni della riga di comando, in modo che il file batch ora possa accedere al decimo argomento come %9:

C:\SRC>args 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9
Shift by one ..
2 3 4 5 6 7 8 9 10
C:\SRC>

Articoli correlati: