treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

特定の拡張子のファイルを探し出して一覧表示したい

特定の拡張子を指定して、ある場所(フォルダ)内の同一拡張子のファイル名を全て探し出して一覧にするバッチファイルを考え中です。
終わってみて気づいたのですが、他の処理への布石になるような内容ではあるものの、この記事単体では役に立つ話題とは言えない内容かも。

動機

PCの移行時にちょっとしたことで、ショートカットのリンクの張り直しが必要になるケースがありました。
ただ、いちいちどこにどんなショートカットを置いているかを全て記憶している人はなかなかいないかと思います。

その場合、せめてどんなショートカットがどれくらいの量存在しているかを確認できれば、ショートカットの再作成作業に役に立つかなと思い、ショートカットファイルを探し出して一覧表示し、テキストファイルにでも保管するバッチができればいいかなと思いました。

ショートカットを探す

ショートカットはファイル名.lnkという一つのファイルとして取り扱われます。エクスプローラのようなGUIでは拡張子の.lnkを目にすることは少ないのですが、コマンドプロンプトで確認すると.lnkファイルであることが分かります。

ここまでやったところで、そういや「dir」コマンドでlsコマンドみたいに簡単な絞り込みができたなぁと思い出してやってみました。

dir *.lnk

と実行してみると、

拡張子.lnkのショートカットだけが表示されました。ん?なんかバッチファイル用意しなくて良いような気がしてきたぞ。

フルパスで表示

「dir」コマンドのオプションを確認してみたところ、「/S」オプションに、「指定されたディレクトリおよびそのサブディレクトリのすべてのファイルを表示します。」という表記を見つけました。特定のフォルダ以下全てのファイルを一覧表示できるオプションです。

試しにサブフォルダを作成して、

dir /s *.lnk

を実行してみました。

カレントディレクトリからサブフォルダまで範囲を広げてしっかりと表示してくれています。ただ、フォルダ毎に区切られているのとタイムスタンプなどはなくてもいいかなぁと思い以前使った「/b」オプションでファイル名だけの表示にしてみることにしました。

コマンドは

dir /b /s *.lnk

と、実行すると、

フルパスで思ったような一覧を表示してくれました。

これをユーザプロファイル(cd %USERPROFILE%)をカレントディレクトリにして実行する(もしくは、パス指定で「dir /b /s %userprofile%\*.lnk」と指定する)と、ユーザプロファイル内の.lnk(ショートカット)ファイル検索を実行して画面に表示してくれます。

テキストファイルなどに記録したいときは

dir /b /s *.lnk >> FileList.txt

という具合にファイルへリダイレクトすると、一覧を保存できました。

結論

なんかバッチファイルを作らなくてもdirコマンドだけで欲しい情報が収集できてしまいました。dirコマンド意外と高機能。

収集したファイルリストに対して、別のアクションを加えるときにバッチファイルの力を使うことはありそうですが、今回は一覧をファイルに保存するだけで良かったので、これで完了しました。