将参数传递给bat文件为1个字符串

时间:2012-06-07 13:43:56

标签: batch-file parameter-passing

看起来很简单。 在bat文件中,我调用一个接受命令行参数的程序 我把parms作为一个字符串,我用“”围绕而不是 它只能看到一个parm(如果猜到它击中了空间)

所以问题是如何将字符串作为参数列表传递 实际字符串在下面,必须使用“”etc

进行格式化
-U romeirj -P Abc123 -F C:\inetpub\wwwroot\russ\crexport\russ.rpt -O C:\inetpub\wwwroot\russ\russ.pdf -A "startdate: 01-01-2010" -A "gender:M" -A "type:PENDJUD"

想从bat文件调用它看起来像

batfile.bat parmstring

bat文件内容

program.exe %1

1 个答案:

答案 0 :(得分:3)

只要所有批处理参数都传递给您的程序,您就可以使用您指定的参数调用批处理,并在批处理脚本中使用以下内容。

program.exe %*

如果您只想将一些批处理参数传递给被调用程序,问题会变得复杂得多。

不幸的是,没有方法可以在引用的字符串中转义引号。逃避参数分隔符也是不可能的。因此,不可能在单个批处理参数中同时嵌入空格和引号。

SHIFT命令可以去除前导参数,但%*总是扩展到原始参数列表;它忽略了之前的SHIFT操作。

FOR / F不会忽略引用的分隔符,所以它没有帮助。

简单的FOR可以正确解析引用的参数列表,但它会使用文件系统扩展*?个字符。这可能是个问题。

唯一要做的就是使用结合SHIFT的GOTO循环来构建包含所需参数的字符串。

假设前3个参数严格用于批处理文件,其余参数将传递给被调用程序。

@echo off
setlocal

set "args="
:buildProgramArgs
if [%4]==[] goto :argsComplete
set args=%args% %4
shift /4
goto :buildProgramArgs

:argsComplete
program.exe %args%

::args %1 %2 and %3 are still available for batch use