есть ли экранирование символа '&' в командной строке?


11

Я пытаюсь что-то вроде:

set pwd = abc&123
echo password %pwd%

Я получаю результат как ...

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

Система такая или есть спасение для таких персонажей?


Ответы:


9

Что вам нужно сделать, это заключить пароль в двойные кавычки, например, так:

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: видя, как это другая строка, которая отвечает на вопрос, я не вижу, что это имеет значение.
Гарри Джонстон

7

Я обнаружил, что это лучше всего работает с комбинацией ответа Мартино и ответа 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. Кстати, я знаю, что ntcmds.chm упоминает это, но где в cmd /? в документации упоминается о том, что карета была спасательным персонажем?
Бароп

@ Барлоп: так оно и есть; Я путал это с омонимом. По общему правилу /?предоставляется только сводная, а не исчерпывающая документация.
Гарри Джонстон

@ barlop,? Каретка - это спасательный персонаж.
Pacerier

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

7

Из справочного файла справки командной строки:

Амперсанд (&), pipe (|) и круглые скобки () являются специальными символами, которым должны предшествовать escape-символ (^) или кавычки при передаче их в качестве аргументов.

Похоже, что вводить весь пароль в кавычки было бы проще, чем экранировать отдельные символы, если в нем более двух символов, требующих обработки.


И цитаты в кавычках?
Pacerier

4

Что вам действительно нужно:

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 за указание на необходимость убежать от
кареты

Отлично работает, спасибо. Этот экранирующий символ почему-то не упоминается в документе docs.microsoft.com/en-us/windows-server/administration/…
Сергей Смольников
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.