2017-01-30 4 views
0

私は、WindowsのCMDプログラムとその文字列操作機能に関する質問があります:Windowsのcmd:パターンを抽出する方法は?

私に自動的に古いJavaバージョンを削除し、私から、いわゆる更新番号を抽出しようとしています、最新のをインストールするスクリプトを記述するためにファイル名 ファイル名の形式は 'jdk-8u121-windows-x64.exe'または 'jdk-8u121-windows-i586.exe'です。更新バージョン番号は 'u'と '-windows'の間の番号です(この例では '121')。

ファイル名を含む変数 'fname'を指定すると、その番号を抽出できます。 echo%fname:〜6,3%

この式は、更新番号がちょうど3桁である限り有効ですが、1桁または2桁の数字でない場合、つまり後でファイル名が「jdk-9u1-windows-x64.exe」や「jdk-9u12-windows-x64.exe」とすると、間違った結果(上記の場合は「1-w」または「12 - 」)が発生します。

「文字位置6から始まり、数字が数字である限り」という記述や可能性はありますか?

"エコー%fnameは:〜6、\ D +%" のようなもの

'\ D +' "1または鉱石の数字" を意味する - 正規表現のように。

私は自分自身をクリア...

答えて

1

-第一及び第二の間のすべてのものを抽出し削除について、その後にすべてをオフに分割し、u/Uまず、その更新番号(含む作ることを願って121)が残っていますか?

set "FILENAME=jdk-8u121-windows-x64.exe" 

rem // Extract everything between first and second `-`: 
for /F "tokens=2 delims=-" %%F in ("%FILENAME%") do set "UPDATE=%%F" 
rem // Remove everything up to and including first `u` (case-insensitively): 
set "UPDATE=%UPDATE:*u=%" 

echo %UPDATE% 

(Windowsは大文字と小文字を区別せずにファイル名を扱うため、関係のないここが、単に可能性を示すこと)uは大文字と小文字が区別方法で処理しなければならない場合には、これまでのアプローチを変更します:

set "FILENAME=jdk-8u121-windows-x64.exe" 

rem // Extract everything between first and second `-`: 
for /F "tokens=2 delims=-" %%F in ("%FILENAME%") do set "UPDATE=%%F" 
rem // Remove everything up to and including first `u` (case-sensitively): 
for /F "tokens=1,* delims=u" %%E in ("%UPDATE%") do set "UPDATE=%%F" 

echo %UPDATE% 

-の前方の部分はu/Uを含めることができない場合、それはすべてを簡略化することができる:

set "FILENAME=jdk-8u121-windows-x64.exe" 

rem // Extract everything between first `u` (case-insensitively) and second `-`: 
for /F "tokens=3 delims=-Uu" %%F in ("%FILENAME%") do set "UPDATE=%%F" 

echo %UPDATE% 
関連する問題