サイトアイコン スグブログ

【bat】バッチで文字列を切り出して抽出する方法!変数を使用します!

money

3d rendering of three silver metal ufo above city skyscrapers with dollars in the air on blue sky background. Science fiction. Extraterrestrial life. Space technology.

batファイル文字列切り出して抽出して使用したいです!

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番目から以降全ての文字列を切り出しています。

開始位置を末尾から指定する場合は「-」をつければOKです。

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%32個3番目から2個DE
開始位置は末尾から%変数~-3%-3無し末尾3番目から最後までEFG
開始位置指定、範囲は末尾%変数~2,-3%2末尾3つまで2番目から末尾3つまでCD
シェルスクリプト例のまとめ

※取得開始位置は「~」を付けるのを忘れない事

モバイルバージョンを終了