我知道在linux中有一種方法可以過濾特定時間後生成的所有文件。 但我們怎麼能在Windows命令行中做到這一點?或者在bash中。例如,我在一個文件夾中有三個文件。在10/10/2016,12:12:54之後,新文件生成到此文件夾中,我需要知道新文件的名稱,大小和路徑。 或 我不知道何時會生成新文件。我想每10分鐘檢查一次。如果在特定後生成了一些新文件,我可以獲取文件的名稱,路徑和大小。 我搜索了一些關於這方面的信息,我知道我可以使用forfiles /P directory /S /D +08/01/2013
來做到這一點。但它會顯示所有在08/01/2013之後在目錄下修改的文件。但我希望它顯示目錄中的文件夾和目錄文件夾中的所有文件(不在其子目錄中)。如何在windows中查找特定時間點後的新文件?(命令行)
-1
A
回答
0
儘管您沒有表現出任何努力來解決您的任務,但我決定提供一個腳本,它返回自上次執行以來創建的文件列表。它不會檢查文件創建時間戳記,因爲純粹的batch-file解決方案本身不支持日期/時間數學。相反,它會生成一個文件列表,將其存儲在一個臨時文件中,並將其與先前保存的列表進行比較。
反對依靠文件時間戳,這將肯定會識別每個新文件。檢查時間戳時,文件可能被視爲新的,因爲上次運行錯誤或者新文件可能無法被錯誤識別,特別是在執行腳本期間創建的文件。
所以這裏是代碼:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "TARGET=D:\Data" & rem // (path to the directory to observe)
set "PATTERN=*.*" & rem // (search pattern for matching files)
set "LIST=%TEMP%\%~n0" & rem // (file base name of the list files)
set "FIRSTALL=#" & rem /* (defines behaviour upon first run:
rem set to anything to return all files;
rem set to empty to return no files) */
rem /* Determine which list file exists, ensure there is only one,
rem then toggle between file name extensions `.one`/`.two`: */
set "LISTOLD=%LIST%.two"
set "LISTNEW=%LIST%.one"
if exist "%LIST%.one" (
if not exist "%LIST%.two" (
set "LISTOLD=%LIST%.one"
set "LISTNEW=%LIST%.two"
) else (
erase "%LIST%.one"
if defined FIRSTALL (
> "%LIST%.two" rem/
) else (
erase "%LIST%.two"
)
)
) else (
if not exist "%LIST%.two" (
if defined FIRSTALL (
> "%LIST%.two" rem/
)
)
)
rem /* Create new list file, containing list of matching files
rem sorted by creation date in ascending order: */
> "%LISTNEW%" dir /B /A:-D /O:D /T:C "%TARGET%\%PATTERN%"
if not exist "%LISTOLD%" (
> nul 2>&1 copy /Y "%LISTNEW%" "%LISTOLD%"
)
rem // Search new list file for items not present in old one:
2> nul findstr /V /I /X /L /G:"%LISTOLD%" "%LISTNEW%"
if ErrorLevel 2 type "%LISTNEW%"
rem // Delete old list file:
erase "%LISTOLD%"
endlocal
exit /B
第一次運行該腳本,在被監控目錄中的所有文件都回來了,除非你改變set "FIRSTALL=#"
到set "FIRSTALL="
,在這種情況下,沒有文件被返回的第一次。
核心命令是findstr
,它被配置爲使舊列表文件提供用於搜索新列表文件並返回不匹配行的文字搜索字符串,因此輸出是新列表文件的那些行,其中不會發生在舊的。
假設腳本保存爲new-files-since-last-run.bat
,你可以環繞構成爲10分鐘輪詢率一個無限循環,這樣其他的小腳本:
@echo off
:LOOP
> nul timeout /T 600 /NOBREAK
call "%~dp0new-files-since-last-run.bat"
goto :LOOP
設置Windows任務計劃可能是更好的選擇。
相關問題
- 1. 如何在命令提示符中查找特定文件
- 2. 如何查找perforce上次更新特定文件的時間?
- 3. 如何在特定時間後查找所有數據庫行
- 4. 從命令行在Windows上查找CPU時間
- 5. 如何將特定文件傳送到查找命令?
- 6. Linux命令對特定文件夾中的新文件「執行」?
- 7. 如何查找從Python命令行定義函數的文件
- 8. 如何查找在特定日期從特定用戶名運行的命令
- 9. 如何在一個文件中grep命令查找特定字符串
- 10. Perforce P4命令行:如何在存儲庫中查找文件?
- 11. 如何在Unix中執行Python文件查找命令
- 12. 不斷查找文件,當文件存在時,運行命令
- 13. 如何在Windows中查找特定線程的入口點?
- 14. 在Windows .bat文件中設置命令的超時時間
- 15. 如何在python中查找csv文件中的特定行
- 16. 如何在Windows中從特定目錄運行命令?
- 17. 在bat文件中給定時間後結束命令
- 18. 如何從java執行cmd命令後定期檢查文件?
- 19. 如果程序在特定時間運行,運行命令?
- 20. 特定時間後運行Windows服務
- 21. 如何在一定時間後運行一次命令(RoR)?
- 22. shell命令在Python中運行特定的Windows可執行文件
- 23. Linux命令查找文件中的特定行並在其下面添加新行
- 24. 批處理命令忽略dir命令後的特定文件?
- 25. 用於刪除比特定時間更新的文件的Windows命令行腳本,遞歸地
- 26. 使用find命令查找特定的文件擴展名
- 27. 在bash中按給定時間間隔重新執行命令
- 28. 如何在另一個命令運行的某個時間後運行命令?
- 29. 如何在批量文件的最後10行中查找特定單詞
- 30. 如何在特定時間後在腳本中運行特定條件php
輸入'forfiles /?'不要使用'/ s'。參見'timeout /?'和'goto /?'。輸入'Help'。 – 2016-10-11 00:21:13
作爲超時的替代方案,您可以使用任務計劃程序,每十分鐘運行一次批處理文件(我猜)。 – geisterfurz007
'forfiles'只檢查最後修改日期,而不檢查創建日期;此外,它根本不關心時間,所以你不能用它來檢查自從最近10分鐘以來創建的新文件(如果我的意圖正確)。另一種完全不同的方法是:將文件列表(參見'dir /?')存儲到文本文件中,並將其與每10分鐘一次的實際可用文件進行比較?這避免了批處理本身不支持的日期/時間數學... – aschipfl