将以=符号结尾的参数传递给批处理文件时遇到了麻烦。考虑这一点(>是Windows XP提示符):
> type c.bat
echo %1
> c.bat bla=
bla
> c.bat "bla="
"bla="
为什么=
中的bla=
被吞没了?我怎么能在参数中传递一个=符号?
答案 0 :(得分:7)
这是一个众所周知的问题:http://support.microsoft.com/kb/35938
你可以这样绕过它:
SET ARG1=bla= && your.bat && SET ARG1=
和your.bat:
@ECHO OFF
ECHO %ARG1%
或者,您可以将其作为带引号的参数传递(使用“”围绕它):
your.bat "bla="
然后在批处理文件中使用它,如下所示:
echo %~1
在这种情况下,~
只会删除引号。
答案 1 :(得分:2)
阅读文档:
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true
“以下特殊字符需要引号:&<> [] {} ^ =;!'+,`〜[white space]”
答案 2 :(得分:1)
您可以使用
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 "&"^&""
答案 3 :(得分:0)
如果tem.cmd包含
@echo off
set param=%1
set param=%param:"=%
echo %param%
然后
c:\> tem.cmd "hi="
给出
hi=