iT邦幫忙

2

用BAT刪除,建立日期超過7天的資料

各位大大好,
想要用批次檔,可以刪除D:\data\裡面存放超過7天的資料,
原本用forfiles,發現forfiles只能判斷修正日期,
我需要依建檔日期判斷,如果資料存放超過7天就刪除掉,
檔案建立日期不滿7天的不要刪除。

補充一下
D:\data\會有很多種檔案類型
jpeg、html、也可能有目錄,可以的話連同目錄刪除

loveAkame iT邦新手 5 級 ‧ 2020-06-18 21:19:52 檢舉
應該可以利用 powershell 去判斷檔案屬性
gnnuppke iT邦新手 5 級 ‧ 2020-06-19 10:36:39 檢舉
似乎沒法判斷建立日期.只能判斷修改日期..
1
japhenchen
iT邦高手 1 級 ‧ 2020-06-19 08:09:18

既然PowerShell可以插花,我也來個C#的刪檔DEMO........別再寫BAT了啦

using System;
using System.IO;
using System.Linq;

namespace delOld
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime now = DateTime.Now; // 今天
            DirectoryInfo di = new DirectoryInfo(@"X:\"); // 取得 X:\ 資料夾資訊
            // 從 di 裡找出所有zip檔,且列舉出所有 (今天 - 建立日期) 超過 7 天的
            // 用 foreach把上行列舉到的檔案全跑一遍,z 就是每次被列舉到符合條件的zip
            foreach (var z in di.GetFiles("*.zip").Where(p => (now - p.CreationTime).TotalDays > 7))
            { 
                z.Delete();  // 很好理解,把 z 刪除!
                Console.WriteLine($"{z.FullName}: 已刪除"); 
                // 因為我是用類似DOS視窗的Console模式寫這種程式,所以標準顯示目標就是Console啦
            }
            Console.WriteLine("刪除完畢,按任一鍵結束");
            Console.ReadKey();  // 跟批次檔裡的PAUSE同義
        }
    }
}

這個EXE檔不大(使用.NET Framework),重點是指令也很簡單且明確
https://ithelp.ithome.com.tw/upload/images/20200619/20117954yzrMwf7DZ9.jpg

在C#裡的FileIbnfo(從DirectoryInfo裡GetFiles出來的全是FileInfo型別)都有建立日期CreationTime跟最後修改日期LastWriteTime可供使用,在C#裡日期相減就 (a - b).TotalDays
TotalSeconds...Hours...Minutes...Days...Monthes...Years..
(沒有Centuries,電腦發明到現在不到100年)

DirectoryInfo也能GetDirectories(),一樣有Creation跟LastWrite的TIME可操作

刪除非空資料夾一樣很簡單
z.Delete(True);
上方高能,誤觸無法救回

0
by2048
iT邦新手 4 級 ‧ 2020-06-19 14:31:58

set LogPath=D:\DATA
set DayToKeepLog=7
C:\WINDOWS\system32\forfiles.exe -p "%LogPath%" /s /m 檔名.檔名 /d -%DayToKeepLog% -c "cmd /C del @FILE"
for /f "usebackq" %%d in ("dir D:\DATA /ad/b/s | sort /R") do rd "%%d"

檔名可用星點星取代

by2048 iT邦新手 4 級 ‧ 2020-06-19 14:32:46 檢舉

存成批次.bat 排程每天執行

0
mathewkl
iT邦新手 2 級 ‧ 2020-06-20 15:45:31

https://pureinfotech.com/delete-files-older-than-days-windows-10/

ForFiles /p "C:\path\to\folder" /s /d -30 /c "cmd /c del /q @file"

-30為天數
不管副檔名超過天數就是砍,簡單暴力
可以用工作排程器執行,不用掛bat

我要發表回答

立即登入回答