看起来很简单。 在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
答案 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