【初心者バッチファイル】ファイル内の同じ文字を削除する方法

Pocket

スポンサーリンク
スポンサーリンク

ファイル内のテキスト一覧に同じ文字列があった場合に重複文字を削除する方法

こんにちは。thimiです。

今日は、ファイル内に同じ文字列があった場合に削除する方法です。

下記のようなファイル一覧があるとします。

※今回ご紹介する方法は、ソートされている必要があるため

使用するファイルはソートしてください。

◆ソート方法はこちら

https://thimi-lifehack.com/sort1/

https://thimi-lifehack.com/sort2/

同じ文字列の行を削除したい場合は、バッチファイルを下記のように記載します。

※for文の二重ループを使っています。

delete_list.bat 
@echo offコマンドプロンプトへ非表示
rem ファイルが存在していれば、削除rem:コメント(覚書記載)
if exist delete_list2.csv del elete_list2.csv既にファイルがある場合は一度削除する処理
setlocal enabledelayedexpansionfor文の中で値を変更したいため、遅延環境変数を使うための宣言
rem 変数「n」を初期化rem:コメント(覚書記載)
set i=0for文をiの変数でループ処理するために初期化
rem 「delete_list.csv」ファイルを1行ずつ読み込むrem:コメント(覚書記載)
for /f %%a in (delete_list.csv) do (delete_list.csvファイルを一行ずつ読み込む
rem 変数「i」に+1rem:コメント(覚書記載)
set /a i=!i!+1次の文字列確認(i+1)
rem 変数「j」を初期化rem:コメント(覚書記載)
set j=0for文をjの変数でループ処理するために初期化
rem 変数「flag」を1で初期化rem:コメント(覚書記載)
set flag=1文字列重複判断をflagで判断するために初期化
※重複している場合は、flag=0が設定されている
rem 「delete_list.csv」ファイルを1行ずつ読み込むrem:コメント(覚書記載)
for /F %%b in (delete_list.csv) do (delete_list.csvファイルを一行ずつ読み込む
rem 変数「j」に+1rem:コメント(覚書記載)
set /a j=!j!+1次の文字列確認(j+1)
rem 同じ文字列の行があれば、「flag」に0を代入rem:コメント(覚書記載)
if !j! lss !i! (if %%a == %%b ( set flag=0 )))二重ループのjを回して、iと比較する
※jはiより小さい場合だけチェック
rem 同じ文字列ががない場合、「delete_list2.csv」ファイルに書き出しrem:コメント(覚書記載)
if !flag! equ 1 echo %%a> delete_list2.csvflag=1の場合だけ、delete_list2.csvへ書き出し
)
endlocalローカル変数使用終了(省略可)
exit終了処理(省略可)




バッチファイルの内容を簡単に説明します。

「setlocal enabledelayedexpansion」コマンド

遅延環境変数のコマンドです。

値を実行するときに読み込むときに使います。設定した値を使うときは、

変数を「!」で囲みます。

「set」コマンド

実行中の環境変数の値を設定します。

「for」コマンド

ループ処理コマンドです。

オプションとして「/f」を追加することで、テキストファイル内の文章を

取り出して代入しています。

「if」コマンド

条件文コマンドです。

1つ目のif文では、jの変数がiの変数よりも小さい、かつ「%%a」と「%%b」を比較して同じだったらflagに0を設定しますという条件文です。

2つ目のif文では、flag=1だったらファイルに書き出すという条件文です。

実行すると下記結果となります。

※比較演算子は用途によって使い分けてください。

equ 等しい(=)

neq 等しくない(≠)

gtr より大きい(>)

geq 以上(≧)

leq 以下(≦)

lss 未満(<)

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする