如何用逗号分隔批处理args?

时间:2012-06-15 16:32:11

标签: batch-file dos

我想编写一个接收args的批处理并运行类似:

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

我的每个args都被引号括起来(因为它是指向可能包含空格的文件的路径,例如C:\Program Files\foo.txt)。 问题是args的数量是未知的。 如何以逗号分隔所有给定的pathes运行myexe.exe

感谢。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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%

答案 2 :(得分:0)

以下是一个相当具体的解决方案。只有在保证引用所有参数且它们总是在命令行上间隔一个空格时才能使用它。

这个想法是将整个参数集(%*)存储到一个变量中,并用" "替换每个", "(这表示参数之间的空格),像这样:

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

要考虑某些特殊符号,您可能还想使用延迟扩展:

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