Batch file 批处理文件以删除文件夹中的文件

Batch file 批处理文件以删除文件夹中的文件,batch-file,file-io,Batch File,File Io,我知道在这个网站上有很多关于创建一个批处理文件的问题,该批处理文件将在指定文件夹中遍历该文件,并在满足所述条件时将其删除 然而,我想稍微调整一下。在我的批处理文件中,我想查看一个文件夹,比如C:\Dev,并获取同一个月内的所有文件。在获得所有这些文件后,我想对所有日期进行排序,并删除除最新日期之外的所有内容。因此,如果我在该文件夹中有5个1月份的文件,日期分别为1月1日、12日、20日、27日和30日,那么我只保留1月30日的文件,并删除所有其他文件 这可能吗? 这应该对你有用。所需的DEL命令

我知道在这个网站上有很多关于创建一个批处理文件的问题,该批处理文件将在指定文件夹中遍历该文件,并在满足所述条件时将其删除

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

这可能吗?

这应该对你有用。所需的DEL命令仅用于测试目的。验证命令是否正确后,将
ECHO DEL
更改为
DEL
,以实际删除文件

首先,设置目标目录并清除
pfname

PUSHD
更改
当前目录
,直到执行
POPD

dir
命令只输出文件名(
/b
),没有按日期顺序(
/a-d
)输出目录名(
/o:d
)。每行将
fname
设置为文件名,
fdate
设置为文件日期

:process
中,操作日期字符串。我不知道您使用哪种格式,但基本公式是
%变量:~startposition,length%
,其中startposition从0=第一个字符开始。其想法是将
fdate
的格式设置为
yyyymm

如果未设置
pfname
(previos filename),则这是找到的第一个文件,因此我们不会删除该文件

对于每个其他文件,如果文件日期与上一个文件日期相同,则删除上一个文件名

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


完成了

可能重复的答案,然后看看其他答案中的一个,就像我链接的答案一样,自己努力“调整”。如果您依赖其他人提供代码,则无法学习。:-)(我链接的那个删除了除“最新7”之外的所有内容,并且应该很容易找到如何将其修改为“最新1”的方法。);我只是通过查看你问题右侧的相关帖子列表就发现了这一点哦。我很抱歉!我没看到这个!但是谢谢。是的,看起来很容易调整。只需找出如何排序的文件按月和做删除从那里!谢谢!谢谢你!哇!这就像一个魅力!!!非常感谢!也非常感谢您花时间解释!我使用不同的日期格式,你的解释为我节省了很多时间和头疼!!!非常感谢!!!!!
@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