web-dev-qa-db-ja.com

handle.exeとプロセス名を使用してファイルのロックを解除する方法は?

Unlocker 1.9.1を試しましたが、Windows7では正しく機能しません(Windows XPでは問題なく動作しました)。また、LockHunter 2.0.2.103 x64を試し、バグを報告しましたが.... LockHunterは実際にはGUIからファイルのロックを解除しますが、コマンドラインからではありません。

したがって、handle.exeを SysInternals で使用して、1つのファイル「TestPro.log」のロックを解除したいと思います。それが役に立てば、私は絶対パスを知っています。実行することでファイルをロックしたすべてのプロセスを一覧表示できます

C:\Windows\system32>c:\edutester\progs\handle testpro.log
Java.exe           pid: 2120   type: File           338: C:\Users\Public\TestPro
\TestPro Automation Framework\Logs\TestPro.log
Java.exe           pid: 1004   type: File           934: C:\Users\Public\TestPro
\TestPro Automation Framework\Logs\TestPro.log

コマンドラインから自動的に上記の情報を使用してファイルのロックを解除する方法を知る必要があること。ユーザーの介入はできません。

  • Windows 764ビット
  • Microsoft Windows [バージョン6.1.7601]
8
Radek

handle.exeを1回使用してPIDとハンドルをリストし、次に複数回使用してそれぞれを閉じることができます。

for /fコマンドを使用して、最初のコマンドの結果をループします。テストに便利なWindowsマシンはありませんが、次のようになります。

バッチファイルから:

for /F "tokens=3,6 delims=: " %%I IN ('handle.exe -accepteula TestPro.log') DO handle.exe -c %%J -y -p %%I

コマンドラインから:

for /F "tokens=3,6 delims=: " %I IN ('handle.exe -accepteula TestPro.log') DO handle.exe -c %J -y -p %I
8

https://technet.Microsoft.com/en-us/sysinternals/handle.aspx

テストと表示:

for /f "tokens=3,6 skip=5 delims=: " %i in ('handle.exe -accepteula notepad.exe') do @echo %i %j                                                                    

EXECUTE:

for /f "tokens=3,6 skip=5 delims=: " %i in ('handle.exe -accepteula notepad.exe') do handle.exe -c %j -y -p %i  

実行とタスク:

for /f "tokens=3,6 skip=5 delims=: " %i in ('handle.exe -accepteula notepad.exe') do handle.exe -c %j -y -p %i & taskkill /t /f /PID %i                                                       
0

Batファイルなしでコンテキストメニューから実行。 1)C:\ Windowsにhandle64.exeファイルを置きます。 2)regスクリプトを作成して実行します

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\Shell\WhatBlockFile]
    "Icon"="C:\\ico\\Buttons\\Annotate_Help.ico"
    "MUIVerb"="Что блокирует?"
    "Position"="Top"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\Shell\WhatBlockFile\command]
    @="C:\\Windows\\system32\\Cmd.exe /c C:\\Windows\\handle64.exe -u \"%1\" & pause"
0
Garric