web-dev-qa-db-ja.com

Windowsバッチファイルで文字列の一部を抽出する方法

バッチ(cmd)ファイルの変数に格納されている「Abc_123」などの値があるとします。 「123」のみを含む変数になりたいのですが。これを行う組み込みの方法はありますか?

典型的なWindows(Vista/2008)システムに組み込まれている限り、私はメソッドやパフォーマンスについてひどくうるさくはありません。

29
Ken

サブストリング構文を使用します。

C:\Users\John>set string=Abc_123

C:\Users\John>echo %string%
Abc_123

C:\Users\John>echo %string:~4,3%
123
40
John T

アンダースコアの後にすべてが必要な場合(および文字列の長さやアンダースコアの場所がわからない場合でも、アンダースコアが1つしかないことに依存する場合)は、以下を試してください。

for /f "tokens=2 delims=_" %%a in ("%STRING%") do (
  set AFTER_UNDERSCORE=%%a
)

基本的に、文字列はアンダースコアをデリミタとして使用してトークンに分割されます(delims = _)。 2番目のトークン(tokens = 2)だけが(変数%% aとして)forループに渡されます。この場合、単一の文字列を処理しているため、ループは1回だけ実行されます。

アンダースコアの前後の両方を保存したい場合は、以下を試してください:

for /f "tokens=1,2 delims=_" %%a in ("%STRING%") do (
  set BEFORE_UNDERSCORE=%%a
  set AFTER_UNDERSCORE=%%b
)

%% aはスプリットの最初のトークンの変数であることに注意してください。 %% bは、スプリットの2番目のトークンの変数です。

7
DocOc

バッチ言語が必要な機能を実行するのに十分強力ではなく、その時点までにそれほど長くはかからない場合は、 Windows PowerShell を使用できます。これはすべてのバージョンのWindowsにデフォルトでインストールされるわけではありませんが、無料でダウンロードできます。

PowerShell言語が気に入らない場合は、Perlがあります。ただし、それをすべてのシステムにインストールする必要があります。他にもあります。

3
Wayne Johnston
set var1=Abc_123
set var2=%var1:*_=%
echo %var2%
1
Zimba