我有一个 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
为了调试目的而使用的。
但是,我不理解>
重定向的目标,抱歉......
资源(必读):
- (命令参考)Windows CMD 命令行的 AZ 索引
- (其他细节)Windows CMD Shell 命令行语法
- (
%~a
等专题页面)命令行参数(参数) - (
>>
等2>1
专题页面)重定向
编辑:
- 第一次尝试
for /R
递归文件夹树:拒绝;尝试for %%a
:有条件地对多个文件执行命令; - 第二次尝试
"%%~a"
给出完全合格的文件名; - 第三次尝试
"%%~nxa"
给出裸文件名和扩展名(无路径)。