2012-06-07 56 views
1

看起来这很简单。 在一个bat文件,我把一个程序,它的命令行参数 我有PARMS作为一个字符串,我与“”围而不 它只能看到一个PARM(如果猜它击中的空间)将参数传递给bat文件为1字符串

试了一下

所以,问题是我如何把这个字符串,作为参数列表 实际的字符串是下面的,必须格式化为这样的“”等

-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

辐条很快现在的问题是与主叫的PGM寻求与从如下ASP WSH打电话,与&上的parmstr etcparmstr = sReportName&sOutputName&sUserID&SPW&每一端CHR(34)试了sParm1&sParm2&sParm3 wshell =的CreateObject( “WScript.Shell”) \t wshell.exec( “C:\ run_russ_rpt_parm.bat” &Parmstr) \t wshell =什么 –

回答

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 
+0

美丽的,优秀的,太感谢你了!作品! –

+0

@RussRomei - 如果满足您的需求,请不要忘记接受答案。 (点击复选标记)。该行动让人们知道该问题已得到解答,它向您提问提问者2分,并向回答者授予15分。 – dbenham

+0

很快讲到问题了,现在的问题是调用pgm用asp调用wsh,如下所示,在parmstr的每一端用&chr(34)尝试它。parmstr = sReportName&sOutputName&sUserID&sPW&sParm1&sParm2& sParm3 wshell = CreateObject(“WScript.Shell”)wshell.exec(“c:\ run_russ_rpt_parm。蝙蝠”&Parmstr)wshell =什么 –

相关问题