バッチ(cmd)ファイルの変数に格納されている「Abc_123」などの値があるとします。 「123」のみを含む変数になりたいのですが。これを行う組み込みの方法はありますか?
典型的なWindows(Vista/2008)システムに組み込まれている限り、私はメソッドやパフォーマンスについてひどくうるさくはありません。
サブストリング構文を使用します。
C:\Users\John>set string=Abc_123
C:\Users\John>echo %string%
Abc_123
C:\Users\John>echo %string:~4,3%
123
アンダースコアの後にすべてが必要な場合(および文字列の長さやアンダースコアの場所がわからない場合でも、アンダースコアが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番目のトークンの変数です。
バッチ言語が必要な機能を実行するのに十分強力ではなく、その時点までにそれほど長くはかからない場合は、 Windows PowerShell を使用できます。これはすべてのバージョンのWindowsにデフォルトでインストールされるわけではありませんが、無料でダウンロードできます。
PowerShell言語が気に入らない場合は、Perlがあります。ただし、それをすべてのシステムにインストールする必要があります。他にもあります。
set var1=Abc_123
set var2=%var1:*_=%
echo %var2%