請問一下,寫了一個批次檔用來刪除舊的備份資料夾,資料夾名稱是含有日期的,想用名稱來抓目標
執行完發現沒錯誤也沒有刪除,也確實抓到正確的資料夾名稱,直接把執行出來的 rd /s /q "E:\資料\LY Backup 2024-07-31 18;15 (完整)",手動執行一次也是可以的,但就是在批次檔裡跑會沒反應
請問是哪裡出了問題嗎? 謝謝
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
REM 設定要檢查的目錄路徑
set "backupPath=E:\西北資料"
REM 設定日期格式
for /f "tokens=1-3 delims=/- " %%a in ('date /t') do (
set "today=%%a-%%b-%%c"
)
REM 計算6天前的日期
for /f "tokens=1-3 delims=/- " %%a in ('powershell -command "(Get-Date).AddDays(-6).ToString('yyyy-MM-dd')"') do (
set "cutoffDate=%%a-%%b-%%c"
)
REM 刪除6天前的目錄
for /d %%i in ("%backupPath%*") do (
set "dirName=%%~nxi"
for /f "tokens=1-3 delims=- " %%a in ("!dirName:~10,10!") do (
set "dirDate=%%a-%%b-%%c"
if "!dirDate!" lss "!cutoffDate!" (
echo 刪除目錄: %%i
rd /s /q "%%i"
)
)
)
endlocal
pause
還是看的出來有錯誤呀!紅框這裡看起來都是異常,應該是取日期的部份出錯了
之前我有遇過不同OS的日期格式會不同,最簡單的測試就是您的電腦及家裡的電腦分別開CMD命令視窗打date /t 比較就知道,這兩台的設定一定有差異。像我下面的截圖是2024/08/14格式就不對,您需要設定為:2024-08-14
最簡單的作法就是改成和您家裡的電腦一樣的設定,W11設定的地方請見下圖,看起來您應該要改一下簡短日期的設定:
另外溫馨小提醒,因為這個設定每個使用者可以設成不一樣,所以如果您是想要放到工作排程器裡每天自動跑,請記得一定要登入要跑這支排程的帳號確認過日期格式是正確的,排程跑才不會出問題。