回答:
サブストリング構文を使用します。
C:\Users\John>set string=Abc_123
C:\Users\John>echo %string%
Abc_123
C:\Users\John>echo %string:~4,3%
123
%string:~%start%,%len%%
CALL
、次のように使用しますCALL SET _substring=%%_donor:~%_startchar%,%_length%%%
アンダースコアの後のすべてが必要な場合(そして、文字列の長さやアンダースコアの場所が必ずしもわからないが、アンダースコアが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%
*
貪欲にできますか?私は良いol 'を使いましたIF NOT ... GOTO :replace
が、もっと良い方法があればいいのですが。
_
、その後、最後の1に、そしてループがあるset var
help set
で述べたように、バッチファイル内の部分文字列を行うための最善の方法は何ですか?StackOverflowで。