我需要检查当前目录的子目录中是否有任何文件,该文件是在前一天或之前修改过的。
如果有效,可以使用以下代码。
FOR /D /r %%G in ("*") DO forfiles /p "%%G" /D -1 /C "SET /a exists = 1"
然而,在使用它执行命令时forfiles存在一个错误,你应该从中调用另一个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"
问题在于,#34;存在"将是另一个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,并且写入的内容是'存在'是子目录而不是' 1'。
我该如何解决这个问题?
提前致谢。
编辑: 正如aschipfl所提到的,切换两个FOR命令的位置使其工作,但我现在有限制,它只是检查日期而不关心时间。因此,如果脚本在2016年9月16日00:00运行,则会显示修改日期为2016年9月15日23:59的文件
答案 0 :(得分:0)
为什么必须使用 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行发出命令只是为了它的地狱,你可能会改变它。