2012-06-15 76 views
1

我想寫接收指定參數和運行類似的批次:如何用逗號分隔批次參數?

runmyexe.batch 
==============  
myexe.exe %1, %2, %3 

我的每一個參數的個數用引號括起來(因爲它是可能包含空格,像C:\Program Files\foo.txt文件的路徑)。 問題是參數的個數是未知的。 我還能如何運行myexe.exe,所有給定的路徑都以逗號分隔?

謝謝。

+0

我讀'.exe',這是怎麼一批? – Alexander

+0

它是一個運行exe文件的批處理文件(該批處理也執行其他不相關的事情) – ILK

+0

我認爲你正在製作一些東西,或者在你的問題中遺漏信息。但命令行參數不能按照你想要的方式工作:'a.exe%1,%2'。 – Alexander

回答

0

here修改它,你將逗號分隔的所有參數是這樣的:

set ALL_ARGS= 
if ""%1""=="""" goto doneSetArgs 
set ALL_ARGS=%1% 
shift 
:setArgs 
if ""%1""=="""" goto doneSetArgs 
set ALL_ARGS=%ALL_ARGS%, %1 
shift 
goto setArgs 
:doneSetArgs 
0
@ECHO OFF 
SETLOCAL EnableDelayedExpansion 
REM Build up argument string using delayed expansion. 
REM See the following commands for further enlightenment: 
REM SETLOCAL /? 
REM FOR /? 
REM SET /? 
REM CALL /? 
SET args= 
FOR %%p IN (%*) DO (
    IF "!args!" EQU "" (
     SET args=%%p 
    ) ELSE (
     SET args=!args!, %%p 
    ) 
    REM ECHO %%p 
) 
ECHO myexe.exe %args% 
:: CALL myexe.exe %args% 
0

下面是一個相當具體的解決方案。它只能用於所有參數都被引用,並且它們總是在命令行上間隔一個空格。

的想法是整組的參數(%*)的存儲到一個變量,並用", "取代的" "每發生(這將表示參數之間的空間),是這樣的:

@ECHO OFF 
SET args=%* 
SET args=%args:" "=", "% 
myexe.exe %args% 

要考慮到某些特殊符號,你可能也想使用延遲擴展:

@ECHO OFF 
SET args=%* 
SETLOCAL EnableDelayedExpansion 
SET args=!args:" "=", "! 
myexe.exe !args!