Qiitaで初めて書いてみる記事です。
バッチファイルでテキストを置換する記事がいくつかあるけど
10000行とかのテキストファイルを置換するときに結構時間がかかるので改善してみました。
AAA.txtに「before」という文字があって、それを「after」に
置換して、BBB.txtに出力するだけの処理です。
old.bat
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%r in (D:\AAA.txt) do (
set line=%%r
echo !line:before=after! >> D:\BBB.txt
)
new.bat
@echo off
setlocal enabledelayedexpansion
(
for /f "delims=" %%r in (D:\AAA.txt) do (
set line=%%r
echo !line:before=after!
)
)>> D:\BBB.txt
あまり違いがないかもしれないですが、()が増えたのとBBB.txtに出力するタイミングが変わります。
old.batでは1行ごとにファイルハンドルをオープンクローズしていますが
new.batではいったん全部置換してから最終的にファイル出力しています。
10000行くらいのファイルでold.batでは1分くらいかかっていましたが、
数秒で同じ結果が出力できます。