передача '=' в аргументах пакетным файлам Windows - PullRequest
3 голосов
/ 26 января 2011

У меня возникли проблемы при передаче аргумента, заканчивающегося знаком =, для пакетных файлов.Учтите это (> это приглашение Windows XP):

> type c.bat
echo %1

> c.bat bla=
bla

> c.bat "bla="
"bla="

Почему проглатывается = в bla=?И как я должен передать знак = в аргументе?

Ответы [ 4 ]

7 голосов
/ 26 января 2011

Это известная проблема: http://support.microsoft.com/kb/35938

Вы можете обойти это следующим образом:

SET ARG1=bla= && your.bat && SET ARG1=

и your.bat:

@ECHO OFF
ECHO %ARG1%

В качестве альтернативы выможет передать его в качестве параметра в кавычках (используя «» вокруг него):

your.bat "bla="

и затем использовать его в командном файле следующим образом:

echo %~1

~ там вэтот случай просто удаляет кавычки.

2 голосов
/ 26 января 2011

Прочитайте документацию:

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true

"Следующие специальные символы требуют кавычек: & <> [] {} ^ =;! '+,` ~ [Пробел] »

1 голос
/ 26 января 2011

Вы можете использовать

your.bat "bla="

------ your.bat ----
echo %~1

или также

your.bat bla=

------ your.bat ----
echo %*

Лучшее решение зависит от регистра.

Описание на

call /?

Обычно лучше заключать проблемные параметры в кавычки и удалять их позже с модификатором %~.
set "param1=%~1" использует тот факт, что %~1 удалит заключающие в кавычки, когда они существуют.
И кавычки вокруг "param1=%~1" гарантируют, что специальные символы не будут давать ошибок.

call :myFunc "<Hard>=&|"
exit /b

:myFunc
setlocal EnableDelayedExpansion
set "param1=%~1"
echo(!param1!
exit /b

Но с кавычками внутри параметра проблемы все еще могут возникать.

call :myFunc "&"^&""
0 голосов
/ 26 января 2011

это будет делать это?

Если tem.cmd содержит

@echo off
set param=%1
set param=%param:"=%
echo %param%

, то

c:\> tem.cmd "hi="

дает

hi=
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...