2011-01-26 76 views
3

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

> type c.bat 
echo %1 

> c.bat bla= 
bla 

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

为什么=bla=吞噬?我该如何在参数中传递一个=号?

回答

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

的“unquoting”通过`%〜1`是关键,也是当你想通过`调用传递的东西给你的函数:my_function_label“%my_var_with_ugly_chars”“ - 不带引号你会得到的第一个标记参数为'%1',并且在他们的情况下,您需要删除引号。 – 2014-09-11 10:56:55

2

阅读该文档:

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

“下面的特殊字符需要引号:& <> [] {}^=;'+,`〜[空白]”

+0

谢谢!但是这说的是=有问题,但不是在这里发生了什么(窗口不会抱怨命令有什么问题),也不知道如何通过bla =。 – 2011-01-26 16:32:54

+0

您可以通过将参数放在引号内来传递blah =,就像在上例中一样。 – 2011-01-26 16:46:07

+0

不完全 - 然后我正在传递“bla =” - 包括引号 - 而不仅仅是bla =正如我所愿。但另一个答案表明实际上没有解决方案。 – 2011-01-26 16:57:16

0

会这样做吗?

如果tem.cmd包含

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

然后

c:\> tem.cmd "hi=" 

hi= 
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 "&"^&"" 
相关问题