Windowsバッチ内で、文字列を部分的に切り出す方法です。
サンプル
例)文字列「ABCDEFGHIJKLMN」を切り出すいろいろ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
@echo off rem 文字列定義 set val=ABCDEFGHIJKLMN rem 例1)そのまま表示 echo %val% rem 例2)文字列の4文字目~5文字分を切り出す echo %val:~3,5% rem 例3)文字列の4文字目以降を切り出す echo %val:~3% rem 例4)文字列の文字列の4文字目~末尾5文字を除いたもの echo %val:~3,-5% rem 例5)末尾5文字 echo %val:~-5% rem 例6)末尾から5文字目から2文字分 echo %val:~-5,2% rem 例7)末尾から5文字目から末尾から2文字を除いた分 echo %val:~-5,-2% pause |
(実行結果)
- コマンドプロンプト
- ABCDEFGHIJKLMN DEFGH DEFGHIJKLMN DEFGHI JKLMN JK JKL 続行するには何かキーを押してください . . .
構文
文字列切り出しの構文は以下の通りです。
%val% | 全文字 |
---|---|
%val:~m,n% | m文字目~n文字 |
%val:~m% | m文字目~末尾まで |
%val:~m,-n% | m文字目~末尾n文字を除いた分 |
%val:~-m% | 末尾m文字 |
%val:~-m,n% | 末尾m文字~n文字分 |
%val:~-m,-n% | 末尾m文字~末尾n文字を除いた分 |
備考
- 指定する数字は文字数なので、半角全角問わず1文字は1文字とカウントされます。
- 先頭から数える時の文字位置は1文字目を0、2文字目を1...と数えるのでご注意ください。
コメント
全文字から、末尾10文字を削除したものを表すにはどうすればいいですか?
文字数が固定されていない時にこれができると助かります。
よろしくお願いします。
ご質問ありがとうございます。
echo %val:~0,-10%
↑これでいかがでしょうか?
(例)
set val=ABCDEFGHIJKLMN
echo %val:~0,-10%
→ ABCD
初めまして。
rem 例2)文字列の4文字目~5文字分を切り出す
echo %val:~3,5%
set /a cnt=3
echo %val:~cnt,5%
のように n文字目からのところを変数にすることは可能でしょうか?
遅くなりすみません・・
以下のようなバッチファイルを作成して実行すれば
文字数の箇所は変数にできます。
(sample.bat)
--------------------------------------------------
@echo off
set val=ABCDEFGHIJKLMN
set start=3
set len=5
call set result=%%val:~%start%,%len%%%
echo %result%
--------------------------------------------------
結果:DEFGH