• 2

請問利用批次檔刪除 [日期格式命名資料夾] 的寫法

Kenny_Din wrote:
REM 取得刪除年...(恕刪)


感謝大大回覆

測試失敗,執行會提示錯誤 ' '不是內部或外部命令、可執行的程式或批次檔

(目錄位置已改成 SET PATH=D:\TEST\LHT-%DELETEDATE%- )





更新:

測試成功,發現BAT檔案如果用Unicode格式存檔會執行失敗,改用ANSI格式存檔就可以執行成功
chuway wrote:
----Begin date-10.vbs----
dt=dateadd("d",-10,date)
yy=year(dt)
mm=Right("0" & Month(dt),2)
dd=Right("0" & Day(dt),2)
wscript.echo "for /d %d in ( LHT-"&yy&mm&dd&"-* ) do echo rmdir /s/q %d"
--- End date-10.vbs ---

----Begin clean-10.bat----
cscript /nologo date-10.vbs > r.bat
call r.bat
del r.bat
--- End clean-10.bat ---


排定 clean-10.bat 即可



請問大大

我在CMD的視窗內,手動輸入 rmdir /s /q LHT-20181230-1 可以刪除檔案夾

但是用VBS時,r.bat 內容得到的是 for /D %d in ( LHT-20181230-* ) do echo rmdir /s /q %d

執行r.bat,或是把指令複製貼到CMD視窗內
會看到有執行 rmdir /s /q LHT-20181230-1 但是資料夾沒有被刪除

請問有哪裡疏忽了?





把VBS改成笨方法
dt=dateadd("d",-8,date)
yy=year(dt)
mm=Right("0" & Month(dt),2)
dd=Right("0" & Day(dt),2)
wscript.echo "rmdir /s /q LHT-"&yy&mm&dd&"-1"
wscript.echo "rmdir /s /q LHT-"&yy&mm&dd&"-2"
wscript.echo "rmdir /s /q LHT-"&yy&mm&dd&"-3"

得到的R.BAT會有三行
rmdir /s /q LHT-20181230-1
rmdir /s /q LHT-20181230-2
rmdir /s /q LHT-20181230-3
可以正確執行


更新:爬文找到原因了
CMD手動執行,變數 只能用一個 %
for /d %d in ( LHT-"&yy&mm&dd&"-* ) do rmdir /s /q %d"
批次檔模式下,變數需要用二個 %,要改寫成
wscript.echo "for /d %%d in ( LHT-"&yy&mm&dd&"-* ) do rmdir /s /q %%d"

另外 echo 要拿掉


肚子三層非一日之饞 wrote:
網路爬文已經看到類...(恕刪)

若樓主強制由目錄名而非系統時間來判斷刪除可考慮使用PowerShell,指令會比較簡潔


$today = get-date -DisplayHint date
$tenDaysAgo = $today.AddDays(-10)

$folders = (gci "R:\backup\" | where-object {$_.PSIsContainer -eq $True})

foreach ($f in $folders) {
$folderdate = get-date -year $f.Name.substring(0,4) -month $f.Name.substring(4,2) -day $f.Name.substring(6,2)

if ($folderdate -lt $tenDaysAgo) {
Remove-Item $f -Force -Recurse
}
}


上述是刪除R:\backup下以yyyyMMdd為名的目錄,至於其他唯讀和隱藏的處理請自行找指令
cd /D D:\BACK & FOR /F "USEBACKQ TOKENS=1*" %%I IN (`forfiles /d -10` ) DO echo %%I

其實一行可以了結的
自行試試結束後把 DO 後面的 ECHO 改成 del 或 rmdir

forfiles 自己帶執行外部指令功能的

/C command 表示每個檔案要執行的命令。
命令字串應該包含在雙括號
之間。

預設的命令是 "cmd /c echo @file"。

下列變數可以使用於命令字串:

@file - 傳回檔案的名稱。
@fname - 只傳回檔案的名稱,
不傳回副檔名。
@ext - 只傳回檔案的
副檔名。
@path - 傳回檔案的完整路徑。
@relpath - 傳回檔案的相對
路徑。
@isdir - 如果檔案類型是目錄的話,
傳回 "TRUE",如果是檔案
的話,傳回 "FALSE"。
@fsize - 傳回檔案的大小,
單位是位元組。
@fdate - 傳回檔案上次修改的
日期。
@ftime - 傳回檔案上次修改
的時間。

要在命令列中包含特殊字元的話,
請使用 0xHH 格式的十六
進位字元碼 (例如 0x09 代表 tab)。
內部的 CMD.exe 命令應該
以 "cmd /c" 執行。
Kenny_Din wrote:
REM 取得刪除年月(恕刪)


k大你好:我有這個需求,依你給的修改如下:
-4這裡可以設定-4到-30,就是4天~30天以前資料夾名稱符合都刪除
我是個新手,for不會加@@,感謝了

@echo on
echo wscript.echo dateadd("d",-4,date) > %tmp%\tmp.vbs
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
if %m% LSS 9 set m=0%m%
if %d% LSS 9 set d=0%d%
set DELETEDATE=%y%%m%%d%
echo %DELETEDATE%

REM 預計要刪除的目錄
SET PATH=F:\_暫時下載\用來試bat\%DELETEDATE%
rmdir /s/q %PATH%
  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?