Windows 基于文件日期的ForFiles的If语句

Windows 基于文件日期的ForFiles的If语句,windows,batch-file,command-line,forfiles,Windows,Batch File,Command Line,Forfiles,我有一个通过SQLServer代理调用的批处理文件 目前我有: ForFiles /p "C:\folder\subfolder" /d -7 /c "cmd /c del @file" 如果存在超过7天的文件,则该命令可以正常工作 如果没有符合条件的文件,则脚本失败,导致SQL报告失败 理想情况下,我需要添加和if语句,如果文件存在时间超过7天,则执行delete命令,否则忽略它 有任何指导吗?将其包装在一个FOR/F命令中,将标准错误重定向到NUL FOR /F "delims=" %%G

我有一个通过SQLServer代理调用的批处理文件

目前我有:

ForFiles /p "C:\folder\subfolder" /d -7 /c "cmd /c del @file"
如果存在超过7天的文件,则该命令可以正常工作

如果没有符合条件的文件,则脚本失败,导致SQL报告失败

理想情况下,我需要添加和if语句,如果文件存在时间超过7天,则执行delete命令,否则忽略它


有任何指导吗?

将其包装在一个
FOR/F
命令中,将标准错误重定向到NUL

FOR /F "delims=" %%G IN ('forfiles /P "C:\folder\subfolder" /d -7  2^>nul') do DEL "%%~G"
试试这个:

cd /d C:\folder\subfolder
SET _CmdResult=NONE
FOR /F "tokens=*" %%a IN ('forfiles -p "C:\folder\subfolder" -s -m *.* -d -7 -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

它检查错误,并将错误放入一个变量中,然后如果找到,我们将errorlevel设置为零。

您没有在
forfiles
循环中尝试
if exist@file del@file
吗?@aschipfl
forfiles
命令将输出错误:没有找到具有指定搜索条件的文件。如果根据使用的选项找不到任何文件。True,@Squashman!所以
forfiles。。。2> nul | | exit/B 0
可以做到这一点…当/F循环的
没有迭代时,这将把退出代码设置为
1
,这是由SQL工具检测到的…@aschipfl我在cmd行对其进行了测试,并检查了错误级别,它始终为零。是的,
errorlevel
0
,但退出代码是
1
,因为/F的
for
是少数几个不将两个值设置为相同值的命令之一;我忘了,对不起!将整个循环放在括号中并附加
|rem/
,然后
ErrorLevel
也变成
1
。@aschipfl非常感谢。在这个星球上生活了50年后,我以为我对批处理文件的一切都了如指掌。@aschipfl我在你的问题下方的评论中尝试了你的代码选项,但我似乎无法让它工作。