文字列の部分文字列を取得するサブルーチン
ウィンドウズのバッチファイル(.bat)で部分文字列を取得するには…
%変数名:~a,b%
で変数の中身の文字列の0から始まるインデックスa番目から、長さbの部分を切り出せるということは調べるとすぐわかります・・・
たとえば
>set x=abcdefg
>echo %x:~2,4%
cdef
しかし、上記のaとbが数字のリテラルでないと期待した結果になりません。たとえば、以下のように記述すると・・・
>set x=abcdefg >set y=2 >set z=4 >echo %x:~%y%,%z%% abcdefgy%,4%
setlocalコマンドにenabledelayedexpansionという引数を指定すると、環境変数の参照に
%環境変数%だけでなく、!環境変数!も使えるようになります。
そこで、他のプログラミング言語にあるような3つの引数をとる文字列の部分文字列を求めるサブルーチンを書いてみます。
GET_SUBSTR.bat
@echo off setlocal enabledelayedexpansion call :GET_SUBSTR %* echo %substr% endlocal goto :EOF ::部分文字列を取得する ::使用法 call :GET_SUBSTR (文字列) (開始インデックス) (部分文字列の長さ) :GET_SUBSTR set str=%1 set startIndex=%2 set length=%3 ::setlocalでenabledelayedexpansionを宣言しているので以下の記述が可能。 set substr=!str:~%startIndex%,%length%! exit /b
GET_SUBSTR.batのあるディレクトリで以下のように動作確認できます。実際にはbatの他の箇所で使用します。
>GET_SUBSTR.bat abcdefg 2 4 cdef