1

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

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

这些尝试都不起作用。我试过使用"\" \"", """ """, """" """", "\"" "\"", ""\" \""", "^" ^"", ^"" "^", 等等。他们要么打印双双引号,要么在空格后丢失所有内容,要么是其他东西(这是错误的)。

有任何想法吗?谢谢。

4

3 回答 3

3

这个解决方法怎么样:

caller.bat:

@echo off
echo "A "B C" D">dummy.txt
call callee.bat

被调用者.bat:

@echo off
set /p argument=<dummy.txt
echo %argument%
pause
于 2010-04-11T22:09:54.213 回答
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 . . .

希望能帮助到你!

抱歉我的脚本乱七八糟,我对编程不太了解;)

于 2011-09-09T19:30:06.870 回答
1

这有效

@echo off
if not (%1)==() goto print
:passarg
  call %0 "A "B C" D"
:print
  echo %*
于 2010-04-11T21:06:18.703 回答