batch-file
Ucieczka ze znaków specjalnych
Szukaj…
Wprowadzenie
We wszystkich wersjach cmd.exe i DOS niektóre znaki są zarezerwowane do określonego zastosowania (np. Przekierowanie poleceń). W tym temacie omówimy, jak używać znaków specjalnych bez problemów.
Ucieczka za pomocą karetki (^)
Większość znaków specjalnych można uciec za pomocą karetki ( ^ ). Spójrz na następujący przykład.
echo > Hi
echo ^> Hi
To pierwsze polecenie nie wypisuje > Hi ponieważ > jest znakiem specjalnym, co oznacza przekierowanie wyjścia do pliku. W tym przypadku plik ma nazwę „Cześć”
Jednak w drugim poleceniu > Hi zostanie wypisane bez żadnego problemu, ponieważ daszek ( ^ ) każe > przestać działać jako polecenie „przekieruj wyjście do pliku”, teraz > jest po prostu normalnym znakiem.
Oto lista znaków specjalnych, które można uciec (wzięte i edytowane ze strony Roba van der Woude'a)
| Postać | Wynik ucieczki | Uwagi |
|---|---|---|
| ^ | ^^ | |
| I | ^ I | |
| < | ^ < | |
| > | ^> | |
| | | ^ | | |
| \ | ^ \ | |
| ! | ^^! | Wymagane tylko, gdy włączone jest opóźnienie rozszerzenia |
Ucieczka z karetki
Karetki można układać w stosy, aby uciec przed innymi karetami, rozważ następujący przykład.
| Wejście | Wynik |
|---|---|
| ^ I | I |
| ^ ^ ^ I | ^ I |
| ^ ^ ^ ^ ^ & | ^^ i |
Uwaga: karety w pogrubionej formie są usuwane.
Problem bezpieczeństwa
Nieco tutaj, ale to bardzo ważne! Niechciana funkcja daszka na końcu pliku może spowodować wyciek pamięci!
any-invalid-command-you-like-here ^
To polecenie spowodowałoby wyciek całej pamięci, czyniąc system całkowicie bezużytecznym ! Zobacz tutaj, aby uzyskać więcej informacji.
ZNAJDŹ i FINDSTR Znaki specjalne
W find i findstr znajduje się kilka znaków specjalnych, które wymagają ostrożności.
ODNALEŹĆ
Jest tylko jedna postać, która wymaga ucieczki - " cytat. Aby uciec, po prostu dodaj kolejny cytat obok niej. Tak więc " staje się "" . Dość proste.
FINDSTR
Findstr ma wiele postaci do ucieczki, więc bądź bardzo ostrożny. Używając \ , możemy uciec od znaków specjalnych. Oto lista znaków specjalnych do ucieczki
| Postać | Wynik ucieczki |
|---|---|
| \ | \\ |
| [ | \ [ |
| ] | \] |
| „ | \ ” |
| . | \. |
| * | \ * |
| ? | \? |
Znaki specjalne FOR / F
FOR / F
W instrukcji FOR /F niektóre znaki wymagają ucieczki, tutaj lista (pobrana i edytowana ze strony Roba van der Woude'a)
| Postać | Wynik ucieczki | Uwagi |
|---|---|---|
| „ | ^ ' | Potrzebne tylko w nawiasach FOR /F , chyba że usebackq . |
| ` | ^ ` | Potrzebne tylko w nawiasach FOR /F , gdy usebackq |
| , | ^, | ┒ |
| ; | ^; | ┃ |
| = | ^ = | ┣ Należy wstawić znaki ucieczki w nawiasach FOR /F , nawet jeśli jest to cudzysłów |
| ( | ^ ( | ┃ |
| ) | ^) | ┙ |
Dodatkowe znaki specjalne
Oto lista innych znaków specjalnych, które wymagają / mogą potrzebować ucieczki, ale nie zostały wymienione powyżej.
| Postać | Wynik ucieczki | Uwagi |
|---|---|---|
| % | %% | |
| [LF] | ^ [LF] | Trik ten jest omawiany przez Marka Stanga w alt.msdos.batch dyskusyjnej alt.msdos.batch . |
Ucieczka przez rurociąg
Gdy istnieje wyrażenie z potokiem, cmd rozpoczyna dwa wątki po obu stronach potoku, a wyrażenie jest analizowane dwukrotnie (dla każdej strony potoku), więc należy podwoić liczbę znaków.
Po lewej stronie:
echo ^^^&|more
Po prawej stronie:
break|echo ^^^&