![](/img/trans.png)
[英]Don't remove a folder until all files in the folder is older than 24 hours
[英]Delete all files older than 1 day / 24hours using creation date?
我想使用操作系統中的定時任務和批處理文件刪除所有早於1天/ 24小時的文件。
這是我實現的簡單備份機制所必需的,該機制每個小時都會保存一個文件,並且我不想手動刪除舊文件。
我已經實現了以下批處理代碼,該代碼成功地每小時創建一個備份。 但是,代碼的刪除部分似乎不起作用。
有人對為什么有任何建議嗎?
PS:我正在使用Win7 x64。
碼:
rem Get day of week
SETLOCAL enabledelayedexpansion
SET /a count=0
FOR /F "skip=1" %%D IN ('wmic path win32_localtime get dayofweek') DO (
if "!count!" GTR "0" GOTO next
set dow=%%D
SET /a count+=1
)
:next
rem Check if day of week is Saturday or Sunday. If so, goto end of file.
if %dow% == 6 GOTO eof
if %dow% == 7 GOTO eof
rem Set hour
set TIMESTAMP=%TIME:~0,2%"Uhr"
rem Copy file including timestamp
xcopy "SOURCE FOLDER" "TARGET FOLDER\filename_%date%_%TIMESTAMP%.accdb*" /Y
rem Delete files older than 1 day
forfiles -p "TARGET FOLDER (from above)" -s -m *.* /D -1 /C "cmd /c del @path"
:eof
編輯:
我發現了最初問題的原因,這是UNC路徑。 我沒有使用它們,而是現在將路徑映射到驅動器號,並且刪除現在可以正常工作。
但是,它會立即刪除我的所有文件,而不只是早於1天的文件。
我懷疑forfiles使用的是上次修改日期而不是創建日期,因為上一次修改仍在26日,並且創建就像一個小時前一樣。
有沒有辦法避免這種行為並改用創建日期?
或者,是否可以在復制文件后將修改日期設置為某個時間戳?
也許有些“令人費解”,但這應該可以完成工作
@echo off
setlocal enableextensions disabledelayedexpansion
set "folder=\\server\share\somewhere"
for /f "tokens=*" %%a in (
'robocopy "%folder%" "%folder%" /l /nocopy /is /minage:1 /njh /njs /ndl /ns /nc /fp'
) do echo del "%%a"
del
命令回顯到控制台。 如果輸出正確,請刪除echo
命令。
它使用robocopy
命令在UNC路徑中搜索所需的文件。 因此,本機僅適用於Vista和更高版本的操作系統。 對於XP,Windows 2003資源工具包工具包含robocopy的有效版本。
編輯-還有一個。 嘗試避免文件上的時間戳
@echo off
setlocal enableextensions disabledelayedexpansion
set "folder=\\server\share\somewhere"
for /f "tokens=* skip=24" %%a in (
'dir /b /a-d /tc /o-d "%folder%"'
) do echo del "%folder%\%%a"
每小時生成一個文件,保留最后24個並刪除其余的文件。
我可以使用dbenham的getTimestamp.bat解決問題: http : //www.dostips.com/forum/viewtopic.php? f =3& t = 4847&p = 27422#p27422
這是我可以找到的唯一一個工作批處理文件,該文件能夠計算昨天的日期(可能是該日期的任何一天)。
它可能是唯一可行的方法,因為所有其他方法(以及所有在StackOverflow線程中鏈接的方法)都沒有考慮到語言環境設置,因此對於我來說它們甚至都沒有。
call getTimeStamp -od -1 -f {dd}.{mm}.{yyyy} -r dt
rem Copy file including timestamp
xcopy "\\unc\folder\fileToBackup.accdb" "\\unc\folder\backupedFile_%date%_%TIMESTAMP%.accdb*" /Y
rem Delete yesterdays file
del "\\unc\folder\backupedFile_%dt%_%TIMESTAMP%.accdb*"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.