在很多情况下,我已经处理了使用空格,引号,百分比和斜杠以及它们的各种组合传递批处理文件参数。通常我设法弄清楚如何完成我想要的东西,但这次我被卡住了。我现在尝试了几百个组合,我的头开始受伤了。
我已将问题简化为一个相当简单的要求:从一个批处理文件传递到另一个批处理文件,该参数包含一些以空格分隔的文本,其中一个是引用空格。也就是说,一个批处理文件应该将一些字符串X
传递给另一个,以便第二个文件传递回"A "B C" D"
。我只是想不出X
应该是什么。
这是一个最小的批处理文件,演示了一些不起作用的尝试。 (这个BAT文件通过自己调用来代替两者。)
::Goal is to print:
::"A "B C" D"
::ie., pass from one BAT file to another a quote containing spaces and a quote containing a space
@echo off
if not (%1)==() goto print
:passarg
call %0 "A "B C" D"
call %0 "A \"B C\" D"
%0 "A ""B C"" D"
:print
echo %1
pause
这些尝试都没有奏效。我尝试过使用"\" \""
,""" """
,"""" """"
,"\"" "\""
,""\" \"""
,"^" ^""
,^"" "^"
等等。他们要么打印双引号,要么丢失空格后的所有内容,要么输入其他内容(这是错误的)。
有什么想法吗?感谢。
答案 0 :(得分:3)
这个解决方法怎么样:
<强> caller.bat:强>
@echo off
echo "A "B C" D">dummy.txt
call callee.bat
<强> callee.bat:强>
@echo off
set /p argument=<dummy.txt
echo %argument%
pause
答案 1 :(得分:1)
此作品
@echo off
if not (%1)==() goto print
:passarg
call %0 "A "B C" D"
:print
echo %*
答案 2 :(得分:1)
我是论坛的新手。非常酷,但直到现在才注册。
我喜欢从另一个调用批处理的想法,非常方便,所以你尽可能“打包”到一个文件中。
我知道这个帖子已经老了,希望我不会被禁止或者其他东西大笑
:Example.bat
@echo off
set SOMEARG=%1
set EXAMPLEARG=%2
set EXAMPLEARG=%EXAMPLEARG:""="%
set NEWFOLDER=%3
if not (%1)==() GOTO PRINT
CALL %0 SomeWord "Hey this arg has quoted "" "" spaces!" "C:\Program Files\Folder with spaces\Subfolder"
:PRINT
ECHO.
ECHO %0
ECHO %SOMEARG%
ECHO %EXAMPLEARG%
ECHO %NEWFOLDER%
ECHO.
pause
输出
"C:\SUT_Tools\Scripts\Testing\GLSU\Example.bat"
SomeWord
"Hey this arg has quoted " " spaces!"
"C:\Program Files\Folder with spaces\Subfolder"
Press any key to continue . . .
希望它有所帮助!
对于我乱糟糟的剧本感到抱歉,我对编程并不太深入;)