此批处理文件提供了一个解决方案:
@echo off
set "SourceFolder=C:\Temp"
for /F "skip=1 delims=" %%I in ('dir "%SourceFolder%\*" /A-D /B /O-D 2^>nul') do del "%SourceFolder%\%%I"
set "SourceFolder="
命令DIR输出只是文件,因为该选项的名称/A-D
(目录条目与目录属性不集)和/B
的列表(裸格式)由于/O-D
由最后修改日期反向排序,这意味着最先输出最新修改文件的名称。
通过错误输出消息DIR如果指定的文件夹不包含任何文件被写入重定向使用2>nul
处理STDERR到设备NUL错误消息抑制。重定向运算符>
在此处必须用脱字符^
转义,以便在Windows命令解释程序处理整个命令行时将其解释为文字字符。稍后对于在后台的单独命令过程中执行命令dir "%SourceFolder%\*" /A-D /B /O-D 2>nul
并捕获写入到STDOUT的输出。
对于选项skip=1
导致跳过第一行捕获的输出,这意味着忽略最新修改文件的文件名。
FOR选项delims=
禁用默认分裂所捕获的线的进入空间/制表符分隔的字符串作为每整个文件名应该由FOR执行的命令被分配给循环变量I
供使用。
DEL删除文件,如果这是可能的。
为了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
del /?
dir /?
echo /?
for /?
set /?
阅读也是微软文章关于Using Command Redirection Operators。
寻找最新的文件并删除所有不是那个文件的文件? –
你需要自己搜索,研究,编写和尝试代码。发布一个甚至没有尝试执行您需要的任务并要求添加的文件是一个直接的代码请求,这里的主题不在话下。 – Compo
你说你想删除文件,所以使用'rmdir'没有意义,因为它删除目录... – aschipfl