首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中嵌入的forfiles命令的返回代码。

中嵌入的forfiles命令的返回代码。
EN

Stack Overflow用户
提问于 2011-03-22 20:45:45
回答 2查看 2.1K关注 0票数 1

我试图遍历每个office (office_list.txt)的用户列表(office_list.txt),并在找到更新日期(%3)的文件时创建一个文件。下面的代码不起作用,所以我决定重复错误级别,发现它总是-1073741510 (在Windows2003机器上工作)。最终,我试图识别用户主目录(由office组织),这些目录自给定日期以来没有被修改过。任何想法都将不胜感激。

代码语言:javascript
复制
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"
  )
)
EN

回答 2

Stack Overflow用户

发布于 2011-03-22 21:26:39

/V:on选项添加到cmd中,使用!errorlevel!代替%errorlevel%,后者打开延迟扩展。

票数 1
EN

Stack Overflow用户

发布于 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时第二次展开。

你可以稍微美化一下代码

代码语言:javascript
复制
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"
    )
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5397620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档