我需要幫助如何檢查特定文件夾中的時間戳超過2天的文件,然後刪除或刪除或複製到其他地方?如何在Windows批處理腳本中檢查文件的時間戳創建?
4
A
回答
0
不確定刪除,但可以使用RoboCopy(它是Windows 7的一部分)。參數:/ MAXAGE:n會複製比n更早的文件 - 我通常會將副本複製到備份文件夾中,稍後我會確定從該目錄中刪除所有文件。
希望這會有所幫助。
3
使用~t
修飾符的簡單FOR
循環與SET
命令返回目錄中文件的上次修改日期。
參見本實施例中
@echo off
setlocal enabledelayedexpansion
echo Files changed today %date%
FOR %%A IN (*.*) DO (
set tf=%%~tA
set fd=!tf:~0,10!
if !fd!==%date% (
echo %%F !tf!
)
)
詳細信息,請參見HELP FOR
和HELP SET
。
但是,對於超出了簡單的比較,上述結果顯示比較日期時,你需要提取每個日期組件
set dd=!tf:~0,2!
set mm=!tf:~3,2!
set yyyy=!tf:~6,4!
但是,等待,在一個BAT文件中提取日期組件是一個非常棘手的問題,因爲%DATE%
和~t
修飾符使用短日期格式來格式化日期格式,這是完全(無休止地)可定製的。一個用戶可以將其系統配置爲返回Fri040811,而另一個用戶可以選擇08/04/2011。這對於BAT程序員來說是一個完整的噩夢。
一個可能的解決方案是臨時更改格式。看到這個例子。
@echo off
echo System Date Time = %date% %time%
reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f >nul
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy-MM-dd" /f >nul
reg add "HKCU\Control Panel\International" /v sTimeFormat /d "HH:mm:ss" /f >nul
echo Normalized Date Time = %date% %time%
set dd=%date:~8,2%
set mm=%date:~5,2%
set yyyy=%date:~0,4%
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f >nul
最後你應該做的日期算術,你需要在年月日的日期轉換爲天數,這不是很明顯都不是。這裏有一些代碼來做這個轉換。
:days
:: Algorithm based on Fliegel-Van Flandern algorithm from the Astronomical Almanac,
:: provided by Doctor Fenton on the Math Forum (http://mathforum.org/library/drmath/view/51907.html),
:: and converted to batch code by Ron Bakowski.
SET /A Month1 = (1%MM% %% 100 - 14)/12
SET /A Year1 = %YYYY% + 4800
SET /A days = 1461 * (%Year1% + %Month1%)/4 + 367 * ((1%MM% %% 100) - 2 -12 * %Month1%)/12 - (3 * ((%Year1% + %Month1% + 100)/100))/4 + (1%DD% %% 100) - 32075
SET Month1=
SET Year1=
goto :eof
奇怪的成語(1%MM% %% 100)
來解決問題與方法SET /A
解釋爲八進制與零開頭的號碼。
所以,把所有那些拼湊...
@echo off
setlocal enabledelayedexpansion enableextensions
reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f >nul
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy-MM-dd" /f >nul
reg add "HKCU\Control Panel\International" /v sTimeFormat /d "HH:mm:ss" /f >nul
set dd=%date:~8,2%
set mm=%date:~5,2%
set yyyy=%date:~0,4%
call :days
set /a today=!days!
FOR %%A IN (*.*) DO (
set tf=%%~tA
set fd=!tf:~0,10!
set dd=!fd:~8,2!
set mm=!fd:~5,2!
set yyyy=!fd:~0,4!
call :days
set /a age= !today!-!days!
if !age! leq 2 (
echo %%A is !age! days old
)
)
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f >nul
goto :eof
:days
:: Algorithm based on Fliegel-Van Flandern algorithm from the Astronomical Almanac,
:: provided by Doctor Fenton on the Math Forum (http://mathforum.org/library/drmath/view/51907.html),
:: and converted to batch code by Ron Bakowski.
SET /A Month1 = (1%MM% %% 100 - 14)/12
SET /A Year1 = %YYYY% + 4800
SET /A days = 1461 * (%Year1% + %Month1%)/4 + 367 * ((1%MM% %% 100) - 2 -12 * %Month1%)/12 - (3 * ((%Year1% + %Month1% + 100)/100))/4 + (1%DD% %% 100) - 32075
SET Month1=
SET Year1=
goto :eof
0
here is the reference of how you can delete files older than 2 days
繼cmd命令將做到這一點。
forfiles /p "c:\path" /s /m *.* /d -365 /c "cmd /c del @file"
相關問題
- 1. 如何檢查Windows批處理腳本中文件的大小?
- 2. 如何創建在目錄中的每個文件夾中創建文本文件的腳本? (Windows批處理)
- 3. 批處理腳本重置所有文件的時間戳
- 4. 如何獲得UNIVERSAL Windows批處理文件時間戳
- 5. 如何使用批處理腳本檢查時間的格式?
- 6. Windows批處理:從字符串創建時間戳
- 7. 如何檢查文件/目錄是否在批處理腳本
- 8. 在批處理腳本中獲取文件夾的創建日期和時間
- 9. 在批處理腳本中生成帶時間戳的唯一文件名
- 10. 批處理文件批處理文件檢查打開的瀏覽器腳本
- 11. 在日期間查找創建/訪問/修改的文件,批處理腳本
- 12. 如何在shell腳本中運行windows批處理文件?
- 13. 學習Windows批處理文件腳本
- 14. 在Windows批處理腳本
- 15. 在Windows批處理腳本
- 16. Windows批處理腳本 - 在
- 17. 在Windows批處理腳本
- 18. 在Windows 7中使用批處理腳本檢查主機文件的實體?
- 19. 在批處理作業中創建文件名作爲時間戳
- 20. Windows,批處理文件時間條件
- 21. 如何從Advantage SQL腳本創建批處理文件?
- 22. 如何創建批處理文件來執行sql腳本
- 23. 如何比較windows批處理腳本中的文件格式
- 24. 在批處理腳本中檢查文件大小
- 25. 如何在Windows批處理文件中創建無限循環?
- 26. 在批處理腳本之間顯示的批處理腳本
- 27. 創建Windows批處理文件以創建文件夾/文件
- 28. 批處理腳本檢查和清理
- 29. 在windows批處理腳本中使用FOR LOOP創建多個文件
- 30. 如何在Windows上從批處理文件運行FTP腳本?
IMO此問題屬於serverfault – onof
您的意思是創建時間戳或修改時間戳? –
@onof,IMO這是一個關於編程bat文件的問題。 –