
多数のファイルを処理する 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
>
ただし、リダイレクトの対象はわかりません。申し訳ありません...
リソース(必読):
- (コマンドリファレンス)Windows CMD コマンドラインの AZ インデックス
- (追加の詳細)Windows CMD シェルのコマンド ライン構文
- (
%~a
など特設ページ)コマンドライン引数(パラメータ) - (
>>
など2>1
特設ページ)リダイレクション
編集:
- 1回目の試み
for /R
フォルダツリーを再帰的に処理する: 拒否されました。試してくださいfor %%a
:条件付きで複数のファイルに対してコマンドを実行する; - 2 回目の試行で
"%%~a"
は完全修飾ファイル名が返されます。 - 3 回目の試行では
"%%~nxa"
、ファイル名と拡張子のみ (パスなし) が返されます。