2012-06-07 82 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 =什麼 –

相關問題