我需要檢查當前目錄的子目錄內是否存在任何文件,該目錄是前一天或之前修改的。批處理腳本檢查是否存在早於一天的子目錄中的文件
這將是非常容易的,如果它的工作使用下面的行。
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會話一個局部變量,而不是當前的,所以我不會在我的腳本中提供它。
雷蒙德陳建議使用另一個用於在實際執行操作: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月15日23:59的文件將在2016年9月16日00:00
'forfiles'不能執行內部'cmd'命令,除非你聲明'cmd/C';這不是一個錯誤; 'forfiles'是一個外部命令(不嵌入'cmd'),所以它不能查看'cmd';你所指的錯誤僅僅是使用*外部命令*。無論如何,你是否知道'forfiles'僅僅是關注日期,但它並不關心時間?所以如果一個文件最後在* 23:59 *處被修改了,它將會在* 00:00 *處被'forfiles/D -1'返回。儘管如此,爲了解決你的問題,我認爲你需要在'forfiles'周圍放置'for/F'循環,但是在'for/D/R'循環中放置* ... – aschipfl
謝謝,我不知道'forfiles'不關心時間。無論如何,我可能需要另一種解決方案。我現在會用這個,直到我找到更好的工作。 – dajavax