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 ^^^&