传递批处理文件包含包含空格的引用的参数

时间:2010-04-11 20:59:01

标签: batch-file escaping quotes spaces command-line-arguments

在很多情况下,我已经处理了使用空格,引号,百分比和斜杠以及它们的各种组合传递批处理文件参数。通常我设法弄清楚如何完成我想要的东西,但这次我被卡住了。我现在尝试了几百个组合,我的头开始受伤了。

我已将问题简化为一个相当简单的要求:从一个批处理文件传递到另一个批处理文件,该参数包含一些以空格分隔的文本,其中一个是引用空格。也就是说,一个批处理文件应该将一些字符串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

这些尝试都没有奏效。我尝试过使用"\" \""""" """"""" """""\"" "\""""\" \""""^" ^""^"" "^"等等。他们要么打印双引号,要么丢失空格后的所有内容,要么输入其他内容(这是错误的)。

有什么想法吗?感谢。

3 个答案:

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

希望它有所帮助!

对于我乱糟糟的剧本感到抱歉,我对编程并不太深入;)