我想寫接收指定參數和運行類似的批次:如何用逗號分隔批次參數?
runmyexe.batch
==============
myexe.exe %1, %2, %3
我的每一個參數的個數用引號括起來(因爲它是可能包含空格,像C:\Program Files\foo.txt
文件的路徑)。 問題是參數的個數是未知的。 我還能如何運行myexe.exe
,所有給定的路徑都以逗號分隔?
謝謝。
我想寫接收指定參數和運行類似的批次:如何用逗號分隔批次參數?
runmyexe.batch
==============
myexe.exe %1, %2, %3
我的每一個參數的個數用引號括起來(因爲它是可能包含空格,像C:\Program Files\foo.txt
文件的路徑)。 問題是參數的個數是未知的。 我還能如何運行myexe.exe
,所有給定的路徑都以逗號分隔?
謝謝。
從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
@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%
下面是一個相當具體的解決方案。它只能用於所有參數都被引用,並且它們總是在命令行上間隔一個空格。
的想法是整組的參數(%*
)的存儲到一個變量,並用", "
取代的" "
每發生(這將表示參數之間的空間),是這樣的:
@ECHO OFF
SET args=%*
SET args=%args:" "=", "%
myexe.exe %args%
要考慮到某些特殊符號,你可能也想使用延遲擴展:
@ECHO OFF
SET args=%*
SETLOCAL EnableDelayedExpansion
SET args=!args:" "=", "!
myexe.exe !args!
我讀'.exe',這是怎麼一批? – Alexander
它是一個運行exe文件的批處理文件(該批處理也執行其他不相關的事情) – ILK
我認爲你正在製作一些東西,或者在你的問題中遺漏信息。但命令行參數不能按照你想要的方式工作:'a.exe%1,%2'。 – Alexander