早教吧 育儿知识 作业答案 考试题库 百科 知识分享

bat只保留某文件夹下某类型的第n个文件(如果可让文件自动按时间先后排列好,则保留第1个文件)e:\fn\下面有许多文件列表如下:fnl201308180600c.ctlfnl201308181200c.ctlfnl201308181800c.ctlfnl201

题目详情
bat只保留某文件夹下某类型的第n个文件(如果可让文件自动按时间先后排列好,则保留第1个文件)
e:\fn\下面有许多文件
列表如下:
fnl_20130818_06_00_c.ctl
fnl_20130818_12_00_c.ctl
fnl_20130818_18_00_c.ctl
fnl_20130819_00_00_c.ctl
fnl_20130819_06_00_c.ctl
fnl_20130819_12_00_c.ctl
fnl_20130819_18_00_c.ctl
fnl_20130820_00_00_c.ctl
fnl_20130820_06_00_c.ctl
fnl_20130820_12_00_c.ctl
fnl_20130820_18_00_c.ctl
fnl_20130821_00_00_c.ctl
fnl_20130821_06_00_c.ctl
fnl_20130821_12_00_c.ctl
fnl_20130821_18_00_c.ctl
fnl_20130822_00_00_c.ctl
fnl_20130822_06_00_c.ctl
fnl_20130822_12_00_c.ctl
fnl_20130822_18_00_c.ctl
fnl_20130823_00_00_c.ctl
fnl_20130823_06_00_c.ctl
fnl_20130823_12_00_c.ctl
fnl_20130823_18_00_c.ctl
fnl_20130824_00_00_c.ctl
fnl_20130824_06_00_c.ctl
fnl_20130824_12_00_c.ctl
fnl_20130824_18_00_c.ctl
fnl_20130825_00_00_c.ctl
fnl_20130825_06_00_c.ctl
fnl_20130825_12_00_c.ctl
fnl_20130825_18_00_c.ctl
fnl_20130826_00_00_c.ctl
fnl_20130826_06_00_c.ctl
因为以上文件名会经常变化,而且不会自动按照时间先后排列好,所以想只保留按时间先后排列好后(怎么自动排列呢?)的第一个(在此处为fnl_20130818_06_00_c.ctl),删除剩下的以.ctl格式的(该文件夹下还有其他类型的文件,不需删除);
自动排列的问题已解决.怎么只保留第一个文件,删除同后缀的其它文件.
▼优质解答
答案和解析
@echo off
setlocal EnableDelayedExpansion
md ctl_temp >nul 2>nul
for /f %%i in ('dir /od /b *.ctl') do  set newfile=%%i
for /f %%j in ('dir /od /b *.ctl') do  (
if !newfile! NEQ %%j (move %%j ctl_temp\)
)

代码如上,为了数据安全,把你想删除的文件,移动到了 ctl_temp 文件夹中,如果想直接删除的话,把 move %%j ctl_temp\ 改成 del /f /q %%j ,删除有风险,有备才无患!


把这段代码存成bat到该文件夹下,运行即可!


备注:里面的 /od 是按文件的时间顺序排列的,不可省略