問(wèn)題要求
求一段bat指令實(shí)現(xiàn)如下功能
文件夾內(nèi)有很多文件比如
a.txt.1 a.txt.2 a.txt.3 --a.txt.n
b.txt.1 b.txt.2 b.txt.3 --b.txt.n
.
.
x.txt.1 x.txt.2 x.txt.3 --x.txt.n
例如文件*.txt.n 其中"n"是文件版本號(hào),現(xiàn)在想保留最高版本刪除其他的版本.
根據(jù)網(wǎng)友的提問(wèn),建立了一個(gè)測(cè)試環(huán)境懂缕。
2015/05/12 11:08 1.txt.1
2015/05/12 11:08 1.txt.2
2015/05/12 11:08 1.txt.3
2015/05/12 11:08 1.txt.4
2015/05/12 11:08 1.txt.5
2015/05/12 12:01 1.txt.6
2015/05/12 11:08 2.txt.3
2015/05/12 11:08 2.txt.4
2015/05/12 13:40 2.txt.5
跳轉(zhuǎn)法:
@echo off & setlocal enabledelayedexpansion
cd d:\test
::取一個(gè)不含后綴的文件名
for %%i in (*.txt.*) do (
set fname=%%~ni
call :1
)
echo 執(zhí)行完成 & pause >nul & exit
:1
set fsum=0
for %%a in (%fname%.*) do set /a fsum+=1
echo 文件名:%fname% 數(shù)量:%fsum%
::判斷該文件名的數(shù)量允跑,如果只有1個(gè)就回去call繼續(xù)下一個(gè)文件名,如果不是1個(gè)就繼續(xù)執(zhí)行后面的命令
if %fsum% equ 1 goto :eof
for /f "delims=" %%i in ('dir /od /b /a-d %fname%.*') do (set endf=%%i & set endt=%%~ti)
::通過(guò)按照日期排序搪柑,排在最后的是最新的文件聋丝,將文件的文件名和日期保存到變量中。
echo 最后的文件是:%endf% %endt%
echo 確認(rèn)刪除其他文件工碾? & pause >nul
::小于最新文件的執(zhí)行刪除操作
for /f "delims=" %%i in ('dir /od /b /a-d %fname%.*') do (
if "%%~ti" lss "%endt%" del %%i
)
goto :eof
::刪除完成弱睦,回到call的地方,繼續(xù)下一個(gè)文件判斷渊额。
思路是:
獲取一個(gè)文件名(不含后綴)况木,然后判斷相同的文件名有多少個(gè)。最后刪除按照日期排序的舊文件端圈。
For循環(huán)法
@echo off & setlocal enabledelayedexpansion
cd d:\test
for /f "delims=" %%i in ('dir /b /a-d *.txt.*') do (
if %%~ti GTR !mm%%~ni! set mm%%~ni=%%~ti
)
for /f "tokens=1,2 delims=m=" %%i in ('set mm') do (
for /f "delims=" %%a in ('dir /b /a-d %%i.*') do (
if %%j NEQ %%~ta del %%a
)
)
思路是:
通過(guò)逐個(gè)文件對(duì)比得到日期最新的文件焦读,然后如果其他文件日子不等于最新的日期子库,則執(zhí)行刪除操作舱权。