如何使用批处理脚本删除文件夹中的最新文件?
我发现的所有结果仅显示如何删除最旧的文件或在N天后删除它们。
链接是:Batch file to delete files older than N days和Batch Script to delete oldest folder in a given folder
谢谢
答案 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中显示的方法在性能上仍然更好。