1

引数を受け取り、次のように実行するバッチを書きたいと思います。

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

私の各引数は引用符で囲まれています(これは、のようにスペースを含む可能性のあるファイルへのパスであるためですC:\Program Files\foo.txt)。問題は、引数の数が不明であることです。myexe.exe指定されたすべてのパスをコンマで区切って実行するにはどうすればよいですか?

ありがとう。

4

3 に答える 3

0

以下はかなり具体的な解決策です。これは、すべての引数が引用符で囲まれていることが保証されており、コマンドライン上で常に1スペースだけ間隔が空けられている場合にのみ使用できます。

アイデアは、引数のセット全体()を変数に格納し、(引数間のスペースを示す)%*すべての出現箇所を次のように置き換えることです。" "", "

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

特定の特殊記号を説明するために、遅延拡張を使用することもできます。

@ECHO OFF
SET args=%*
SETLOCAL EnableDelayedExpansion
SET args=!args:" "=", "!
myexe.exe !args!
于 2012-06-15T18:40:33.227 に答える
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%
于 2012-06-15T18:09:02.900 に答える
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
于 2012-06-15T16:47:55.193 に答える