チャポケのブログ

勉強したことをまとめておく。

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