Windows批处理文件,循环遍历文件夹中的文件以创建要传递到另一个脚本的参数列表

Windows批处理文件,循环遍历文件夹中的文件以创建要传递到另一个脚本的参数列表

我有一个 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 ON 时,我看到:

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为了调试目的而使用的。

但是,我不理解>重定向的目标,抱歉......

资源(必读):

编辑

相关内容