![](/img/trans.png)
[英]Batch script to move file from scource to destination folder for files older than 30 day
[英]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.