czy w wierszu polecenia jest znak ucieczki dla znaku „&”?


Odpowiedzi:


9

Musisz zawinąć swoje hasło w podwójne cudzysłowy:

set pwd="abc&123"
echo %pwd%

Daj mi znać jak idzie.


1
Inną opcją, która może być lepsza w niektórych scenariuszach, jestset "pwd=abc&123"
Harry Johnston

1
-1 szokujące jest to, że miał 5 głosów pozytywnych, to źle. Windows używa% var% lub! Var! tak łatwo mogłeś to przetestować. $ var jest w
systemie

1
@barlop: ponieważ jest to druga linia, która odnosi się do pytania, nie widzę, żeby miało to znaczenie.
Harry Johnston,

7

Odkryłem, że najlepiej działa z kombinacją odpowiedzi Martineau i odpowiedzi mastashake57.

set pwd=abc^&123
echo %pwd%

Nadal zawodzi i

set pwd="abc&123"
echo %pwd%

Dodaje do niego cudzysłowy (nie można usunąć cudzysłowu za pomocą formanipulacji pętlą lub łańcuchem, ponieważ ponownie zawiedzie dzięki znakom ampersand), co nie jest takie świetne.

Jednak,

set "pwd=abc^&123"
echo %pwd%

Działa świetnie.

Mam nadzieję, że to pomaga.


+1. Pamiętaj, że pozostawia to karat w zmiennej środowiskowej, tzn. Ustawia pwdna abc^&123. Przez większość czasu jest to prawdopodobnie to, co musisz zrobić, ale może cię złapać, jeśli nie będziesz wiedział, co się dzieje.
Harry Johnston,

@HarryJohnston Muszę poprawić błąd ortograficzny. To jest CarEt. btw wiem ntcmds.chm wspomina o tym, ale gdzie w cmd /? czy wspomniano o dokumentacji, że daszek jest ucieczką?
barlop

@Barlop: tak jest; Myliłem to z homonimem. Zasadniczo /?stanowi jedynie podsumowanie, a nie wyczerpującą dokumentację.
Harry Johnston,

@barlop,? Daszek jest ucieczką.
Pacerier,

@Pacerier tak, caret jest ucieczką, nikt się z tym nie zgadza. i wspomniano, że jest to znak ucieczki, w ntcmds.chm (ntcmds.chm pochodzi z XP i znajduje się w równoważnym internetowym microsoft.com/resources/documentation/windows/xp/all/proddocs/... i może w jakiś sposób bardziej aktualne online - może więcej poleceń). Właśnie pytałem, gdzie w /? (jeśli gdziekolwiek), mówi, że karetka jest ucieczką
barlop

7

Z pliku pomocy odniesienia wiersza polecenia:

Znak ampersand (&), pipe (|) i nawiasy () są znakami specjalnymi, które muszą być poprzedzone znakiem zmiany znaczenia (^) lub znakiem cudzysłowu, gdy przekazujesz je jako argument.

Wydaje się, że umieszczenie całego hasła w cudzysłowie byłoby łatwiejsze niż unikanie pojedynczych znaków, jeśli w środku są więcej niż dwa znaki wymagające leczenia.


I cytaty w cudzysłowie?
Pacerier

4

Tak naprawdę potrzebujesz:

set pwd=abc^^^&123
echo %pwd%

Lub:

set "pwd=abc^&123"
echo %pwd%

Wyjaśnienie:

Ponieważ &jest to specjalny znak, musisz z niego uciec ^, w wyniku czego ^&.

Uruchomienie set pwd=abc^&123ustawi zmienną na wartość abc&123. Następnie, jeśli miałbyś biec echo %pwd%, skutecznie biegasz echo abc&123.

Jednak echo abc&123nie działa zgodnie z oczekiwaniami, ponieważ &jest specjalnym char. Można tego uniknąć, dodając cudzysłowy: echo "abc&123"ale dane wyjściowe również będą zawierały znaki cudzysłowu. Innymi słowy, stosowanie cudzysłowów nie jest właściwym rozwiązaniem.

Musisz tylko uciec od &znaku po uruchomieniu echopolecenia:

echo abc^&123

Zatem zmienna musi zawierać wartość abc^&123. Aby ustawić zmienną na wartość abc^&123, musisz uciec ze specjalnych znaków ^i &, w wyniku czego:

set pwd=abc^^^&123

+1 za wskazanie potrzeby ucieczki z karetki
jmcg

Działa świetnie, dziękuję. Ta postać ucieczki nie jest wymieniona w dokumencie z jakiegoś powodu docs.microsoft.com/en-us/windows-server/administration/...
Sergey Smolnikov
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.