.jar ファイルでいっぱいのディレクトリがあり、次のように段階的に名前が付けられています。
version-1.jar
version-2.jar
version-3.jar
最大番号のファイルを選択しようとしています。それを行う本当に簡単な方法はありますか?.\version*.jar
おそらく複数のファイルが原因で、実行するとエラーが発生するためですか?
.jar ファイルでいっぱいのディレクトリがあり、次のように段階的に名前が付けられています。
version-1.jar
version-2.jar
version-3.jar
最大番号のファイルを選択しようとしています。それを行う本当に簡単な方法はありますか?.\version*.jar
おそらく複数のファイルが原因で、実行するとエラーが発生するためですか?
遅れた拡大が必要
setlocal enabledelayedexpansion
最大値の単なる変数:
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
これは、Joeyのコードよりも少し単純なバージョンです。
@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を含めてtokens=1 *を指定すると、最初の非ゼロ桁の後のすべてのゼロを保持しながら、先行ゼロがバージョン番号から削除されます。
すべてのバージョンのプレフィックスがゼロで一定の幅になっている場合は、より簡単な解決策があります。ただし、このソリューションは、プレフィックスがゼロの場合とない場合の両方で機能します。
先行ゼロが存在する場合、8進表記を示すため、Joeyのコードは失敗します。先行ゼロを含む無効な8進数は文字列として扱われ、比較で間違った結果が得られます。元の質問は先行ゼロが存在しないことを示唆しているため、これはおそらく問題ではありません。しかし、後悔するよりも安全である方が良いです。