我有一個目錄充滿.jar文件,逐步命名就像這樣:選擇編號最高的文件 - 批處理文件
version-1.jar
version-2.jar
version-3.jar
我試圖選擇最高編號的文件。有沒有真正簡單的方法來做到這一點? 因爲做.\version*.jar
會導致錯誤,可能是由於多個文件?
我有一個目錄充滿.jar文件,逐步命名就像這樣:選擇編號最高的文件 - 批處理文件
version-1.jar
version-2.jar
version-3.jar
我試圖選擇最高編號的文件。有沒有真正簡單的方法來做到這一點? 因爲做.\version*.jar
會導致錯誤,可能是由於多個文件?
我們需要延遲擴展
只爲最大的變量:
set max=0
然後在文件迭代:
for %%x in (version-*.jar) do (
我們需要的文件名不帶擴展
set "FN=%%~nx"
並從開始version-
:
set "FN=!FN:version-=!"
現在FN
應該只包含的號碼,我們可以比較一下:
if !FN! GTR !max! set max=!FN!
)
,我們就大功告成了:
echo highest version: version-%max%.jar
完整的批處理文件:
@echo off
setlocal enabledelayedexpansion
set max=0
for %%x in (version-*.jar) do (
set "FN=%%~nx"
set "FN=!FN:version-=!"
if !FN! GTR !max! set max=!FN!
)
echo highest version: version-%max%.jar
這是一個比喬伊的代碼稍微簡單的版本。
@echo off
setlocal enableDelayedExpansion
set max=0
for /f "tokens=1* delims=-.0" %%A in ('dir /b /a-d version-*.jar') do if %%B gtr !max! set max=%%B
echo higest version: version-%max%.jar
只要版本號從不爲0(零),即使版本號爲前綴0,此代碼也能正常工作。指定令牌= 1 *,將0作爲分隔符包含在內,導致前導零從版本號中除去,同時在第一個非零數字後面保留全零。
如果所有版本的前綴固定爲一個固定寬度,則有一個更簡單的解決方案。但是這個解決方案既可以使用零前綴也可以不使用零。
如果前導零存在,那麼Joey的代碼將失敗,因爲它指示八進制符號。前導零的八進制數字無效將被視爲字符串,導致比較結果錯誤。這可能不是問題,因爲原始問題意味着前導零不存在。但最好是安全而不是遺憾。
我的確在一定程度上簡化了這個問題,嚴格來說,數字範圍從4000到4100 ......我一直在尋找易於理解的答案,儘管xD從來沒有在 – Dangercrow 2012-07-26 10:04:03
之前遇到過delayedexpansion你使用tokens = 1 *,%% A和%% B可以做一些解釋,但基於你的代碼,我能夠適應我的需求for循環,太棒了!我還發現,儘管沒有明確說明,但空間總是被視爲分隔符。 – parvus 2015-10-24 06:32:54
謝謝,但有沒有更簡單的方法呢?這似乎有點矯枉過正,ish – Dangercrow 2012-07-25 08:13:53
問題是這些數字可能比單個數字更長,然後任何天真的排序都會失效。 – Joey 2012-07-25 08:32:34