9

.jar ファイルでいっぱいのディレクトリがあり、次のように段階的に名前が付けられています。

 version-1.jar
 version-2.jar
 version-3.jar

最大番号のファイルを選択しようとしています。それを行う本当に簡単な方法はありますか?.\version*.jarおそらく複数のファイルが原因で、実行するとエラーが発生するためですか?

4

2 に答える 2

13

遅れた拡大が必要

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
于 2012-07-25T08:09:59.213 に答える
6

これは、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進数は文字列として扱われ、比較で間違った結果が得られます。元の質問は先行ゼロが存在しないことを示唆しているため、これはおそらく問題ではありません。しかし、後悔するよりも安全である方が良いです。

于 2012-07-25T15:25:00.580 に答える