たまにファイルを削除できなかったり、ディレクトリ名を変更できなかったりすることがある。これはあるプログラムがそのファイルを「つかんで」おり、変更できないことになっている状態である。なのでその「つかんで」いるプログラムを終了させれば変更できるようになる。問題はそのプログラムがなんなのかをどうやって知るか、、だ。

ぐーぐるさんに問い合わせると、

http://www.sysinternals.com/ntw2k/freeware/handle.shtml

から、あるファイルを「つかんで」いるプログラム名を出力するユーティリティをダウンロードできるようだ。

コマンドラインユーティリティなので、備忘録も兼ねて使い方を簡単に説明しておこう。

test.txt というファイルを「つかんで」いるプログラムを検索するには

>handle test.txt
と入力すれば、それらのプログラム名が出力される。(test.txt のディレクトリ名を入力する必要はない)

ファイルを「放す」には

プログラムがわかれば、そのプログラムを終了させればいいのだが、何らかの理由で終了できない時は、つかんでいるファイルだけを「放す」ことにより、そのファイルに対する変更が可能になる(もちろんそんなことされたプログラムが正常に動くかどうかわからんけど・・)

さっきの検索で、test.exe というプログラム名が出力されたとしたら、

>handle -u -p test.exe
と実行すると、
TEST.EXE pid: 1276 ****
21C: File C:\temp\test.txt
228: File C:\temp
というようなリストが出力されるので、
>handle -c 21C -p 1276
と入力すればOKだ。

# ちょっとこのカテゴリ名はイマイチだなぁ。もうちょっといいネーミングはないものかねぇ・・