新しいマシンを購入したり、メモリ容量を増やしたりするたびに、最新のマシンにハードディスクをどんどん追加していました。今では、古いデータ (Windows インストール、プログラム ファイルなど) のディスクがいくつかあり、さらに、頻繁に使用されないファイル ("C:\ProgramData\Package Cache") のプライマリ SSD ディスクの負荷を軽減するために、実際に使用されるデータを含むハードディスクにファイルのシンボリック リンクとジャンクションを作成しました。
古いディスク上の一部のプログラムは、使用される場合もあります。たとえば、デスクトップ上のリンク経由でよく使用するインストール不要のバージョンは、実際の場所を覚えておらず、削除したくない場合があります。
1 つの方法としては、すべてのディレクトリの名前を変更し、数か月間マシンを使い続けて、問題のドライブを指すデッドリンクがどこで見つかるかを調べることですが、いくつかの (おそらくすべてではない) 場所を見つけるまで、かなりの時間を要することになります。
今、私はもっと積極的なアプローチを探しています。レジストリ検索スクリプトを作成しました(https://gist.github.com/Seikilos/ab23cf6b85e1d65936a5) を使用すると、すべてのハイブ内の任意のものを検索できます。特定の古いドライブへの参照を見つけるためにこれを実行しましたが、明らかに関連するパスは見つかりませんでした (主に 内HKEY_LOCAL_MACHINE\SOFTWARE\Classes
)。現在の Windows インストールからこのドライブに何もインストールしていないので、これは当然のことです。
しかし、上に書いたように、このドライブにはまだ検出していないジャンクションや単純なリンク、その他のビューがあることはわかっており、現在のインストールでデータが使用される可能性をすべて確認する方法を探しています。
ファイル テーブルなどを読み取ってジャンクションやシンボリック リンクを見つけるなど、参照を取得する既知の方法はありますか?
更新: @and31415 は、すべてのファイル システム レベルのリンクとジャンクションを取得するコマンドがあることを指摘しました。ただし、単純なリンク (.lnk で終わる) がある場合、コマンドはdir
それを表示しません。引数 /AL はそれらをまったく無視します。.lnk ファイルを見つけるのは難しくありませんが、それらを自動的に解決できるようにしたいと思います。