在参数中传递'='到Windows批处理文件

时间:2011-01-26 16:20:48

标签: windows batch-file

将以=符号结尾的参数传递给批处理文件时遇到了麻烦。考虑这一点(>是Windows XP提示符):

> type c.bat
echo %1

> c.bat bla=
bla

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

为什么=中的bla=被吞没了?我怎么能在参数中传递一个=符号?

4 个答案:

答案 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=