繁体   English   中英

批处理脚本以检查子目录中的现有文件是否早于一天

[英]Batch Script to check if existing files inside subdirectories older than a day

我需要检查当前目录的子目录内是否有任何文件,该文件是在一天前或之前被最后一次修改的。

如果可行的话,使用下面的行将非常容易。

FOR /D /r %%G in ("*") DO forfiles /p "%%G" /D -1 /C "SET /a exists = 1"

但是,在使用forfiles执行命令时会出现bug,因此您应该从中调用另一个cmd。 (请参阅http://ss64.com/nt/forfiles.html

最后需要调用它:

FOR /D /r %%G in ("*") DO forfiles /p "%%G" /D -1 /C "cmd /c SET /a exists = 1"

问题在于,“存在”将在另一个cmd会话中是局部变量,而不是当前cmd会话中的局部变量,因此我不会在脚本中使用它。

Raymond Chen建议使用另一个FOR在以下位置实际执行操作: https : //blogs.msdn.microsoft.com/oldnewthing/20120803-00/?p=6953

这使我写了以下行:

for /f %%i in ('FOR /D /r %%G in ("*"^) DO forfiles /p %%G /D -1 /C "cmd /c echo 1"') do set exists=%%i

但是在这种情况下,这是行不通的,因为我之间还有另一个FOR,并且写入“ exists”的内容是子目录而不是“ 1”。

我怎样才能解决这个问题?

提前致谢。

编辑:正如aschipfl所提到的,切换两个FOR命令的放置使其起作用,但是我现在的局限性在于它只检查日期,而不关心时间。 因此,如果脚本在2016年9月16日00:00运行,则会显示修改日期为2016年9月15日23:59的文件。

为什么必须使用FORFILES

ROBOCOPY/ MINAGE开关是否有帮助?

如果有任何文件早于1天,则应设置%_exists%变量:

@ECHO OFF

(SET _fold=%USERPROFILE%\MYDIRECTORY)

SET "_exists="
FOR /F "DELIMS=" %%I IN (
    'ROBOCOPY /L /S /MINAGE:1 /NS /NC /NP /NDL /NJH /NJS "%_fold%" NULL *.*'
    ) DO SET/A _exists+=1
IF NOT DEFINED _exists EXIT/B

REM Commands here if a file exists
ECHO( Your command is running

TIMEOUT -1 >NUl
EXIT/B

显然,我只是在第12行上放置了一条命令,您可能会更改它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM