Windowsバッチファイル(.bat) ファイルの重複削除(ソート版)


この記事はプロモーションを含みます。

バッチファイル

ホーム > コマンドプロンプト・バッチファイル リファレンス

前回は、並び順を維持していましたが、今回はソート後に重複削除することで処理時間が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

こちらはソートしている分、前回作成したものより、ループ量が減ったため処理時間が短くなっていますね。順序性を維持するか、処理速度を取るかで使い分けるといいと思います。
今回は以上となります。

コメント

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