
我有一個處理一堆文件的 Windows 批次檔。作為其中的一部分,我使用以下行:
forfiles /p "%~dpn1%LogDir%" /m "%SupportLog%*" /c "cmd /c logreader.py @file > \"%~dpn1%ParsedLogDir%\@file_Logreader.txt\"
這工作正常,但本質上循環遍歷我的所有文件 (%SupportLog%*) 並將每個文件一一傳遞到「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 Shell 命令列語法
- (
%~a
等特別頁)命令列參數(參數) - (
>>
等2>1
專頁)重定向
編輯:
- 第一次嘗試
for /R
遞歸資料夾樹: 拒絕;嘗試for %%a
:有條件地對多個文件執行命令; - 第二次嘗試
"%%~a"
給出完全限定的檔案名稱; - 第三次嘗試
"%%~nxa"
給出了裸檔名和副檔名(無路徑)。