実行可能ファイルに引数として渡す変数として、ディレクトリ内のすべての.dllと.exeの(セミコロンで区切られた)リストを取得したいと考えています。私はいくつかのことを試しましたが、期待どおりに動作することはありません。DOSバッチファイルを使用して実行可能ファイルに渡すファイルのリストを作成するにはどうすればよいですか?
CLS
@ECHO OFF
SET INPUT_FILES=
for /f %%x in ('dir /b E:\Builds\MyProgram\Release\*.exe E:\Builds\MyProgram\Release\*.dll') do ECHO %%x
...しかし、次のステップは非常に適切ではないと私は何を仕事に苦労している:私は後だファイルのリストを以下のプリントアウト - 私はそこの部分の道を持っています私は間違って持っている:
CLS
@ECHO OFF
SET INPUT_FILES=
for /f %%x in ('dir /b E:\Builds\MyProgram\Release\*.exe E:\Builds\MyProgram\Release\*.dll') do IF DEFINED INPUT_FILES SET INPUT_FILES=INPUT_FILES;%%X ELSE SET INPUT_FILES=%%X
ECHO %INPUT_FILES%
私はここに問題を解決する方法を考え出すことができれば、別の実行ファイルへの入力として%INPUT_FILES%
を渡すつもりです。
編集
私は、次のコマンドを実行すると、私はINPUT_FILES変数を更新することができます
IF "%INPUT_FILES%"=="" (SET INPUT_FILES=Test1) ELSE (SET INPUT_FILES=Test1a)
IF "%INPUT_FILES%"=="" (SET INPUT_FILES=Test2) ELSE (SET INPUT_FILES=%INPUT_FILES%;Test2a)
ECHO %INPUT_FILES%
..which出力:
Test1;Test2a
..but私がしようとした場合それをFOR
ループに追加すると、何も得られません。
CLS
REM @ECHO OFF
SET INPUT_FILES=
for /f %%X in ('dir /b E:\Builds\MyProgram\Release\*.exe E:\Builds\MyProgram\Release\*.dll') do (IF "%INPUT_FILES%"=="" (SET INPUT_FILES=%%X) ELSE (SET INPUT_FILES=%INPUT_FILES%;%%X))
ECHO %INPUT_FILES%
恐ろしい - 私は前の例では感嘆符を見たのだが、それらが適切に評価されていないので、 'SETLOCAL EnableDelayedExpansion'ラインを持っていませんでした。 –
'/ f %% X in( 'dir ...')のdoに対してdoを実行すると、最後のセミコロンを削除するだけで、それぞれの名前の後ろにセミコロンを追加すると' IF'コマンドを避けることができます。INPUT_FILES =!INPUT_FILES !%% X; "'と '' SET INPUT_FILES =!INPUT_FILES:〜0、-1! ' – Aacini