「ファイルが使用中で開けない」「誰が共有フォルダのExcelを開いているか知りたい」というとき、Windowsで最短なのが openfiles コマンドです。共有フォルダ経由で開いているファイルは openfiles /query で確認でき、同じPCやサーバー上でローカルに開いているファイルまで追いたい場合は、先に openfiles /local on を設定して再起動する必要があります。しかも、この設定は再起動後に反映され、不要になったら openfiles /local off で元に戻せます。この記事では、最短手順、つまずきやすい点、切断の判断基準、代替策まで迷わず使える形で整理します。(Microsoft Learn)
openfilesコマンドでまず押さえる結論
openfiles は Windows 10 / 11 と Windows Server で使える標準コマンドです。開かれているファイルやディレクトリの照会、共有フォルダ経由の切断、ローカル ファイル ハンドル追跡のオン・オフができます。まずは「共有フォルダの開きっぱなしを見たいのか」「ローカルで開いているファイルまで見たいのか」を切り分けると迷いません。(Microsoft Learn)
| 状況 | 最初に実行するコマンド | 判断ポイント |
|---|---|---|
| 共有フォルダの開きっぱなしを見たい | openfiles /query /fo table | まずは一覧で確認 |
| 詳細を見たい | openfiles /query /fo list /v | 詳細表示で追う |
| 結果を保存したい | openfiles /query /fo csv > C:\temp\openfiles.csv | Excelで並べ替えしやすい |
| ローカルで開いているファイルも見たい | openfiles /local on → 再起動 → openfiles /query /fo list /v | 初回設定が必要 |
| 調査後に戻したい | openfiles /local off → 再起動 | 追跡を止める |
openfiles /query の出力形式は TABLE LIST CSV から選べ、/v で詳細表示、/nh で見出し省略ができます。/local は現在の状態確認、オン、オフの切り替えに使います。(Microsoft Learn)
openfilesコマンドで開いているファイルを確認する基本手順
共有フォルダ経由なら、まず openfiles /query
最初は管理者権限で開いたコマンド プロンプトや Windows Terminal から、次のコマンドを実行します。
openfiles /query
一覧が見づらければ、画面確認は LIST + /v、後で絞り込みたいなら CSV が実用的です。(Microsoft Learn)
openfiles /query /fo list /v
openfiles /query /fo csv > C:\temp\openfiles.csv
現場では、まず TABLE で全体を見る、対象が多いときは CSV に落としてファイル名やユーザー名で探す、という流れが最も迷いません。保存先フォルダは事前に作っておくと手戻りがありません。
別のサーバーをリモートで確認する
ファイルサーバーが別マシンなら /s で対象サーバーを指定します。必要なら /u で別資格情報を使えます。/s にはサーバー名または IP アドレスを指定し、先頭に \\ は付けません。(Microsoft Learn)
openfiles /query /s FILESERVER01 /u CONTOSO\AdminUser
パスワードをコマンドラインに平文で残したくないなら、/p は付けずに実行してください。Microsoft Learn の例でも、/p を省略すればパスワード入力が促され、画面にエコーされない方法が案内されています。(Microsoft Learn)
ローカルで開いているファイルを見たいなら openfiles /local on
ここが最もつまずきやすいポイントです。openfiles /local はローカル ファイル ハンドル追跡の状態を表示し、既定では無効です。ローカルで開いているファイルも追いたい場合は、先に有効化してから再起動する必要があります。(Microsoft Learn)
openfiles /local
openfiles /local on
/local on を実行した直後には、まだ結果は変わりません。設定変更は再起動後に有効になるため、再起動してから改めて照会します。(Microsoft Learn)
openfiles /query /fo list /v
ローカルの Excel、Access、業務アプリが同一サーバー上でファイルをつかんでいるか確認したいのに、openfiles /query で何も出てこない場合は、この「/local on を入れたが再起動していない」パターンをまず疑うのが近道です。
失敗しやすいポイントと対処
| 症状 | 原因 | 対処 |
|---|---|---|
| 共有ファイルは見えるのに、ローカルで開いているファイルが出ない | ローカル追跡が無効 | openfiles /local on を実行し、再起動 |
/local on を入れたのに結果が変わらない | まだ再起動していない | 再起動後に openfiles /query を再実行 |
| 一覧が読みにくい | 出力形式が合っていない | LIST /v または CSV を使う |
| コマンド履歴にパスワードを残したくない | /p で平文指定している | /p を省略してプロンプト入力 |
| どのアプリがファイルを握っているか分からない | openfiles はファイル一覧向きで、プロセス特定は得意ではない | 後述の Handle や Process Explorer を使う |
特に多いのは、/local on を実行しただけで満足してしまい、再起動していないケースです。また、リモート接続時のパスワードは /p を省略すれば画面に表示されない入力にできます。プロセス名まで掘りたい場合は、Microsoft Sysinternals の Handle や GUI 版の Process Explorer の方が向いています。(Microsoft Learn)
開いているファイルを見つけたあと、切断してよいかの判断基準
openfiles には /disconnect があり、共有フォルダ経由でリモートに開かれているファイルやフォルダを、ID・ユーザー名・アクセスモード・ファイル名で切断できます。まず openfiles /query で ID を確認し、その後で対象だけ切るのが基本です。(Microsoft Learn)
openfiles /query /fo list /v
openfiles /disconnect /id 26843578
/disconnect は「共有フォルダ経由で開かれているもの」を切るための機能です。ローカル アプリがそのPCやサーバー上で保持しているファイル ハンドルを閉じる用途には向きません。ユーザー単位やパス単位でも切れますが、誤って広く切断しないためにも、まずは ID 指定が無難です。(Microsoft Learn)
強制的に切断する前に、必ず利用者へ保存確認を取りましょう。Microsoft は SMB の Close-SmbOpenFile について、変更がまだ書き戻されていない状態で閉じるとデータ損失の可能性があると明記しています。openfiles /disconnect も実務上は同じく「強制的に閉じる」操作なので、安易に一括切断しない運用が安全です。(Microsoft Learn)
openfilesが向いていないケースの代替策
openfiles は標準機能で便利ですが、用途によっては別の道具の方が速くて正確です。特に SMB 共有の詳細確認と、ローカル プロセスの特定は、別ツールの方が情報量が多いことがあります。
| やりたいこと | 向いている手段 | 理由 |
|---|---|---|
| SMB共有で、クライアント名・ユーザー名・ロック数まで見たい | Get-SmbOpenFile | Path ClientComputerName ClientUserName Locks などを取得できる |
| SMB共有のファイルを PowerShell で閉じたい | Close-SmbOpenFile | FileId や SessionId 単位で閉じられる |
| ローカルでどのプロセスがファイルを握っているか知りたい | Handle または Process Explorer | プロセスごとの open handle を確認しやすい |
Get-SmbOpenFile は SMB サーバーのクライアント側から開かれているファイル情報を返し、例として Path ShareRelativePath ClientComputerName ClientUserName Locks などを確認できます。反対に、どのプログラムがそのファイルやディレクトリを開いているかを知りたいなら Handle が向いています。Handle は管理者権限が必要で、ハンドルを閉じる機能もありますが、Microsoft はその操作がアプリケーションやシステムの不安定化につながる可能性があると警告しています。まずは特定用途で使うのが安全です。(Microsoft Learn)
調査が終わったら openfiles /local off で戻す
一時的な調査のためにローカル追跡を有効化したなら、終わったあとに無効化しておくと運用がすっきりします。Maintain Objects List を有効にするとシステム速度が低下する可能性があるため、常時オンにする理由がない環境では戻しておく方が無難です。無効化も再起動後に反映されます。(Microsoft Learn)
openfiles /local off
迷ったら、この順番で進めれば大きく外さない
- 共有フォルダのロック確認なら、まず
openfiles /query /fo list /v - ローカル利用も疑うなら、
openfiles /local onを設定して再起動 - どの端末・どのユーザー・ロック数まで見たいなら
Get-SmbOpenFile - どのプロセスが握っているか知りたいなら
HandleまたはProcess Explorer - 調査が終わったら
openfiles /local offと再起動で戻す
この順番なら、openfilesコマンドで開いているファイルを確認するところから、うまく表示されない場合の見直し、必要に応じた代替策、最後の戻し方まで一通りカバーできます。最初の一手はシンプルで、共有フォルダなら openfiles /query、ローカルまで見るなら openfiles /local on と再起動です。(Microsoft Learn)

コメント