我正在使用一个批处理文件来删除超过14天的归档文档,并从一个自动化进程(Lansa Composer)调用该文件,该进程读取脚本的返回代码,以查看是否存在问题。脚本如下:
@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上尝试了解决方案,但它们不能达到我想要的效果,因为在第一种情况下,它会禁止所有错误,而在第二种情况下,错误消息的文本会被传递,但实际的返回代码仍然会被禁止(这是自动化过程读取的代码)。
发布于 2013-05-30 20:52:39
解决方案是在FOR循环中捕获FORFILES命令的输出,在其中搜索以ERROR开头的字符串,并将结果存储在一个变量中。在那里,您可以使用IF/ELSE指令来相应地设置errorlevel
。下面是代码(去掉一些日志和注释):
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循环中的任何字符,如>&|
。
发布于 2013-05-30 02:35:40
这应该可以解决这个问题:
@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天的文件。所有其他错误消息将照常显示。
发布于 2015-04-10 05:30:24
添加2>nul做到了这一点。谢谢!
forfiles /p d:\todayfiles /d +0 /c "cmd /c echo @path“2>nul | find ":”/c
这基本上抑制了该命令的错误流。因此,即使在执行此操作时出现其他错误,它们也不会出现!
https://stackoverflow.com/questions/16820681
复制相似问题