1

这似乎很简单。在一个 bat 文件中,我调用了一个接受命令行参数的程序,我将参数作为一个字符串,我用 "" 尝试过它,而不是它只看到一个参数(如果猜到它命中了空格)

所以问题是我如何将字符串作为参数列表传递实际字符串在下面,并且必须使用“”等进行格式化

-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
4

1 回答 1

3

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

program.exe %*

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

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

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

FOR /F 不会忽略带引号的分隔符,因此无济于事。

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

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

假设前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
于 2012-06-07T14:34:35.097 回答