La risposta di DavidPostill è ottima, ma può confondere un po 'i nuovi arrivati. Proverò a riformulare.
%
non è un personaggio riservato .
È un personaggio con un significato speciale per la shell dei comandi (alias cmd.exe
e command.com
)
La differenza è:
- non puoi usare affatto caratteri riservati (ma vedi sotto)
- potresti essere in grado di usare caratteri speciali e di escape - semplicemente non digitandoli così come sono
In altre parole, è possibile creare un file o una cartella contenente il %
loro nome. Puoi farlo direttamente utilizzando Windows Explorer perché %
non ha un significato speciale lì. Non c'era intenzione di impedirti di creare tali file al prompt dei comandi, ma perché%
ha un significato speciale, è necessario utilizzare la sintassi descritta di seguito per creare tali file.
BAT-files
Se stai scrivendo un file batch (* .bat, * .cmd), che viene eseguito dalla shell dei comandi (alias l'applicazione del prompt dei comandi), da usare %
letteralmente (come per creare un file con %
nel nome e non sostituire una variabile o un parametro) è necessario digitare%%
invece.
Per esempio,
- il comando
echo %windir%
produce output:c:\windows
- tuttavia, il comando
echo %%windir%%
produce output:%windir%
- e così via: il comando
echo %%%%windir%%%%
produce output:%%windir%%
Quindi, se salvi la seguente riga come test.bat
ed eseguila, creerà una directory denominata %test%
completa con segni di percentuale:
md %%test%%
Se non vi è alcuna variabile denominata test
, questo comando successivo è equivalente all'ultimo - crea anche una directory %test%
:
md %test%
... ma per favore non farlo mai così poiché il tuo comando non si comporterà come desiderato una volta che qualcuno crea una variabile con quel nome
Se si intende utilizzare il comando for
in un file BAT, è necessario raddoppiare in %
modo che abbia un significato speciale da for
comandare anziché per la shell dei comandi stessa:
for %%i in (*.*) do echo %%i
Questo produrrà un elenco di file nella directory corrente (ovvero, %%i
ha un significato speciale) e non sono sicuro di come farlo produrre letteralmente %%i
senza ricorrere alla %p%
soluzione alternativa descritta nella sezione successiva ( %%%%i
non funziona qui).
%
non è l'unico carattere con un significato speciale al prompt dei comandi. Altri includono ^
, <
, >
, |
, (
, )
, &
, !
, "
. La maggior parte di quelli (esclusi "
) possono essere sfuggiti , cioè prefissati con un carattere di fuga in ^
modo da inserire un carattere letterale, sopprimendone il significato speciale. Coloro che perdono anche la loro funzione speciale all'interno della stringa doublequoted, e "
è fuggito con un backslash: \"
. Potrebbe ^
essere necessario raddoppiare alcuni punti di inserimento ( ) all'interno di una stringa racchiusa tra virgolette doppie e in cui ha luogo la sostituzione ritardata delle variabili ( !
significato speciale).
Prompt dei comandi
Sfortunatamente, quando si digitano direttamente i comandi nella finestra del prompt dei comandi, il raddoppio del %
carattere produce semplicemente, %%
cioè l'approccio sopra non funziona in quel caso.
Sembra esserci una soluzione alternativa che sfrutta una stranezza nell'elaborazione dei comandi: puoi ottenere letterale %
digitando ^
dopo %
. Questo approccio non è infallibile però: se il tuo nome file è racchiuso tra virgolette doppie, ^
viene interpretato letteralmente (e non rimosso come senza virgolette)
- il comando
echo %windir%
produce output:c:\windows
- il comando
echo %^windir%
produce output:%windir%
- il comando
echo "%^windir%"
produce output: "%^windir%"
(con extra ^
- non quello che volevamo)
Consiglio invece un'altra soluzione alternativa:
- crea una variabile come questa:
set "p=%"
- utilizzare
%p%
ovunque sia necessario un segno di percentuale letterale: echo "%p%windir%p%"
ora produrrà output:"%windir%"
La stessa soluzione alternativa può essere utilizzata per ottenere il for
comando di accesso letterale in percentuale , tuttavia notare che diversamente dai file BAT quando si digita for
direttamente il comando non si raddoppiano i segni di percentuale.
Caratteri riservati del filesystem
Normalmente non è possibile creare un file o una directory contenente i seguenti caratteri riservati nel suo nome /
?
<
>
\
:
*
|
"
:, simbolo NULL e caratteri con i codici da 1 a 31; inoltre .
e lo spazio non può essere l'ultimo carattere; e i seguenti nomi sono illegali:com1
com2
com3
com4
com5
com6
com7
com8
com9
lpt1
lpt2
lpt3
lpt4
lpt5
lpt6
lpt7
lpt8
lpt9
con
nul
prn
.
Tuttavia, alcune di queste restrizioni possono essere aggirate prefissando il percorso del file in \\?\
questo modo:\\?\c:\test...\nul
. Almeno i file con nomi riservati e quelli che terminano con spazio e punto possono essere manipolati in questo modo.
Inoltre, il filesystem NTFS stesso supporta diversi sottosistemi di denominazione: DOS, Windows e POSIX. È il sottosistema Windows che ha tutte le restrizioni di cui sopra, mentre POSIX proibisce solo/
simbolo NULL.
Il sistema operativo GNU / Linux (un superset di POSIX) può quindi creare (ed eliminare) nomi di file / directory con cui la maggior parte delle normali funzioni API di Windows (e quindi i programmi Windows) non possono funzionare. Su Windows XP è stato possibile lavorare con loro installando il sottosistema gratuito "Servizi per Unix" (SFU); su Vista e sopra sono richiesti strumenti di terze parti. Non sono sicuro che il nuovo sottosistema ubuntu-on-windows10 possa farlo.
<test>
. Semplicemente non può essere fatto utilizzando le funzioni di gestione dei file di Windows.