Windows バッチ ファイル、フォルダー内のファイルをループして、別のスクリプトに渡すパラメーター リストを作成します。

Windows バッチ ファイル、フォルダー内のファイルをループして、別のスクリプトに渡すパラメーター リストを作成します。

多数のファイルを処理する Windows バッチ ファイルがあります。この一部として、次の行を使用します。

forfiles /p "%~dpn1%LogDir%" /m "%SupportLog%*" /c "cmd /c logreader.py @file > \"%~dpn1%ParsedLogDir%\@file_Logreader.txt\"

これは問題なく動作しますが、基本的にはすべてのファイル (%SupportLog%*) をループし、各ファイルを 1 つずつ "logreader.py" スクリプトに渡します。

私が本当にやりたいのは、これらすべてのファイルのリストまたはパラメータを作成し、それらをすべて一度に Python スクリプトに渡すことです。実行されるコマンドは次のようになります。

logreader.py "logfile.log" "logfile.log.1" "logfile.log.3" .....

次のように、forfile コマンド内で SET コマンドを使用しようとしました。

forfiles /p "%~dpn1%LogDir%" /m "%SupportLog%*" /c "cmd /c set PARAMS=%PARAMS%@file "

ただし、これを実行して ECHO をオンのままにすると、次のように表示されます。

forfiles /p "C:\Path\log" /m "logfile.log*" /c "cmd /c set PARAMS=@file "

これは間違っています。そして、「echo %PARAMS%」を実行しても、結果は得られません。

これを実現する方法はありますか?

多くの感謝

答え1

環境変数の変更子供 cmdインスタンス (呼び出し元cmd /c) は親cmdプロセスの環境には影響しません。次のコード スニペットが役立つかもしれません:

SETLOCAL EnableExtensions EnableDelayedExpansion
set "LogDir=%~dpn1log"         my guess only
set "SupportLog=logfile.log"   my guess only
set "PARAMS="                  initial value
rem 1st try for /R "%LogDir%" %%a in ("%SupportLog%*") do set PARAMS=!PARAMS! "%%~a"
rem 2nd try for %%a in ("%LogDir%\%SupportLog%*") do set "PARAMS=!PARAMS! "%%~a""
rem 3rd try
for %%a in ("%LogDir%\%SupportLog%*") do set "PARAMS=!PARAMS! "%%~nxa""
echo logreader.py %PARAMS%

デバッグ目的で命令型が使用されているlogreader.pyだけであることに注意してください。echo

>ただし、リダイレクトの対象はわかりません。申し訳ありません...

リソース(必読):

編集:

関連情報