我正在尝试遍历每个办公室(office_list.txt)的用户列表(office_id_list_%YY_MM_DD%\%%
),并在日期(%3
)更新的文件时创建文件找到。下面的代码没有工作,所以我决定回显errorlevel,发现它总是-1073741510
(在Windows 2003机器上工作)。最终,我正在尝试识别自给定日期以来未被修改的用户主目录(按办公室组织)。
任何想法都将不胜感激。
for /f "tokens=1 delims= " %%i in (U:\sysmon\u_cleanup\office_list.txt) do (
if not exist u:\sysmon\u_cleanup\results\%%i mkdir u:\sysmon\u_cleanup\results\%%i
for /f "tokens=1 delims= " %%j in (U:\sysmon\u_cleanup\results\office_lists_%YY_MM_DD%\%%i_dir_list_%YY_MM_DD%_final.txt) do (
forfiles /P %1%%i\%%j /S /D +%3 /C "cmd /c if %errorlevel% == 0 echo ** Do not Archive - Found files modified after %3 > U:\sysmon\u_cleanup\results\%%i\%%j_%YY_MM_DD%.txt"
)
)
答案 0 :(得分:1)
将/V:on
选项添加到cmd
并使用!errorlevel!
代替%errorlevel%
,这会启用延迟扩展。
答案 1 :(得分:0)
可能主要问题是部分cmd /c if %errorlevel% == 0
,它会在执行任何命令之前扩展错误级别。
通常延迟扩展是选择,但在这里它不起作用(或者像Joey提到的那样,使用/ V:on),因为它位于新的cmd上下文中。
在这里你可以这样使用它cmd /c if %%errorlevel%% == 0
,所以如果第一次解析完整的块,那么该部分将扩展为cmd /c if %errorlevel% == 0
,并且当{{{}}时,它会再次扩展。 1}}被执行。
你可以稍微美化代码
cmd /c