@tooljpさんをフォロー

openfiles コマンドでファイルを開いているプロセスを調べる 【 Windows】

ファイルを編集したり削除しようとした場合、他のプロセスが開いていて編集・削除できないことがあります。このような場合、ファイルを開いているプロセス(アプリケーションやサービスなど)を終了させてからファイルを編集・削除する必要があります。そういう場合は openfiles でファイルを開いているプロセスを調査することが出来ます。


【Windowsupdate ファイルが削除できない】

以下は Windows Server 2008 R2で確認しましたが、Windows 7 など基本的に同じです。

1.設定方法

openfiles コマンド が機能するには事前に以下の設定、及び設定後のリブートが必要です。

C:\>openfiles /local on

成功: システム グローバル フラグ 'maintain objects list' は有効になりました。
システムを再起動すると、変更が有効になります。

(注意)ネットワーク経由で他のユーザが開いているローカルのファイル(ローカルサーバの共有を使用して他のユーザが開いているファイル)一覧は "openfiles /local on"の設定をしなくても一覧表示可能。
openfiles /query /v で出力されます。

2.一覧表示

現在開かれているファイルの一覧を表示するには以下のコマンドを実行します。

C:\>openfiles /query /v

以下例では test.txtを開いているプロセスを表示しています。ローカルファイルと共有ファイル(ネットワーク経由で他のサーバ開く)で結果が異なります。

(1)ローカルファイルの場合

C:\>openfiles /query /v | findstr test.txt
408 Administrator 1340 Hidemaru.exe C:\temp\test.txt

(注) 秀丸の「ファイルの排他制御」「読み書き禁止」でファイルを排他的に開いた場合。


(2)共有ファイルの場合(openfilesを実行しているサーバに対して、ネットワーク経由で他のユーザが開いているファイル)

C:\>openfiles /query | findstr test.txt
210 administrator Windows C:\temp\test.txt

(注) openfiles コマンドはリモートコンピュータ上の情報を見ることも可能です。

openfiles /query /s <ipアドレス> /u <ユーザ名> /p <パスワード>



(3)切断方法(強制クローズ)
●ローカルファイルの場合
ローカルで開いているファイルは切断(強制クローズ)できません。ファイルを開いているアプリケーションを終了させましょう。
(不明なプロセスがファイルを開いて削除できない場合などの強制ファイルクローズは不可となります。)

●共有ファイルの場合
openfilesを実行しているサーバに対して、ネットワーク経由で他のユーザが開いているファイルは切断(強制クローズ)が可能です。
以下の例ではネットワーク経由で開かれている test.txtを強制切断しています。

C:\>openfiles /query | findstr test.txt
210 administrator Windows C:\temp\test.txt

(上記ファイルはネットワーク経由でadministratorが共有を使用して test.txtを開いている)

C:\>openfiles /Disconnect /ID 210
成功: 開いているファイル "C:\temp\test.txt" への接続は切断されました。

C:\>openfiles /query | findstr test.txt
(結果無し)

(注)
ファイルを排他無しで開いている場合は開いているファイル一覧には表示されません。
例として、秀丸の「ファイルの排他制御」が「しない」の場合、結果の一覧に表示されません。「ファイルの排他制御」が「上書きだけ禁止」あるいは「読み書き禁止」の場合は表示されます。

3.設定を戻す

・/local on の設定を行うと性能が悪化します。よって設定が不要なら設定を戻すことを推奨します。

C:\>openfiles /local off

成功: システム グローバル フラグ 'maintain objects list' は無効になりました。
システムを再起動すると、変更が有効になります。

[Windows 技術ドキュメント トップ]
[FAQ CENTER トップ]