首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >取消显示FORFILES“找不到文件”错误

取消显示FORFILES“找不到文件”错误
EN

Stack Overflow用户
提问于 2013-05-30 01:50:32
回答 8查看 35.6K关注 0票数 17

我正在使用一个批处理文件来删除超过14天的归档文档,并从一个自动化进程(Lansa Composer)调用该文件,该进程读取脚本的返回代码,以查看是否存在问题。脚本如下:

代码语言:javascript
运行
复制
@echo off
@Echo Deleting files older than 14 days...
cd /d C:\Windows\System32
FORFILES /P "[file path...]\IDOC_ARCHIVE" /M *.* /D -14 /C "cmd /c del @file"

经过一些谷歌搜索后,我在this page上尝试了解决方案,但它们不能达到我想要的效果,因为在第一种情况下,它会禁止所有错误,而在第二种情况下,错误消息的文本会被传递,但实际的返回代码仍然会被禁止(这是自动化过程读取的代码)。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-05-31 04:52:39

解决方案是在FOR循环中捕获FORFILES命令的输出,在其中搜索以ERROR开头的字符串,并将结果存储在一个变量中。在那里,您可以使用IF/ELSE指令来相应地设置errorlevel。下面是代码(去掉一些日志和注释):

代码语言:javascript
运行
复制
cd /d C:\Windows\System32
SET _CmdResult=NONE
FOR /F "tokens=*" %%a IN ('FORFILES /P "[file path...]\IDOC_ARCHIVE" /M *.* /D -14 /C "cmd /c DEL @file" 2^>^&1 ^| FINDSTR ERROR') DO SET _CmdResult=%%a
IF "%_CmdResult%" == "ERROR: No files found with the specified search criteria." ( 
    SET errorlevel=0 
 ) ELSE ( 
    SET errorlevel=1
 )
IF "%_CmdResult%" == "NONE" SET errorlevel=0

只需确保转义FOR循环中的任何字符,如>&|

票数 6
EN

Stack Overflow用户

发布于 2013-05-30 10:35:40

这应该可以解决这个问题:

代码语言:javascript
运行
复制
@echo off
Echo Deleting files older than 14 days...
cd /d C:\Windows\System32
copy /b forfiles.exe "[file path...]\IDOC_ARCHIVE" >nul
FORFILES /P "[file path...]\IDOC_ARCHIVE" /M *.* /D -14 /C "cmd /c del @file"

它所做的是提供一个超过14天的文件-因此它将始终被删除,并且不会出现“找不到文件”的消息。我选择了要复制的forfiles.exe,但您可以使用任何超过14天的文件。所有其他错误消息将照常显示。

票数 13
EN

Stack Overflow用户

发布于 2015-04-10 13:30:24

添加2>nul做到了这一点。谢谢!

forfiles /p d:\todayfiles /d +0 /c "cmd /c echo @path“2>nul | find ":”/c

这基本上抑制了该命令的错误流。因此,即使在执行此操作时出现其他错误,它们也不会出现!

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16820681

复制
相关文章

相似问题

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