はじめに
今回ファイル内の特定文字を置換したい時に使えるWindowsバッチをご紹介します。
1. サンプルコマンド
まずサンプルとして、「こんにちは」と記載されたinput.txtを「HELLO」と置換し、
output.txtへ出力する場合のコマンドを紹介します。
こんにちは、Aさん
こんにちは、Bさん
こんばんは、Cさん
set BEFORE_STRING=こんにちは
set AFTER_STRING=HELLO
set INPUT_FILE=input.txt
set OUTPUT_FILE=output.txt
setlocal enabledelayedexpansion
for /f "delims=" %%a in (%INPUT_FILE%) do (
set line=%%a
echo !line:%BEFORE_STRING%=%AFTER_STRING%!>>%OUTPUT_FILE%
)
HELLO、Aさん
HELLO、Bさん
こんばんは、Cさん
このように上記コマンドを実行することで「こんにちは」という文字列が「HELLO」に置換されます。
2. 構文
2-1. ファイル読み込み
まず、ファイルを一行ずつ読みこむ際にはfor文を使用します。
for文を使用するときは以下のコマンドをあらかじめ実行します。
setlocal enabledelayedexpansion
ERRORLEVELコマンドを使用してエラー判定したいときなどに
このコマンドがないと正常終了してもエラーとしてリターンコードが返却されてしまいます。
理由としては、for文を実行している間にERRORLEVELコマンドが実行されるためです。
まあここはfor文を使うときはおまじないと思っていただければと思います。
なくても動きますが、for文を使用するときは記載するくせをつけましょう。
次にfor文の解説をします。
以下の構文でファイルを一行一行読みこむことができます。
for /f "delims=" %%a in (ファイル) do (set line=%%a)
各オプションは以下の役割をしてます。
オプション | 役割 |
---|---|
/f | ファイルを行単位で変数に読み込み繰り返し処理が行えるオプションです。 |
delims=" | デリミタ(区切り)を無効にする。 |
対象ファイルのレコードを一行一行読み込み、
読み込んだ内容を%%aに一時的に格納しています。
2-2. 置換
文字列を置換する際は以下の構文となります。
!変数名:置換対象の文字列=置換後の文字列!
今回サンプルでは置換したレコードをechoコマンドでテキスト出力してます。
テキスト出力するときの注意点は以下の2点です。
・ 「>>」で追記モードにする。
・ 「>>」の前後はスペースを入れない。
追記モードにしないと最後の1レコードしか出力されませんし、
「>>」の前後にスペース入れるとテキスト出力した際、レコードの最後にスペースが入ってしまいます。
最後にもう一度サンプルプログラムをのせておきます。
set BEFORE_STRING=こんにちは
set AFTER_STRING=HELLO
set INPUT_FILE=input.txt
set OUTPUT_FILE=output.txt
setlocal enabledelayedexpansion
for /f "delims=" %%a in (%INPUT_FILE%) do (
set line=%%a
echo !line:%BEFORE_STRING%=%AFTER_STRING%!>>%OUTPUT_FILE%
)
ぜひ活用してみてください。
さいごに
2020年から個人ブログはじめました!
フリーランスエンジニアになって得た知識と経験をもとに、フリーランスエンジニアに関する情報をはじめ、IT技術情報や業界情報、エンジニアライフハック等のコンテンツを配信していく予定です。
まだまだ記事数は少ないのですが、週単位で更新してますので、もしご興味ございましたら、みていただけると嬉しいです。
さいごまでお読みいただき、ありがとうございました。