2011-01-04 02:42:12 +0000 2011-01-04 02:42:12 +0000
28
28

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

バッチ(cmd)ファイルの変数に “Abc_123 "のような値があるとします。私は "123 "だけを含む変数で終わらせたいと思います。これを行うための組み込みの方法はありますか?

典型的なWindows(Vista/2008)システムに組み込まれている限り、その方法や性能にはあまりこだわらない。

回答 (4)

39
39
39
2011-01-04 02:58:22 +0000

部分文字列構文を使用します。

C:\Users\John>set string=Abc_123

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

C:\Users\John>echo %string:~4,3%
123
7
7
7
2018-07-02 15:51:27 +0000

アンダースコアの後にすべてを入れたい場合(文字列の長さやアンダースコアがどこにあるかは必ずしもわからないが、アンダースコアは1つしかないことに頼ることができる)、試してみてください。

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

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

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

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

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

3
3
3
2011-01-04 03:14:44 +0000

もし、バッチ言語が十分に強力ではないと感じたら、 Windows PowerShell を使用することができます。これはWindowsのすべてのバージョンにデフォルトでインストールされているわけではありませんが、無料でダウンロードすることができます。

PowerShell言語が好きではないのであれば、Perlがあります。ただし、すべてのシステムにインストールする必要があります。他にもあります。

1
1
1
2019-10-29 13:32:58 +0000
set var1=Abc_123
set var2=%var1:*_=%
echo %var2%