簡體   English   中英

批處理文件刪除文件夾中的文件

[英]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

如果沒有設置pfnamepfname文件名),這是找到的第一個文件,所以我們不刪除它。

對於每個其他文件,如果提交的文件與前一個提交者相同,則刪除以前的文件名。

然后將當前文件名/日期記錄為先前版本。

完成!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM