バッチファイルで複数の単語を自動検索する方法

プログラミング

はじめに

複数の単語を一括でブラウザで検索したい」——このニーズは意外と多い。
たとえば、英単語をオンライン辞書で調べる場合、手動で一つずつ検索するのは非常に面倒だ。そこで、バッチスクリプトを活用し、自動で検索を行うスクリプトを作成した。

しかし、初版のスクリプトでは 文字化け・タブ順序の乱れ・動作の不安定さ という課題が発生。
これらの問題を解決し、より安定したスクリプトへと改良したので、備忘録として記録しておく。


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

改善後のバッチスクリプト

以下は、リストファイル(lst_pl_wrds.txt)内の単語を読み込み、それぞれをFirefoxで検索するバッチスクリプトの改良版である。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

chcp 1250 >NUL
SET "FF_EXE=C:\Program Files\Mozilla Firefox\firefox.exe"
SET "BASE_URL=https://www.diki.pl/slownik-angielskiego?q="
SET "FIRST_RUN=1"

FOR /F "usebackq delims=" %%e IN ("lst_pl_wrds.txt") DO (
FOR %%o IN (%%e) DO (
SET "URL=!BASE_URL!%%o&end"
IF !FIRST_RUN! EQU 1 (
START "" "!FF_EXE!" "!URL!"
SET "FIRST_RUN=0"
) ELSE (
START "" "!FF_EXE!" -new-tab "!URL!"
)
TIMEOUT /T 2 >NUL
)
)

ENDLOCAL
EXIT /B

改善点とその解説

1. 文字化けを防ぐ

バッチスクリプトでは、日本語や特殊文字を扱う際に 文字化け が発生しやすい。
特に、ポーランド語などの特殊文字を含む場合、デフォルトのコードページ設定では正しく処理できない。

改善策

chcp 1250 >NUL

これにより、中央ヨーロッパ言語の特殊文字が正しく処理される ようになる。

また、usebackq オプションを追加することで、ファイル名にスペースが含まれていても安全に読み込める ようにした。


2. Firefoxのタブ管理を最適化

Firefoxの -new-tab オプションを使うと、既存のウィンドウのタブとして開く仕様になっている。
しかし、最初の単語だけは新規ウィンドウで開き、以降はタブとして開くほうが整理しやすい。

改善策

IF !FIRST_RUN! EQU 1 (
START "" "!FF_EXE!" "!URL!"
SET "FIRST_RUN=0"
) ELSE (
START "" "!FF_EXE!" -new-tab "!URL!"
)

これにより、最初の検索結果は新規ウィンドウで開き、それ以降は同じウィンドウ内にタブを追加する形で開く 仕様になった。


3. タブの順番が崩れにくくなる

START "" "!FF_EXE!" -new-tab "!URL!" を実行する際、ネットワークの遅延やFirefoxの処理速度の影響で、タブの開く順番が前後してしまう ことがある。

解決策

TIMEOUT /T 2 >NUL

2秒の待機時間を設定することで、Firefoxがタブを開く時間を確保し、順序が崩れる可能性を低減した。
環境によっては 3秒 に調整すると、さらに安定することがある。


4. 変数の明確化とコード品質向上

変数名を意味のあるものに変更 し、スクリプトの可読性を向上させた。
FF_EXE → Firefoxの実行ファイルパス
BASE_URL → 検索URLのベース部分
FIRST_RUN → 最初の1回のみ新規ウィンドウを開くためのフラグ

また、ENABLEDELAYEDEXPANSION を明示的に有効化し、!VAR! を利用することで、ループ内で変数を正しく扱えるようにした。


さらに発展させる方法

1. 大量の単語を処理する場合の最適化

一度に大量の単語を開くと Firefoxが不安定になる可能性 がある。そのため、500単語ごとに区切って開く方法を導入する。

SET /A COUNTER=0
SET "URL_GROUP="

FOR /F "usebackq delims=" %%e IN ("lst_pl_wrds.txt") DO (
SET "URL_GROUP=!URL_GROUP! "!BASE_URL!%%e&end""
SET /A COUNTER+=1
IF !COUNTER! GEQ 500 (
START "" "!FF_EXE!" %URL_GROUP%
SET "URL_GROUP="
SET /A COUNTER=0
)
)

これにより、Firefoxが一度に処理する負担を軽減し、クラッシュを防ぐ。


2. ログ機能を追加

処理が正常に進んでいるかを確認するため、ログファイルを作成 する。

SET "LOG_FILE=execution_log_%date:~-4%%date:~-7,2%%date:~-10,2%.txt"
ECHO 処理開始時間:%time% >> "!LOG_FILE!"

FOR /F "usebackq delims=" %%e IN ("lst_pl_wrds.txt") DO (
ECHO %%e を処理中... >> "!LOG_FILE!"
)

これにより、処理履歴を記録し、後でトラブルシューティングに活用できる。


3. エラーチェック機能を追加

事前に 必要なファイルが存在するかを確認する ことで、エラーを未然に防ぐ。

IF NOT EXIST "lst_pl_wrds.txt" (
ECHO エラー:単語リストファイルが見つかりません
EXIT /B 1
)

IF NOT EXIST "!FF_EXE!" (
ECHO エラー:Firefoxがインストールされていません
EXIT /B 1
)

これにより、エラー発生時に無駄な処理をせず、スクリプトを即座に終了 できる。


まとめ

このバッチスクリプトの改善により、Firefoxを使って複数単語を一括検索する際の効率が大幅に向上 した。
特に、タブの順番が崩れる問題や文字化けの発生を防ぎ、より安定した動作を実現 できた。

✅ 文字化け防止(chcp 1250
✅ タブ順序の安定化(TIMEOUT /T 2
✅ エラーチェックの追加(ファイルやFirefoxの存在確認)
✅ ログ機能の導入(execution_log.txt

今後、さらに改良を加える場合は PowerShellやPython を活用し、より柔軟な制御を試みたい。
バッチスクリプトはシンプルで便利だが、処理の複雑化に伴い、より高度なスクリプト言語との併用を検討するのも一つの選択肢だ。

コメント