bat的,我忘了怎麼寫了?
給你ps1的寫法
PowerShell自動刪除檔案(按照檔案修改日,保留近N天內的檔案)
https://medium.com/@jamieleetw95/powershell-%E8%87%AA%E5%8B%95%E5%88%AA%E9%99%A4%E6%AA%94%E6%A1%88-%E6%8C%89%E7%85%A7%E6%AA%94%E6%A1%88%E4%BF%AE%E6%94%B9%E6%97%A5-%E4%BF%9D%E7%95%99%E8%BF%91n%E5%A4%A9%E5%85%A7%E7%9A%84%E6%AA%94%E6%A1%88-46eabad9f465
既然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),重點是指令也很簡單且明確
在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);
上方高能,誤觸無法救回
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"
檔名可用星點星取代
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