文字列操作を行うには、set 命令と変数を利用していくつか行うことができます。
変数は私が知る限り4つ種類があります。
バッチファイルの後に追加する引数のための変数 (仮に引数の変数とします)
これは、%0 , %1 , %2 … と%に数値がつくものです。
%0から%9までの10の変数しか利用できません。
引数は、それ以上定義できますが、変数が、10個しかないのである技を利用して読み出す必要があります。
それがshiftというコマンドです。別途説明します。
for文 に使われる変数(仮にfor文の変数とします)
これは、%%a , %%i と%が2つ並び その直後に1文字ついたものです。
for文では、1行ごとに文字列を分離できますが、
tokensオプションを使うと 1行ごとにトークンで分離した文字列を変数に自動的に割り当てていくことをしますので変数に利用するのは1文字です。
for /f "tokens=1-5 delims= " %%a in ("あ い う え お") do (…
例えばaを使うとアルファベット順に%%a,%%b,%%c,%%d…と勝手に割り当てていきます。
Aを使えば%%A,%%B,%%C…を割り当て、アを使えば%%ア,%%イ,%%ウ、%%エ,%%オを割り当てます。
最大26個までのトークン指定できるので%%aから%%zということになります。
%%アから%%ンなら52個までできそうです。
set文で宣言した変数(仮に通常の変数とします)
これは、プログラミングする人が、宣言して利用するものです。
set "TEST=1234"
echo %TEST%
環境変数 (そのまま環境変数とします)
これは、Windowsで予約されている変数です。
%DATE% や、 %TIME% 、%ERRORLEVEL% などです。
引数の変数とfor文の変数は、特別な文字列操作があります
変数に入っているパス名から容易にドライブ名、パス名、ファイル名、拡張子名などを分離する方法があります。
一部、後述する「パス名、ファイル名」に記載しました。
~で変数内に格納されている文字列から引用句のダブルクォーテーション""を削除できます。
※通常の変数では使えません。通常の変数で~を利用するのは、文字を抽出する場合です。
例:%~0 , %%~f
簡易的な文字列操作としてset 命令を使用して変数内で修飾して使用できるものがあります。
例
set S=ABCDEFG と宣言した変数%S%について
文字を抽出する場合 :~
%S:~s,n%
s=初めから何文字目まで削除するか、マイナスでは後ろから何文字目を抽出するか
n=sで残された文字から何文字分抽出するか、マイナス値では、後ろから何文字削除するか
文字を置換する場合 : =
%S:b=a%
b=置き換える前の文字(文字列でも可)
a=置き換える文字(文字列でも可)
set "S=ABCDEFG"
set "a=%S:~3%" REM 3文字目までを除いて抽出
set "b=%S:~2,3%" REM 2文字目までを除いてから3文字分を抽出
set "c=%S:~-3%" REM 後ろより3文字目から最後までを抽出
set "d=%S:~-4,2%" REM 後ろより4文字目から2文字分を抽出
set "e=%S:~3,-1%" REM 3文字目まで除いて、後ろより1文字分を除いた残りを抽出
set "f=%S:~-4,-2%" REM 後ろより4文字目から後ろより2文字分を除いた残りを抽出
set "g=%S:CDE=W%" REM CDEの文字列をWに置き換える
echo S=%S% a=%a% b=%b% c=%c% d=%d% e=%e% f=%f% g=%g%
結果
S=ABCDEFG a=DEFG b=CDE c=EFG d=DE e=DEF f=DE g=ABWFG