バッチファイル(ファイルのURLが生きているかチェック)

■コマンドcurlを使ってのチェック。
ホームページなどで参照するファイルのURLがまだ有効かチェックしたいけど、一つずつクリックしてページが遷移するか見るのは面倒。何かまとめて確認する方法がないか調べるとコマンドプロンプトの curl が使えそう。

curl は、HTTPリクエストを送ったりレスポンスを取得したりするコマンド。curl -i のようにオプションをつけるとレスポンスヘッダを付けた状態での結果出力となる。この中で 200 OK や 404 Not found といった結果が取得できるのでファイルのURLが切れているか分かる。

バッチファイルにまとめたものが下(checkbatch.bat)。curl の結果に対してパイプラインでHTTPの部分のみを出力する。

@echo off
for /f "delims=" %%a in (%1) do (
echo %%a >> %2
curl -i "%%a" | find "HTTP" >> %2
)

前に作ったインターネットインフォメーションサービスのWebサイトを使ってサンプル検証。

上の物理パス部分(C:\Users\user01\Web\ ~)のところにフォルダ(URLcheck)を作っていくつかファイルを保存(中身は適当)。日本語を入れたり、+、-、スペースを入れたりしている。


Edge に「http://localhost:1234/URLcheck/01_textfile.txt」を入力するとファイルの中身が表示される。


各ファイルのURLをリストにしてテキスト(ANSI)として保存して(URLlist.txt)、上のバッチファイルの引数とする。比較のためにファイルが存在しないURLや少し編集したパスも入れている。

http://localhost:1234/URLcheck/01_textfile.txt
http://localhost:1234/URLcheck/02_text file(space).txt
http://localhost:1234/URLcheck/02_text%20file(space).txt
http://localhost:1234/URLcheck/03_text file(space_zen).txt
http://localhost:1234/URLcheck/04_text+file(plus).txt
http://localhost:1234/URLcheck/05_text+file(plus_zen).txt
http://localhost:1234/URLcheck/06_text-file(minus).txt
http://localhost:1234/URLcheck/07_text-file(minus_zen).txt
http://localhost:1234/URLcheck/08_テキストファイル(UTF-8).txt
http://localhost:1234/URLcheck/08-2_テキストファイル(ANSI).txt
http://localhost:1234/URLcheck/09_wordfile.docx
http://localhost:1234/URLcheck/10_excelfile.xlsx
http://localhost:1234/URLcheck/11_imagefile.png
http://localhost:1234/URLcheck/12_nofile.txt


実行。


結果。
200 OKとなっているものは、正しくレスポンスが返っていると分かる。ファイル名に半角スペース、+を入れたファイルはNG。ファイルがないものは当然NG。ただ半角スペースは、%20に置き換えて実行するとOK。Edgeに直接入力しても自動的に%20に変換されるのでブラウザの仕様なのかな。


半角のプラスを使っているものは、直接入れても404 Not Foundのエラーで正しく判定されている。


そこまで精度が高い方法ではないだろうけど、curl コマンド自体はWindows10であれば標準で入っているようなので、何かのインストールとか必要なくチェックできると思う。