Windows Don';无法理解for中嵌入的forfiles命令的返回代码
我正在尝试循环浏览每个办公室的用户列表(Windows Don';无法理解for中嵌入的forfiles命令的返回代码,windows,batch-file,cmd,windows-server-2003,Windows,Batch File,Cmd,Windows Server 2003,我正在尝试循环浏览每个办公室的用户列表(office\u id\u list\%YY\u MM\u DD%\%%),并在找到比日期(%3)更新的文件时创建一个文件。下面的代码不起作用,所以我决定回显errorlevel,发现它总是-1073741510(在Windows 2003机器上工作)。最后,我试图识别自给定日期以来未被修改的用户主目录(由office组织)。 任何想法都将不胜感激 可能主要的问题是部分cmd/c如果%errorlevel%==0,它会在执行任何命令之前扩展errorle
office\u id\u list\%YY\u MM\u DD%\%%
),并在找到比日期(%3
)更新的文件时创建一个文件。下面的代码不起作用,所以我决定回显errorlevel,发现它总是-1073741510
(在Windows 2003机器上工作)。最后,我试图识别自给定日期以来未被修改的用户主目录(由office组织)。
任何想法都将不胜感激
可能主要的问题是部分
cmd/c如果%errorlevel%==0
,它会在执行任何命令之前扩展errorlevel
通常选择延迟扩展,但在这里它不起作用(或者像Joey提到的那样,使用/V:on),因为它在一个新的cmd上下文中
在这里,如果%%errorlevel%%==0,您可以这样使用cmd/c,因此如果第一次解析完整的块,如果%errorlevel%%==0
,则该部分将扩展为cmd/c,并且在执行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"
)
)
可能主要的问题是部分cmd/c如果%errorlevel%==0
,它会在执行任何命令之前扩展errorlevel
通常选择延迟扩展,但在这里它不起作用(或者像Joey提到的那样,使用/V:on),因为它在一个新的cmd上下文中
在这里,如果%%errorlevel%%==0
,您可以这样使用cmd/c,因此如果第一次解析完整的块,如果%errorlevel%%==0
,则该部分将扩展为cmd/c,并且在执行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"
)
)
将/V:on
选项添加到cmd
并使用!错误等级
而不是启用延迟扩展的%errorlevel%
。将/V:on
选项添加到cmd
并使用!错误等级
而不是启用延迟扩展的%errorlevel%
。谢谢。同样有效。感谢代码美化提示。如果可能的话,我确实喜欢简化流程,但当我尝试时,似乎会引入更多的问题。关于延迟扩展或dos如何解释变量(可能是加载时和运行时讨论),您有什么好的参考资料吗。不管怎样,谢谢。@jim:对于初学者和专家,对于理解批处理是如何工作的(专家)谢谢。同样有效。感谢代码美化提示。如果可能的话,我确实喜欢简化流程,但当我尝试时,似乎会引入更多的问题。关于延迟扩展或dos如何解释变量(可能是加载时和运行时讨论),您有什么好的参考资料吗。不管怎样,非常感谢。@jim:对于初学者和专家,对于理解批处理是如何工作的(专家)