2016-08-08 17 views
0

如果我有一個目錄滿文本文件,如批次:返回文件名以最高整數

01.text.sql 
02text.sql 
3text.sql 

我將如何以最高的整數返回文件名字,例如: 3.text.sql?正如你所看到的,這些數字可能不會以0爲前綴並且可能缺少一個。之後的整數。我知道我必須遍歷目錄像這樣的東西

Choose Highest Numbered File - Batch File

然而,這並沒有考慮到不同的文件名格式。有沒有什麼方法批處理腳本可以遍歷一個目錄,並自動拉最高的整數文件,或者我必須存儲文件名,並將它們彼此比較在一個單獨的循環?

目前,我有這樣的事情,但它不是隻返回3

SETLOCAL enabledelayedexpansion 
SET max=0 
FOR %%x in (*.sql) DO (
    SET "FN=%%~nx" 
    SET "FN=!FN:*-=!" 
    IF !FN! GTR !max! SET max=!FN! 
) 
ECHO Highest script number is %max% 

更新循環的3text:

SETLOCAL enabledelayedexpansion 
SET scriptmax=0 
FOR %%x in (*.sql) DO (
    SET "FN=%%~nx" 
    SET a=1000!FN! 
    SET /A FN=a %% 1000 
    IF !FN! GTR !max! SET max=!FN! 
) 

回答

3

set /A a=b將解釋b一切到第一個非數字字符作爲編號,所以

set FN=03text.txt 
set /A a=FN 

將設置%a%很好到3。但是我們還有一個額外的問題:以0爲前綴的數字將被解釋爲八進制數,所以08和09是非法的。爲了解決這個問題:

set FN=09text.txt 
set t=1!FN! 
set /A a=t-100 

將產生9

但是,這一點,如果你知道有多少位數字代表只會工作,也許你得檢查前導零第一(if "%FN:~0,1%" == "0" ...),和/或甚至砍掉前導零(set FN=%FN:~1%

編輯:一個更好的辦法:

set FN=09text.txt 
set a=1000!FN! 
set /A FN=a %% 1000 

將用於什麼工作提高到999

+0

如果分裂出去以前前綴數字'1',而不是減去'100'那麼你不需要知道有多少位有總共... – aschipfl

+0

@aschipfl:怎麼樣?我試圖想出一個辦法,但%a:〜1%再次讓我再次登錄09? – ths

+0

剩餘的前導零可以用下面的代碼去除:「for/F」tokens = * delims = 0「%% Z in(」%FN:〜1%「)do set」FN = %% Z「&set/A」 FN + = 0" ';但似乎你發現了一個更簡單的解決方案... – aschipfl