batch-file
Escaping caratteri speciali
Ricerca…
introduzione
In tutte le versioni cmd.exe
e DOS
, alcuni caratteri sono riservati per un uso specifico (ad esempio il reindirizzamento dei comandi). Questo argomento parlerà di come utilizzare i caratteri speciali senza problemi.
Fuga usando il segno di omissione (^)
La maggior parte dei caratteri speciali può essere sfuggita utilizzando il segno di omissione ( ^
). Dai un'occhiata al seguente esempio.
echo > Hi
echo ^> Hi
Questo primo comando non verrà emesso > Hi
perché >
è un carattere speciale, che significa reindirizzare l'output a un file. In questo caso, il file è denominato "Ciao"
Comunque nel secondo comando, > Hi
sarebbe emesso senza alcun problema perché il segno di omissione ( ^
) dice al comando >
di smettere di funzionare come comando "redireziona l'output su file", ora >
è solo un carattere normale.
Ecco una lista di caratteri speciali che possono essere sfuggiti (presi e modificati dalla pagina di Rob van der Woude)
Personaggio | Risultato sfuggito | Osservazioni |
---|---|---|
^ | ^^ | |
& | ^ & | |
< | ^ < | |
> | ^> | |
| | ^ | | |
\ | ^ \ | |
! | ^^! | Richiesto solo quando DelayedExpansion è attivo |
Sfuggire al cursore
I carnet possono essere impilati fino alla fuga di altri caret, prendere in considerazione il seguente esempio.
Ingresso | Produzione |
---|---|
^ & | & |
^ ^ ^ & | ^ & |
^ ^ ^ ^ ^ & | ^^ & |
Nota: i caratteri in grassetto sono sfuggiti.
Problema di sicurezza
Un po 'fuori tema qui, ma questo è molto importante! Una fuga del cursore indesiderata alla fine del file potrebbe causare una perdita di memoria!
any-invalid-command-you-like-here ^
Questo comando potrebbe perdere tutta la memoria, rendendo il sistema completamente inutilizzabile ! Vedi qui per maggiori informazioni.
TROVA e FINDSTR Caratteri speciali
In find
e findstr
, ci sono alcuni caratteri speciali che richiedono una certa cautela.
TROVA
C'è solo un personaggio che ha bisogno di scappare - "
preventivo "
Per evitarlo, aggiungi semplicemente un'altra citazione accanto ad esso, quindi "
diventa ""
. Abbastanza semplice.
FINDSTR
Findstr
viene fornito con un sacco di personaggi da cui fuggire, quindi per favore sii molto cauto. Usando \
, possiamo sfuggire a caratteri speciali. Ecco una lista di personaggi speciali da sfuggire
Personaggio | Risultato sfuggito |
---|---|
\ | \\ |
[ | \ [ |
] | \] |
" | \" |
. | \. |
* | \ * |
? | \? |
Caratteri speciali FOR / F
FOR / F
In una frase FOR /F
, alcuni caratteri devono essere salvati, qui una lista (presa e modificata dalla pagina di Rob van der Woude)
Personaggio | Risultato sfuggito | Osservazioni |
---|---|---|
' | ^' | usebackq solo nelle parentesi FOR /F , a meno che non sia specificato usebackq . |
` | ^ ` | usebackq solo nelle parentesi FOR /F , quando viene specificato usebackq |
, | ^, | ┒ |
; | ^; | ┃ |
= | ^ = | ┣ Deve essere sfuggito nelle parentesi FOR /F , anche se è doppia citazione |
( | ^ ( | ┃ |
) | ^) | ┙ |
Caratteri speciali extra
Ecco una lista di altri caratteri speciali, che richiedono (s) / potrebbe essere necessario fuggire, ma non menzionati sopra.
Personaggio | Risultato sfuggito | Osservazioni |
---|---|---|
% | %% | |
[LF] | ^ [LF] | Questo trucco è interpretato da Mark Stang nel gruppo di notizie alt.msdos.batch . |
Fuggire attraverso il gasdotto
Quando c'è un'espressione con una pipe, il cmd
avvia due thread su entrambi i lati della pipe e l'espressione viene analizzata due volte (per ciascun lato della pipe) in modo che i segni di omissione debbano essere raddoppiati.
Sul lato sinistro:
echo ^^^&|more
Dal lato giusto:
break|echo ^^^&