Windowsバッチ

Windowsバッチでファイル内の特定文字を置換する方法

はじめに

今回ファイル内の特定文字を置換したい時に使えるWindowsバッチをご紹介します。

1. サンプルコマンド

まずサンプルとして、「こんにちは」と記載されたinput.txtを「HELLO」と置換し、output.txtへ出力する場合のコマンドを紹介します。

このように上記コマンドを実行することで「こんにちは」という文字列が「HELLO」に置換されます。

構文

1. ファイル読み込み

まず、ファイルを一行ずつ読みこむ際にはfor文を使用します。

for文を使用するときは以下のコマンドをあらかじめ実行します。

setlocal enabledelayedexpansion

ERRORLEVELコマンドを使用してエラー判定したいときなどに、このコマンドがないと正常終了してもエラーとしてリターンコードが返却されてしまいます。

理由としては、for文を実行している間にERRORLEVELコマンドが実行されるためです。

まあここはfor文を使うときはおまじないと思っていただければと思います。

なくても動きますが、for文を使用するときは記載するくせをつけましょう。

次にfor文の解説をします。

以下の構文でファイルを一行一行読みこむことができます。

for /f "delims=" %%a in (ファイル) do (set line=%%a)

各オプションは以下の役割をしてます。

|オプション|役割|
|:–:|:–|
|/f|ファイルを行単位で変数に読み込み繰り返し処理が行えるオプションです。|
|delims=”|デリミタ(区切り)を無効にする。|

対象ファイルのレコードを一行一行読み込み、読み込んだ内容を%%aに一時的に格納しています。

2. 置換

文字列を置換する際は以下の構文となります。

!変数名:置換対象の文字列=置換後の文字列!

今回サンプルでは置換したレコードをechoコマンドでテキスト出力してます。

テキスト出力するときの注意点は以下の2点です。

・ 「>>」で追記モードにする。
・ 「>>」の前後はスペースを入れない。

追記モードにしないと最後の1レコードしか出力されませんし、
「>>」の前後にスペース入れるとテキスト出力した際、レコードの最後にスペースが入ってしまいます。

最後にもう一度サンプルプログラムをのせておきます。

ぜひ活用してみてください。