簡體   English   中英

使用創建日期刪除所有早於1天/ 24小時的文件嗎?

[英]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*"

forfiles確實確實使用了修改后的時間戳,而不是創建的時間戳,因此您無法將其用於所需的時間戳。

您可能希望檢查此問題的答案,以批處理腳本解析文件創建日期,或者如果您願意使用PowerShell,則可以嘗試使用帶有-CreateTime選項的參數的腳本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM