据我所知,本网站上有很多关于创建批处理文件的问题,该批处理文件遍历指定文件夹中的文件,如果满足所述条件,则删除它们。
但是,我想稍微调整一下。在我的批处理文件中,我想查看一个文件夹,比如说C:\ Dev并获取同一个月内的所有文件。获取所有这些文件后,我想对所有日期进行排序并删除除最新日期之外的所有内容。因此,如果我在1月1日,12日,20日,27日和30日的文件夹中有1月份的5个文件,我只保留1月30日的文件并删除所有其他文件。
这可能吗?
答案 0 :(得分:2)
< 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
)中输出文件名(/a-d
),没有目录名称(/o:d
)。每行将fname
设置为文件名,将fdate
设置为提交者。
在:process
内,操纵日期字符串。我不知道你使用哪种格式,但基本公式为%variable:~startposition,length%
,其中startposition从0 =第一个字符开始。我们的想法是fdate
格式为yyyymm
如果未设置pfname
(previos文件名),则这是找到的第一个文件,因此我们不删除它。
对于其他每个文件,如果提交的文件与之前的提交者相同,则删除以前的文件名。
然后将当前文件名/日期记录为先前版本。
完成!