我试图遍历每个office (office_list.txt)的用户列表(office_list.txt),并在找到更新日期(%3)的文件时创建一个文件。下面的代码不起作用,所以我决定重复错误级别,发现它总是-1073741510 (在Windows2003机器上工作)。最终,我试图识别用户主目录(由office组织),这些目录自给定日期以来没有被修改过。任何想法都将不胜感激。
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"
)
)发布于 2011-03-22 21:26:39
将/V:on选项添加到cmd中,使用!errorlevel!代替%errorlevel%,后者打开延迟扩展。
发布于 2011-03-22 21:07:39
可能,主要问题是cmd /c if %errorlevel% == 0部分,它在执行任何命令之前都会扩展错误级别。
通常情况下,延迟扩展是一种选择,但在这里它不起作用(或者像乔伊提到的,在/V:on中),因为它是在一个新的cmd上下文中。
在这里,您可以这样使用cmd /c if %%errorlevel%% == 0,因此,如果第一次解析完整的块,则将部分展开为cmd /c if %errorlevel% == 0,并且在执行cmd /c时第二次展开。
你可以稍微美化一下代码
set "officePath=U:\sysmon\u_cleanup"
set "officeDatePath=%officePath%\results\office_lists_%YY_MM_DD%"
for /f "tokens=1 delims= " %%i in ("%officePath%\office_list.txt") do (
if not exist "%officePath%\results\%%i" (
mkdir "%officePath%\results\%%i"
)
for /f "tokens=1 delims= " %%j in ("%officeDatePath%\%%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 > %officePath%\results\%%i\%%j_%YY_MM_DD%.txt"
)
)https://stackoverflow.com/questions/5397620
复制相似问题