文字列操作

にメンテナンス済み

バッチファイルでファイル名の加工やログの整形など、文字列を操作したい場面は多くあります。

バッチファイルには専用の文字列関数はありませんが、set コマンドの特殊な構文を使うことで、文字列の置換切り出し(部分文字列の取得)結合などの操作が可能です。

文字列の置換

変数内の特定の文字列を別の文字列に置き換えるには、以下の構文を使用します。

構文
set 新変数=%変数:置換前=置換後%

使用例

replace.cmd
@echo off
setlocal

set TEXT=Hello World
echo 元の文字列: %TEXT%

set TEXT=%TEXT:World=Japan%
echo 置換後: %TEXT%

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>replace.cmd
元の文字列: Hello World
置換後: Hello Japan
C:\users\user>

パス区切り文字の変換

バックスラッシュをスラッシュに変換
set PATH_STR=C:\Users\user\Documents
set PATH_STR=%PATH_STR:\=/%
echo %PATH_STR%
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %PATH_STR%
C:/Users/user/Documents
C:\users\user>

文字列の削除(空文字に置換)

不要な文字を削除
set TEXT=  Hello
set TEXT=%TEXT: =%
echo [%TEXT%]
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo [%TEXT%]
[Hello]
C:\users\user>
置換の注意点

文字列の置換は大文字・小文字を区別しません。%TEXT:hello=Hi% と記述した場合、HelloHELLOhello もすべて置換されます。

文字列の切り出し(部分文字列)

変数から特定の位置の文字列を切り出すには、以下の構文を使用します。

構文
%変数:~開始位置,文字数%
パラメータ説明
開始位置0 から始まるインデックス
文字数取得する文字数(省略時は末尾まで)
負の値末尾からの位置を指定

使用例

substring.cmd
@echo off
setlocal

set TEXT=ABCDEFGHIJ

rem 先頭から3文字を取得
echo %TEXT:~0,3%

rem 4文字目から3文字を取得(0始まりなので3を指定)
echo %TEXT:~3,3%

rem 先頭の2文字をスキップ
echo %TEXT:~2%

rem 末尾の3文字を取得
echo %TEXT:~-3%

rem 末尾の3文字を除く
echo %TEXT:~0,-3%

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>substring.cmd
ABC
DEF
CDEFGHIJ
HIJ
ABCDEFG
C:\users\user>

ゼロ埋め(ゼロパディング)

数値を 3 桁にゼロ埋めする例です。

zeropad.cmd
@echo off
setlocal enabledelayedexpansion

for /L %%i in (1,1,5) do (
    set NUM=00%%i
    set NUM=!NUM:~-3!
    echo !NUM!
)

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>zeropad.cmd
001
002
003
004
005
C:\users\user>
チェック

ゼロ埋めのテクニックは、ファイル名の連番やログのフォーマットなどで頻繁に使用されます。set NUM=00%%i で先頭にゼロを付けた後、!NUM:~-3! で末尾 3 文字を取得することで 3 桁のゼロ埋めが実現できます。

文字列の結合

バッチファイルでは、変数を並べて記述するだけで文字列を結合できます。

concat.cmd
@echo off
setlocal

set FIRST=Hello
set SECOND=World
set RESULT=%FIRST% %SECOND%
echo %RESULT%

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>concat.cmd
Hello World
C:\users\user>

ループで文字列を蓄積する

accumulate.cmd
@echo off
setlocal enabledelayedexpansion

set RESULT=
for %%f in (*.txt) do (
    set RESULT=!RESULT! %%f
)

echo 見つかったファイル:%RESULT%
endlocal

文字列の長さを取得する

バッチファイルには文字列の長さを直接取得する機能がありませんが、以下のテクニックで取得できます。

strlen.cmd
@echo off
setlocal enabledelayedexpansion

set TEXT=Hello World
set LEN=0

:LOOP
if not "!TEXT:~%LEN%,1!"=="" (
    set /a LEN+=1
    goto LOOP
)

echo 文字列: %TEXT%
echo 長さ: %LEN%

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>strlen.cmd
文字列: Hello World
長さ: 11
C:\users\user>

ファイルパスの操作

バッチファイルでは、for の変数修飾子を使ってファイルパスの各部分を取得できます。

path_parts.cmd
@echo off
set FILE=C:\Users\user\Documents\report.txt

for %%F in ("%FILE%") do (
    echo フルパス:    %%~fF
    echo ドライブ:    %%~dF
    echo フォルダ:    %%~pF
    echo ファイル名:  %%~nF
    echo 拡張子:      %%~xF
    echo 名前+拡張子: %%~nxF
)
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>path_parts.cmd
フルパス: C:\Users\user\Documents\report.txt
ドライブ: C:
フォルダ: \Users\user\Documents\
ファイル名: report
拡張子: .txt
名前+拡張子: report.txt
C:\users\user>
修飾子説明
~fフルパス
~dドライブレター
~pパス(フォルダ部分)
~nファイル名(拡張子なし)
~x拡張子
~nxファイル名+拡張子

まとめ

操作構文
文字列の置換%変数:置換前=置換後%
文字列の切り出し%変数:~開始位置,文字数%
末尾から切り出し%変数:~-文字数%
文字列の結合set RESULT=%A%%B%

関連記事

練習問題

練習問題

変数 TEXT に格納された文字列の先頭から 5 文字を取り出す構文として正しいものはどれですか?

回答がサーバーに送信されることはありません
#コマンドプロンプト #バッチファイル #文字列操作 #set #コマンド