Чи є в командному рядку символ "&"?


10

Я намагаюся щось подібне:

set pwd = abc&123
echo password %pwd%

Я отримую результат як ...

'123' is not recognized as an internal or external command, operable program or batch file. 
password abc

Система подібна до цієї чи є вихід для таких персонажів?


Відповіді:


8

Що потрібно зробити, це згорнути свій пароль у подвійні лапки так:

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

Дайте мені знати, як це йде.


1
Ще один варіант, який може бути кращим у деяких сценаріях,set "pwd=abc&123"
Гаррі Джонстон,

1
-1 шокуюче, що це було 5 оновлень, це неправильно. Windows використовує% var% або! Var! ти міг би так само випробувати його. $ var знаходиться в Linux, якщо ви відлунюєте $ var у windows, він просто говорить буквально $ var
barlop

1
@barlop: бачачи, що це інший рядок, який стосується питання, я не бачу, що це має значення.
Гаррі Джонстон

6

Я виявив, що це найкраще справляється із поєднанням відповіді мартіно та відповіді mastashake57.

set pwd=abc^&123
echo %pwd%

Ще не вдається, і

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

Додає до нього цитати (ви не можете видалити лапки за допомогою forциклу чи рядкової маніпуляції, тому що вона знову вийде з ладу, завдяки амперсанду), що не так вже й чудово.

Однак,

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

Працює чудово.

Сподіваюся, що це допомагає.


+1. Майте на увазі, що це залишає карат у змінній середовищі, тобто він встановлює pwdзначення abc^&123. Більшість часу це, мабуть, саме те, що вам потрібно зробити, але це може вас наздогнати, якщо ви не знаєте, що відбувається.
Гаррі Джонстон

@HarryJohnston Я повинен виправити вашу орфографічну помилку. Це carEt. btw Я знаю, ntcmds.chm згадує це, але де в cmd /? У документації згадується про те, що карета є символом втечі?
барлоп

@Barlop: так і є; Я плутав це з омонімом. Як правило, /?надається лише резюме, а не вичерпна документація.
Гаррі Джонстон

@barlop,? Карета - характер втечі.
Pacerier

@Pacerier так, каре є символом втечі, ніхто з цим не погоджується. і зазначається, що це символ втечі, в ntcmds.chm (ntcmds.chm поставляється з XP і знаходиться в еквівалентному веб-сайті microsoft.com/resources/documentation/windows/xp/all/proddocs/… і, можливо, якимось чином більше оновлених в Інтернеті - можливо більше команд). Я просто запитував, де в /? (якщо де є), в ньому йдеться про те, що карета - це символ втечі
барлоп

5

З довідкового файлу довідкового командного рядка:

Ampersand (&), pipe (|) та дужки () є спеціальними символами, яким повинен передувати символ утечі (^) або лапки, коли ви передаєте їх як аргументи.

Схоже, вводити весь пароль у лапки було б простіше, ніж уникнути окремих символів, якщо в ньому більше двох символів, які потребують лікування.


А цитати в межах цитат?
Pacerier

3

Що вам справді потрібно:

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

Або:

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

Пояснення:

Оскільки &це особливий чар, ви повинні уникати його ^, в результаті чого ^&.

Запуск set pwd=abc^&123встановить змінну в значення abc&123. Після цього, якщо ви бігали echo %pwd%, ви ефективно працюєте echo abc&123.

Але все echo abc&123ж не працює так, як ви очікували, адже &це особлива особливість. Цього можна уникнути, додавши лапки: echo "abc&123"але і у ваших результатах буде вказано значення цитат. Іншими словами, використання лапок не є правильним рішенням.

Що вам потрібно - це уникнути &знака під час виконання echoкоманди:

echo abc^&123

Тому змінна повинна містити значення abc^&123. Щоб встановити змінну на значення abc^&123, вам слід уникнути спеціальних символів ^і &, в результаті чого:

set pwd=abc^^^&123

+1 за вказівку на необхідність уникнути
карети

Чудово працює, дякую. Цей символ втечі чомусь не згадується в doc. Docs.microsoft.com/en-us/windows-server/administration/…
Сергій Смольников,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.