特定の拡張子を指定して、ある場所(フォルダ)内の同一拡張子のファイル名を全て探し出して一覧にするバッチファイルを考え中です。
終わってみて気づいたのですが、他の処理への布石になるような内容ではあるものの、この記事単体では役に立つ話題とは言えない内容かも。
動機
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コマンド意外と高機能。
収集したファイルリストに対して、別のアクションを加えるときにバッチファイルの力を使うことはありそうですが、今回は一覧をファイルに保存するだけで良かったので、これで完了しました。