Próbuję czegoś takiego:
set pwd = abc&123
echo password %pwd%
Otrzymuję wynik jako ...
'123' is not recognized as an internal or external command, operable program or batch file.
password abc
Czy taki system jest, czy też istnieje ucieczka dla takich postaci?
windows
command-line
batch
deostroll
źródło
źródło
Odpowiedzi:
Musisz zawinąć swoje hasło w podwójne cudzysłowy:
Daj mi znać jak idzie.
źródło
set "pwd=abc&123"
Odkryłem, że najlepiej działa z kombinacją odpowiedzi Martineau i odpowiedzi mastashake57.
Nadal zawodzi i
Dodaje do niego cudzysłowy (nie można usunąć cudzysłowu za pomocą
for
manipulacji pętlą lub łańcuchem, ponieważ ponownie zawiedzie dzięki znakom ampersand), co nie jest takie świetne.Jednak,
Działa świetnie.
Mam nadzieję, że to pomaga.
źródło
pwd
naabc^&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./?
stanowi jedynie podsumowanie, a nie wyczerpującą dokumentację.Z pliku pomocy odniesienia wiersza polecenia:
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.
źródło
Tak naprawdę potrzebujesz:
Lub:
Wyjaśnienie:
Ponieważ
&
jest to specjalny znak, musisz z niego uciec^
, w wyniku czego^&
.Uruchomienie
set pwd=abc^&123
ustawi zmienną na wartośćabc&123
. Następnie, jeśli miałbyś biececho %pwd%
, skutecznie biegaszecho abc&123
.Jednak
echo abc&123
nie 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 uruchomieniuecho
polecenia:Zatem zmienna musi zawierać wartość
abc^&123
. Aby ustawić zmienną na wartośćabc^&123
, musisz uciec ze specjalnych znaków^
i&
, w wyniku czego:źródło