[英]Batch File to Delete Files in a Folder
據我所知,本網站上有很多關於創建批處理文件的問題,該批處理文件遍歷指定文件夾中的文件,如果滿足所述條件,則刪除它們。
但是,我想稍微調整一下。 在我的批處理文件中,我想查看一個文件夾,比如說C:\\ Dev並獲取同一個月內的所有文件。 獲取所有這些文件后,我想對所有日期進行排序並刪除除最新日期之外的所有內容。 因此,如果我在1月1日,12日,20日,27日和30日期間的該文件夾中有1個1月的文件,我只保留1月30日的文件並刪除所有其他文件。
這可能嗎?
<lang-dos - >
@ECHO OFF
SETLOCAL
SET "targetdir=c:\sourcedir"
SET "pfname="
PUSHD "%targetdir%"
FOR /f "delims=" %%a IN ('dir /b /a-d /o:d "*" ') DO (
SET "fname=%%a"
SET "fdate=%%~ta"
CALL :process
)
POPD
GOTO :EOF
:process
:: reformat date - this depends on yout local date-format.
:: YY(YY)MM required - my format is dd/mm/yyyy
SET fdate=%fdate:~6,4%%fdate:~3,2%
IF NOT DEFINED pfname GOTO nodel
IF %fdate%==%pfdate% ECHO DEL "%targetdir%\%pfname%"
:nodel
SET pfdate=%fdate%
SET "pfname=%fname%"
GOTO :eof
這應該適合你。 所需的DEL命令僅僅ECHO
編用於測試目的。 在確認命令正確后,將ECHO DEL
更改為DEL
以實際刪除文件。
首先,設置目標目錄並清除pfname
。
PUSHD
更改current directory
直到執行POPD
dir
命令僅輸出文件名( /b
),日期順序( /o:d
)中沒有目錄名稱( /ad
)。 每行將fname
設置為文件名,並將fdate
設置為歸檔。
在:process
,操作日期字符串。 我不知道你使用哪種格式,但基本公式是%variable:~startposition,length%
其中startposition從0開始=第一個字符。 我的想法是以yyyymm
的格式獲得fdate
如果沒有設置pfname
( pfname
文件名),這是找到的第一個文件,所以我們不刪除它。
對於每個其他文件,如果提交的文件與前一個提交者相同,則刪除以前的文件名。
然后將當前文件名/日期記錄為先前版本。
完成!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.