Esistono diversi modi per commentare in un file batch
1) Utilizzo di rem
Questo è il modo ufficiale. A quanto pare, l'esecuzione richiede più tempo di ::
, sebbene apparentemente interrompa l'analisi in anticipo, prima che i caret vengano elaborati. L'espansione percentuale avviene prima di rem e ::
viene identificata, quindi un uso percentuale errato, ad esempio %~
, causerà errori se sono presenti percentuali. Sicuro da usare ovunque nei blocchi di codice.
2) Utilizzo delle etichette :
, ::
o :;
etc.
Infatti :: comment
, ": comment" è un nome di etichetta non valido perché inizia con un carattere non valido. Va bene usare i due punti nel mezzo di un'etichetta però. Se uno spazio inizia all'inizio dell'etichetta, viene rimosso : label
diventa :label
. Se uno spazio o due punti appare nel mezzo dell'etichetta, il resto del nome non viene interpretato nel senso che se ci sono due etichette :f:oo
e :f rr
, entrambi verranno interpretati come :f
e verrà saltato solo l'etichetta definita successivamente nel file. Il resto dell'etichetta è effettivamente un commento. Ci sono più alternative a ::
, elencate qui . Non si può mai goto
o di un'etichetta. e non funzionerà.call
::foo
goto :foo
goto ::foo
Funzionano bene al di fuori dei blocchi di codice ma dopo un'etichetta in un blocco di codice, non valida o meno, deve esserci una riga di comando valida. :: comment
è davvero un altro comando valido. Lo interpreta come un comando e non come un'etichetta; il comando ha la precedenza. Qual è il comando per cd al ::
volume, che funzionerà se lo hai eseguito subst :: C:\
, altrimenti otterrai un errore nel trovare il volume. Ecco perché :;
è probabilmente migliore perché non può essere interpretato in questo modo, e quindi viene interpretato come un'etichetta, che funge da comando valido. Questo non è ricorsivo, cioè l'etichetta successiva non ha bisogno di un comando dopo di essa. Ecco perché arrivano in due.
È necessario fornire un comando valido dopo l'etichetta, ad es echo something
. Un'etichetta in un blocco di codice deve avere almeno un comando valido, quindi le righe si presentano in coppie di due. Verrà visualizzato un )
errore imprevisto se nella riga successiva è presente uno spazio o una parentesi di chiusura. Se è presente uno spazio tra le due ::
righe, verrà visualizzato un errore di sintassi non valido.
È inoltre possibile utilizzare l'operatore del cursore nel ::
commento in questo modo:
@echo off
echo hello
(
:;(^
this^
is^
a^
comment^
)
:;
)
:;^
this^
is^
a^
comment
:;
)
Ma hai bisogno del trailing :;
per il motivo sopra indicato.
@echo off
(
echo hello
:;
:; comment
:; comment
:;
)
echo hello
Va bene finché c'è un numero pari. Questo è senza dubbio il modo migliore per commentare - con 4 righe e :;
. Con :;
te non ricevi alcun errore che deve essere eliminato usando 2> nul
o subst :: C:\
. È possibile utilizzare subst :: C:\
per far scomparire l'errore del volume non trovato, ma significa che è necessario inserire anche C: nel codice per evitare che la directory di lavoro diventi ::\
.
Per commentare alla fine di una riga puoi fare
command &::
o command & rem comment
, ma deve esserci ancora un numero pari, in questo modo:
@echo off
(
echo hello & :;yes
echo hello & :;yes
:;
)
echo hello
Il primo echo hello & :;yes
ha un comando valido sulla riga successiva ma il secondo & :;yes
no, quindi ha bisogno di uno cioè il :;
.
3) Utilizzo di una variabile d'ambiente non valida
%= comment =%
. In un file batch, le variabili di ambiente non definite vengono rimosse dallo script. Questo rende possibile usarli alla fine di una riga senza usare &
. È personalizzato utilizzare una variabile di ambiente non valida, ovvero una contenente un segno di uguale. Gli extra uguali non sono richiesti ma lo rendono simmetrico. Inoltre, i nomi delle variabili che iniziano con "=" sono riservati per variabili dinamiche non documentate. Quelle variabili dinamiche non finiscono mai con "=", quindi usando "=" sia all'inizio che alla fine del commento, non c'è possibilità di scontro tra nomi. Il commento non può contenere %
o :
.
@echo off
echo This is an example of an %= Inline Comment =% in the middle of a line.
4) Come comando, reindirizzando stderr a nul
@echo off
(
echo hello
;this is a comment 2> nul
;this is another comment 2> nul
)
5) Alla fine di un file, tutto dopo una parentesi non chiusa è un commento
@echo off
(
echo hello
)
(this is a comment
this is a comment
this is a comment