batファイルで文字列を切り出して抽出して使用したいです!
文字を切り出して自由に変更したいです!何かいい方法はないでしょうか?
そういった疑問に現役エンジニアの筆者が答えていきます。
windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。
より自分のやりたい事ができるbatファイルになることでしょう!
batで文字列を切り出して抽出する方法
batで文字列を切り出して抽出する基礎構文
batファイルで文字列を切り出して一部を取得する方法の基礎は以下です。
%変数名:~取得開始位置,範囲を指定(省略可能)%
変数を使用します。%変数%で変数を展開します。変数の右に「:~」をつけて「取得開始位置,範囲」を指定します。
「変数名:」に「取得開始ずらす,範囲」を指定する。その後%で囲む。それを変数に代入すると考えるとわかりやすいです。
実践:変数から文字列を切り出し
変数の先頭を3ずらして以降の文字列を切り出し
@echo off
set moji=ABCDEFG
echo %moji:~3%
pause
moji変数に「ABCDEFG」を代入しています。
「%moji:~3%」で開始位置を3ずらして、範囲は省略しています。
batファイルの実行結果は次のようになりました。
DEFG
3つめ以降からの文字列が、切り出しされている事がわかります。
変数の先頭を3ずらして2つの文字列を切り出し
@echo off
set moji=ABCDEFG
echo %moji:~3,2%
pause
「%moji:~3,2%」で開始位置を3ずらして、そこから2文字を取得するようなコマンドです。
batファイルの実行結果は次のようになりました。
DE
3つめ以降から2つの文字列が、切り出しされている事がわかります。
変数の末尾3番目から全ての文字を取得する
@echo off
set moji=ABCDEFG
echo %moji:~-3%
pause
「%moji:~-3%」で開始位置を末尾3番目から以降全ての文字列を切り出しています。
batファイルの実行結果は次のようになりました。
EFG
末尾から3ずらして最後の文字まで文字列が、切り出しされている事がわかります。
変数の先頭を2ずらして末尾から3つまでの文字列を切り出し
「%moji:~2,-3%」で開始位置を3ずらして、末尾から3つまでの文字列を切り出しています。
batファイルの実行結果は次のようになりました。
CD
2つめ以降から末尾3つまでの文字列が、切り出しされている事がわかります。
同じ様に文字列を思い通りに切り出ししてみます。
@echo off
set moji=ABCDEFG
echo %moji:~2,-3%
echo %moji:~2,-2%
echo %moji:~2,-1%
pause
batファイルの実行結果は次のようになりました。
CD
CDE
CDEF
変数から文字列を切り出しする時のエラーと解決法
batファイルで変数から一部の文字列を切り出しする時に、上手くいかない時の見る所はやはりココ
下のbatファイルを作成してください。
@echo off
set test=123456789
set test=%test:2,-5%
echo %test%
pause
test変数に「123456789」を代入しています。
「set test=%test:2,-5%」で先頭から2ずらして、末尾から5番目までの文字を省いた文字列を切り出ししようとしています。
test:2,-5
変数に指定した文字で「%」が省かれた文字列が表示されており、想定通りの結果ではありません。
バッチファイルの失敗の原因は、開始位置指定の時の「~」を忘れている事になります。
解決法は開始位置にしっかり「~」をつけることです。
変数からある文字列以外を切り出しする方法
では次はある文字列以外を切り出しするbatファイルです。
@echo off
set moji=ABCDEFG
echo %moji:C=%
pause
「%moji:C=%」でCを空白に置き換える事で、指定したC以外の文字列を切り出しが可能になります。
batファイルの実行結果は次のようになりました。
ABDEFG
指定した文字列以外が切り出しされている事がわかります。
まとめ:batで文字列を切り出して抽出する方法
今回行ったbatでの文字列切り出し例を下の表にまとめておきます。
shellの書き方の説明 | shellの書き方 | 開始位置 | 範囲 | 切り出し文字 | 結果 |
---|---|---|---|---|---|
変数指定 | 変数 | – | – | – | ABCDEFG |
展開 | %変数% | – | – | 全て | ABCDEFG |
開始位置指定 | %変数:~3% | 3 | 無し | 3番目から最後まで | DEFG |
開始位置と個数指定 | %変数:~3,2% | 3 | 2個 | 3番目から2個 | DE |
開始位置は末尾から | %変数~-3% | -3 | 無し | 末尾3番目から最後まで | EFG |
開始位置指定、範囲は末尾 | %変数~2,-3% | 2 | 末尾3つまで | 2番目から末尾3つまで | CD |