Windowsバッチ 変数の解釈時文字列操作
文字列の抽出
基本形は次の通り。
遅延変数として扱う場合は、%で囲う代わりに!で囲う。
先頭文字は0文字目扱い。
%変数名:~開始位置,文字数%
処理例は次の通り。
rem 0123456789 set varA=abcdefghij echo そのまま : %varA% echo 2文字目から最後 : %varA:~2% echo 2文字目から3文字分 : %varA:~2,3% echo 2文字目から最後、更に末尾4文字削除 : %varA:~2,-4% echo [後ろから6文字目]から最後 : %varA:~-6% echo [後ろから6文字目]から3文字分 : %varA:~-6,3% echo [後ろから6文字目]から最後、更に末尾2文字削除 : %varA:~-6,-2%
そのまま : abcdefghij 2文字目から最後 : cdefghij 2文字目から3文字分 : cde 2文字目から最後、更に末尾4文字削除 : cdef [後ろから6文字目]から最後 : efghij [後ろから6文字目]から3文字分 : efg [後ろから6文字目]から最後、更に末尾2文字削除 : efgh
文字列の置換
基本形は次の通り。
遅延変数として扱う場合は、%で囲う代わりに!で囲う。
%変数名:置換前文字列=置換後文字列%
処理例は次の通り。
set varA=aaaaa12345aaaaa echo そのまま : %varA% echo aaをbbに置換 : %varA:aa=bb% echo aaaをcに置換 : %varA:aaa=c% echo aをDddに置換 : %varA:a=Ddd%
そのまま : aaaaa12345aaaaa aaをbbに置換 : bbbba12345bbbba aaaをcに置換 : caa12345caa aをDddに置換 : DddDddDddDddDdd12345DddDddDddDddDdd
応用例:固定長の番号生成 : 0000, 0001, 0002, …
上記を応用すると、桁数をそろえた番号を簡単に生成できる。
setlocal enabledelayedexpansion for /l %%a in (1,1,10) do ( set nnnn=000%%a rem [後ろから4文字目]から4文字分を抽出 set nnnn=!nnnn:~-4,4! echo !nnnn! )
0001 0002 0003 0004 0005 0006 0007 0008 0009 0010