[1] La definizione comandi esterni
è spesso applicata ai soli programmi facenti parte del sistema operativo
in senso stretto (DISKCOPY, FORMAT, etc.).
[2] O la non esistenza (IF NOT EXIST...).
[3] FOR consente di ripetere un comando
su una lista di argomenti elencati tra parentesi tonde: non vi è
modo di utilizzare una lista esterna al batch, quale, ad esempio, un file
ASCII gestito automaticamente da altre procedure.
[4] Si tratta di programmi progettati espressamente
per automatizzare elaborazioni eseguite in parallelo da diverse macchine
su dati condivisi in rete; tuttavia essi possono, comunque, risultare utili
in ambienti meno complessi: si pensi a procedure eseguite su una medesima
macchina, ma in multitasking (ad esempio quali task DOS in Microsoft Windows
3.x). Del resto non è affatto esclusa la possibilità di servirsene
produttivamente in semplici procedure eseguite in modo standalone e monotasking.
[5] In poche parole: lo standard output di DIR
non viene visualizzato, bensì è trasformato dal DOS in standard
input per il comando successivo (in questo caso FIND).
[6] DATECMD esegue la propria effettuando
una DOS shell, cioè invocando una seconda istanza (transiente)
dell'interprete dei comandi. Ne segue che COMMAND.COM (o, comunque,
l'interprete utilizzato) deve essere disponibile (nella directory corrente
o in una di quelle elencate nella variabile d'ambiente PATH) e
deve esserci memoria libera in quantità sufficiente per il caricamento
dell'interprete stesso e per l'esecuzione del comando da parte di questo. Vedere quanto detto a proposito della funzione system().
[7] Può trattarsi di un inconveniente grave
qualora, ad esempio, altre procedure abbiano necessità di accedere
comunque ai file (o, quanto meno, di verificarne l'esistenza) per operare
correttamente.
[8] Si dice remoto (in contrapposizione
a locale) un disco appartenente ad una
macchina diversa da quella sulla quale si svolge la sessione di lavoro.
Se più personal computer sono collegati in rete, ciascuno di essi
può utilizzare, in aggiunta alle proprie risorse locali, quelle
remote rese disponibili dalle macchine configurate come server.
L'utilizzo alle risorse remote avviene in modo condiviso, in quanto più
personal computer possono accedervi contemporaneamente.
[9] Qualcosa si può fare anche senza TIMEGONE,
con l'aiuto di EMPTYLVL.
Innanzitutto si deve creare un file ASCII contenente un CR (ASCII
13), che, per comodità, indichiamo col nome CR.TXT. Occorre
poi inserire nella procedura batch una sequenza di istruzioni analoga alla
seguente:
:ASPETTA
TIME < CR.TXT | FIND "15:09" | EMPTYLVL
IF ERRORLEVEL 1 GOTO ASPETTA
Lo standard input del comando TIME
è rediretto da CR.TXT, con l'effetto di terminare il comando
senza modificare l'ora di sistema; lo standard
output è invece rediretto, mediante piping, sullo standard input
di FIND, che cerca la stringa contenente l'ora desiderata (nell'esempio
le 15:09); infine, EMPTYLVL memorizza 1 in ERRORLEVEL
se la stringa non è trovata (l'ora non è quella voluta).
I limiti della soluzione descritta sono evidenti: in primo luogo il batch
deve essere lanciato necessariamente prima dell'ora specificata, in quanto
la stringa non viene trovata anche se quella è già trascorsa;
inoltre si tratta di un algoritmo applicabile con difficoltà al
comando DATE, in particolare quando si desideri effettuare il
test su parte soltanto della data. La utility CUT
può venire in soccorso, ma si introducono, comunque, complicazioni
notevoli al listato qui riprodotto.
[10] Si tratta di una tecnica di ottimizzazione
delle operazioni di I/O, implementata mediante algoritmi, più o
meno sofisticati, di gestione di buffer, che
consentono di limitare il numero di accessi alle periferiche hardware (con
particolare riferimento ai dischi).
[11] DOLIST esegue la command line effettuando
una DOS shell, cioè invocando una seconda istanza (transiente)
dell'interprete dei comandi. Ne segue che COMMAND.COM (o, comunque,
l'interprete utilizzato) deve essere disponibile (nella directory corrente
o in una di quelle elencate nella variabile d'ambiente PATH) e
deve esserci memoria libera in quantità sufficiente per il caricamento
dell'interprete stesso e per l'esecuzione del comando da parte di questo. Vedere quanto detto a proposito della funzione system().
[12] Il DOS accetta comandi di lunghezza inferiore
o pari a 128 caratteri, compreso il CR terminale.
[13] In realtà non esiste, in Unix, un
comando analogo a CMDSUBST. Tuttavia la shell standard
(l'equivalente dell'interprete dei comandi in ambiente DOS) scandisce la
command line alla ricerca di stringhe racchiuse
tra apici inversi (il carattere '''), le esegue come veri e propri
comandi e le sostutuisce, nella command line stessa, con lo standard output
prodotto.
[14] CMDSUBST utilizza il carattere '$'
in luogo dell'apice inverso per comodità: quest'ultimo non è
presente sulla tastiera italiana.
[15] Ancora una volta, CUT
e EMPTYLVL potrebbero ottenere,
da soli, un risultato analogo, ma con un algoritmo più complesso
e meno flessibile.
[16] Anche CMDSUBST esegue la command
line effettuando una DOS shell, cioè invocando una seconda
istanza (transiente) dell'interprete dei comandi. Vedere quanto detto a proposito della funzione system().