批处理文件删除文件夹中的文件

时间:2014-01-17 22:16:27

标签: batch-file file-io

据我所知,本网站上有很多关于创建批处理文件的问题,该批处理文件遍历指定文件夹中的文件,如果满足所述条件,则删除它们。

但是,我想稍微调整一下。在我的批处理文件中,我想查看一个文件夹,比如说C:\ Dev并获取同一个月内的所有文件。获取所有这些文件后,我想对所有日期进行排序并删除除最新日期之外的所有内容。因此,如果我在1月1日,12日,20日,27日和30日的文件夹中有1月份的5个文件,我只保留1月30日的文件并删除所有其他文件。

这可能吗?

1 个答案:

答案 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文件名),则这是找到的第一个文件,因此我们不删除它。

对于其他每个文件,如果提交的文件与之前的提交者相同,则删除以前的文件名。

然后将当前文件名/日期记录为先前版本。

完成!