batch-file
Rymmer specialtecken
Sök…
Introduktion
I alla cmd.exe
och DOS
versioner är vissa tecken reserverade för specifik användning (t.ex. kommandoomdirigering). Det här ämnet talar om hur man använder specialtecken utan problem.
Escape med caret (^)
De flesta specialtecken kan undkommas med hjälp av caret ( ^
). Ta en titt på följande exempel.
echo > Hi
echo ^> Hi
Det första kommandot skulle inte matas ut > Hi
eftersom >
är ett specialtecken, vilket betyder att omdirigera utdata till en fil. I det här fallet heter filen "Hej"
Men i det andra kommandot, > Hi
skulle matas ut utan problem eftersom caret ( ^
) säger >
att sluta fungera som "omdirigera output till fil" -kommando, nu >
är bara ett normalt tecken.
Här är en lista med specialtecken som kan undkomma (tas och redigeras från Rob van der Woude's sida)
Karaktär | Flyktat resultat | Anmärkningar |
---|---|---|
^ | ^^ | |
& | ^ & | |
< | ^ < | |
> | ^> | |
| | ^ | | |
\ | ^ \ | |
! | ^^! | Krävs endast när DelayedExpansion är på |
Rymmer från caret
Carets kan staplas upp till andra flyktingar, se följande exempel.
Inmatning | Produktion |
---|---|
^ & | & |
^ ^ ^ & | ^ & |
^ ^ ^ ^ ^ & | ^^ & |
Obs: Caretsna i fetstil undviks.
Säkerhetsproblem
Lite av ämnet här, men det är mycket viktigt! En oönskad utsläpp i karet i slutet av filen kan orsaka en minnesläcka!
any-invalid-command-you-like-here ^
Detta kommando skulle läcka ut allt minne och göra systemet helt oanvändbart ! Se här för mer information.
FINNA och FINDSTR specialtecken
I find
och findstr
finns det några specialtecken som kräver viss försiktighet.
HITTA
Det finns bara en karaktär som behöver fly - "
citat. För att undkomma det, lägg bara till ett annat citat bredvid. Så "
blir ""
. Ganska enkelt.
FINDSTR
Findstr
kommer med många karaktärer att undkomma, så var mycket försiktig. Med \
kan vi undgå specialtecken. Här är en lista med specialtecken att fly
Karaktär | Flyktat resultat |
---|---|
\ | \\ |
[ | \ [ |
] | \] |
" | \" |
. | \. |
* | \ * |
? | \? |
FOR / F Specialtecken
FOR / F
I ett FOR /F
uttalande måste vissa tecken rymma, här en lista (tas och redigeras från Rob van der Woude's sida)
Karaktär | Flyktat resultat | Anmärkningar |
---|---|---|
' | ^' | Behövs endast i FOR /F : s parentes, såvida usebackq anges. |
' | ^ ' | Behövs endast i FOR /F : s parentes när usebackq anges |
, | ^, | ┒ |
; | ^; | ┃ |
= | ^ = | ┣ Måste rymmas i FOR /F : s parenteser, även om det är dubbelciterat |
( | ^ ( | ┃ |
) | ^) | ┙ |
Extra specialtecken
Här är en lista med andra specialtecken som kräver / kan komma undan, men som inte nämns ovan.
Karaktär | Flyktat resultat | Anmärkningar |
---|---|---|
% | %% | |
[LF] | ^ [LF] | Detta trick är uppmärksammat av Mark Stang i alt.msdos.batch . |
Flyr genom pipeline
När det finns ett uttryck med ett rör startar cmd
två trådar på båda sidor av röret och uttrycket tolkas två gånger (för varje sida av röret) så att carets måste fördubblas.
På vänstra sidan:
echo ^^^&|more
På höger sida:
break|echo ^^^&