批处理文件删除最新文件

时间:2016-11-05 15:57:18

标签: windows batch-file

如何使用批处理脚本删除文件夹中的最新文件?

我发现的所有结果仅显示如何删除最旧的文件或在N天后删除它们。

链接是:Batch file to delete files older than N daysBatch Script to delete oldest folder in a given folder

谢谢

3 个答案:

答案 0 :(得分:2)

for /F %%a in ('dir /B /O-D /A-D %the_directory%') do echo("%the_directory%\%%a"&goto deldone
:deldone

将是我的方法。它粗略地逃脱了for循环删除了在倒序日期排序(/o-d)列表中遇到的第一个文件名。

这节省了必须阅读整个列表。对于一些文件来说不是一个问题,但可能会有成千上万的痛苦。

所需的DEL命令仅用于ECHO用于测试目的。 在您确认命令正确后,将ECHO(DEL更改为DEL以实际删除文件。

答案 1 :(得分:1)

我会这样做:

@echo off
set latest=
set the_directory=your_directory

for /F %%a in ('dir /B /OD /A-D %the_directory%') do set latest=%%a

del %the_directory%\%latest%

仅对文件运行dir,并在修改日期进行排序。然后循环并保留最后一个回显文件。删除它(替换为echo进行测试!)

答案 2 :(得分:1)

以下代码段可以满足您的需求:

set "FILE="
pushd "\path\to\folder" || exit /B 1
for /F "eol=| delims=" %%F in ('
    dir /B /A:-D /O:D /T:C "*.*"
') do (
    set "FILE=%%F"
)
if defined FILE del "%FILE%"
popd

dir命令使用创建日期/A:-D仅返回按日期升序排序的文件(/O:D/T:C) ),位于\path\to\folder并匹配模式*.* for /F循环遍历dir返回的所有文件,并将其名称分配给变量FILE,在每次迭代中覆盖它,因此最终值是最新文件的名称。 del命令最终删除找到的文件。 if查询涵盖了在给定位置找不到文件的情况。

以下是Magoo' comment推荐的略微修改后的版本,可能比上述版本更具性能:

set "FILE="
pushd "\path\to\folder" || exit /B 1
for /F "eol=| delims=" %%F in ('
    dir /B /A:-D /O:-D /T:C "*.*"
') do (
    if not defined FILE set "FILE=%%F"
)
if defined FILE del "%FILE%"
popd

这可以通过查询变量FILE是否已经定义来避免多次覆盖变量dir。请注意此处virtual void f() = 0; 的反向排序顺序。

然而,Magoo answer中显示的方法在性能上仍然更好。