将一个以=结尾的参数传递给批处理文件时遇到了麻烦。考虑这个(>是在Windows XP提示):将参数传递给windows批处理文件
> type c.bat
echo %1
> c.bat bla=
bla
> c.bat "bla="
"bla="
为什么=
在bla=
吞噬?我该如何在参数中传递一个=号?
将一个以=结尾的参数传递给批处理文件时遇到了麻烦。考虑这个(>是在Windows XP提示):将参数传递给windows批处理文件
> type c.bat
echo %1
> c.bat bla=
bla
> c.bat "bla="
"bla="
为什么=
在bla=
吞噬?我该如何在参数中传递一个=号?
这是一个众所周知的问题:http://support.microsoft.com/kb/35938
你可以绕过它是这样的:
SET ARG1=bla= && your.bat && SET ARG1=
和your.bat:
@ECHO OFF
ECHO %ARG1%
或者你可以把它作为一个参数报价(在其周围使用“”):
your.bat "bla="
,然后使用它在批处理文件如下:
echo %~1
在这种情况下,~
那里只是删除了引号。
阅读该文档:
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true
“下面的特殊字符需要引号:& <> [] {}^=;'+,`〜[空白]”
谢谢!但是这说的是=有问题,但不是在这里发生了什么(窗口不会抱怨命令有什么问题),也不知道如何通过bla =。 – 2011-01-26 16:32:54
您可以通过将参数放在引号内来传递blah =,就像在上例中一样。 – 2011-01-26 16:46:07
不完全 - 然后我正在传递“bla =” - 包括引号 - 而不仅仅是bla =正如我所愿。但另一个答案表明实际上没有解决方案。 – 2011-01-26 16:57:16
会这样做吗?
如果tem.cmd包含
@echo off
set param=%1
set param=%param:"=%
echo %param%
然后
c:\> tem.cmd "hi="
给
hi=
您可以使用
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 "&"^&""
的“unquoting”通过`%〜1`是关键,也是当你想通过`调用传递的东西给你的函数:my_function_label“%my_var_with_ugly_chars”“ - 不带引号你会得到的第一个标记参数为'%1',并且在他们的情况下,您需要删除引号。 – 2014-09-11 10:56:55