刪除后綴名較小的日期

問題要求

求一段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)友的提問,建立了一個(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)
::通過按照日期排序,排在最后的是最新的文件,將文件的文件名和日期保存到變量中。
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
 )
)

思路是:
通過逐個(gè)文件對(duì)比得到日期最新的文件,然后如果其他文件日子不等于最新的日期,則執(zhí)行刪除操作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容