ホーム > コマンドプロンプト・バッチファイル リファレンス
前回は、並び順を維持していましたが、今回はソート後に重複削除することで処理時間が5分の1程度まで短縮されましたので、こちらもご紹介したいと思います。
使用方法
以下のように定義してバッチを実行します。
ファイル名のみを定義した場合、バッチと同じフォルダが参照されます。
・inputFile:重複削除前のファイル
・outputFile:重複削除後のファイル
・tmpFile:一時的に作成するファイル(他のファイルと名前が被りそうなら変更して下さい)
ソースコード
今回も仕組みは単純で、標準機能として提供されている「sort」コマンドでインプットファイルをソートして一時ファイルに出力。それを元にループして、1つ前のループで処理した値と異なる場合のみ、アウトプットファイルに値を出力しています。
@echo off
set inputFile="input.txt"
set outputFile="output.txt"
set tmpFile="tmp.txt"
type nul > %outputFile%
sort %inputFile% > %tmpFile%
set buf=""
setlocal enabledelayedexpansion
for /f "delims= usebackq" %%i in (%tmpFile%) do (
if not !buf! == %%i (
set buf=%%i
echo %%i>>%outputFile%
)
)
endlocal
del %tmpFile%
exit
こちらはソートしている分、前回作成したものより、ループ量が減ったため処理時間が短くなっていますね。順序性を維持するか、処理速度を取るかで使い分けるといいと思います。
今回は以上となります。
コメント