Пакетный файл Windows - переменная подстроки, которая содержит амперсанд и выдает «... не распознается как внутренняя или внешняя команда ...» - PullRequest
1 голос
/ 19 сентября 2019

Когда я получаю параметр в командный файл.Я хотел бы выполнить подстроку для параметра.Однако, если параметр имеет амперсанд, он обрабатывает строку после амперсанда как другую команду.

Рабочий пример:

@set var=TomJerry
@echo %var:~3%

Пример отказа:

@set var=Tom&Jerry
@echo %var:~4%

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

Я понимаю, что могу выйти из амперсанда с помощью ^, но у меня нет контроля над входным параметром (% 1).

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

Рабочий пример:

@ECHO OFF
SET "_Var=Tom&Jerry"
SET "_Var=%_Var:&=^&%"
echo %_Var%

Результат:

Y:\>echo %_Var%
Tom&Jerry

В вашем случае, так как вы хотите, чтобы это был первый аргумент:

@ECHO OFF
SET "_Var=%~1"
SET "_Var=%_Var:&=^&%"
echo %_Var%

Вам нужноиспользовать кавычки вокруг переменной и значения в команде SET для захвата большинства * специальных символов.

Чтобы echo из переменных, содержащих эти символы, вы должны либо echo окружить их кавычками,или замените персонажей морковью перед ними.(Или несколько других обходных путей, но они быстрые и простые)

2 голосов
/ 19 сентября 2019
C:\>set "var=Tom&Jerry"

C:\>echo %var:~4%
Jerry

C:\>

Хитрость заключается в использовании предпочтительного синтаксиса set "var=value" (обратите внимание на кавычки и их положение)

Примечание:

C:\>echo %var%
Tom
Der Befehl "Jerry" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

, но:

C:\>echo "%var%"
"Tom&Jerry"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...