Windowsバッチファイル

バッチファイルの文字列操作【部分文字列・置換・結合・日付整形のテクニック】

Windowsバッチファイル
記事内に広告が含まれています。

バッチファイルでの文字列操作を解説します。部分文字列の切り出し・置換・文字数カウントは、ファイル名処理や日付整形など実務で頻繁に使うテクニックです。構文の意味を理解しながら覚えましょう。

部分文字列の切り出し(%変数:~開始位置,文字数%)

%変数:~開始位置,文字数% の書式で文字列の一部を取り出せます。開始位置は0始まりです。

@echo off
set STR=HelloWorld

rem :~開始位置,文字数 の形式
echo %STR:~0,5%   ← Hello(0文字目から5文字)
echo %STR:~5,5%   ← World(5文字目から5文字)
echo %STR:~0,1%   ← H(先頭の1文字)

rem 文字数を省略すると末尾まで取得
echo %STR:~5%     ← World(5文字目から末尾まで)

rem マイナスは末尾からの位置
echo %STR:~-5%    ← World(末尾から5文字)
echo %STR:~0,-5%  ← Hello(末尾5文字を除いた部分)

rem 実用例:日付から年・月・日を取り出す
rem %DATE%の形式は環境によって異なる(例: 2026/04/24)
set TODAY=%DATE%
set YEAR=%TODAY:~0,4%
set MONTH=%TODAY:~5,2%
set DAY=%TODAY:~8,2%
echo %YEAR%年%MONTH%月%DAY%日

文字列の置換(%変数:検索=置換%)

%変数:検索文字列=置換文字列% の形式で文字列の置換ができます。すべての一致箇所が置換されます。

@echo off
set STR=Hello World Hello

rem 文字列置換(すべての一致箇所を置換)
echo %STR:Hello=Hi%      ← Hi World Hi

rem スペースを_に置換
set FILENAME=My Report 2026.txt
echo %FILENAME: =_%     ← My_Report_2026.txt

rem スラッシュをアンダースコアに(日付をファイル名に使うときの定番)
set DATE_STR=%DATE:/=_%
echo %DATE_STR%           ← 2026_04_24

rem 置換文字列を空にすると削除になる
set STR2=Hello World
echo %STR2:World=%       ← Hello (「World」を削除)

文字列の結合

バッチファイルには文字列結合の専用演算子はありません。変数を隣に並べて書くだけで結合できます。

@echo off
set FIRST=Hello
set SECOND=World

rem 変数を並べて書くだけで結合
set COMBINED=%FIRST%%SECOND%
echo %COMBINED%         ← HelloWorld

rem 間に文字を入れる
set COMBINED=%FIRST%, %SECOND%!
echo %COMBINED%         ← Hello, World!

rem ファイル名の自動生成(日付+固定文字)
set DATE_STR=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
set LOGFILE=C:\logs\log_%DATE_STR%.txt
echo %LOGFILE%           ← C:\logs\log_20260424.txt

大文字・小文字の変換

バッチファイルには大文字小文字変換の組み込み機能がありません。PowerShellを呼び出して変換する方法がよく使われます。

@echo off
set STR=Hello World

rem PowerShellを使って小文字に変換
for /f %%a in ('powershell -command "'%STR%'.ToLower()"') do set LOWER=%%a
echo %LOWER%    ← hello world

rem 大文字に変換
for /f %%a in ('powershell -command "'%STR%'.ToUpper()"') do set UPPER=%%a
echo %UPPER%    ← HELLO WORLD

文字列の長さを取得する

バッチファイルには文字列長を直接取得するコマンドがないため、PowerShellを使います。

@echo off
set STR=HelloWorld

for /f %%a in ('powershell -command "'%STR%'.Length"') do set LEN=%%a
echo 文字数: %LEN%   ← 10

まとめ

  • %変数:~0,5% で0文字目から5文字を切り出す。マイナスは末尾からの位置
  • %変数:検索=置換% ですべての一致箇所を置換できる。置換文字列を空にすると削除
  • %DATE:~0,4%%DATE:~5,2%%DATE:~8,2% は日付からYYYYMMDD形式を作る定番パターン
  • 大文字小文字変換や文字列長はPowerShellを呼び出して処理するのが現実的

バッチファイルの文字列操作で一番よく使うのが日付の整形です。%DATE%は環境によって形式が違うため、実際に動かして形式を確認してから切り出し位置を決めることをおすすめします。

hobbyshift管理人

コメント

タイトルとURLをコピーしました