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


8

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

そこで、SysInternalsのhandle.exeを使用して、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 7 64ビット
  • Microsoft Windows [バージョン6.1.7601]

回答:


8

handle.exe1回使用して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

動かせない。あなたのコードは私('handle.exe was unexpected at this time.in前に欠けていると思いますが('handle.exe was unexpected at this time.、それから%%J contains : `それはhandle.exeの有効な引数ではありません
Radek

ええ、正確にコマンドを取得するのに苦労したのを覚えていますが、頭の上から何をしたのか思い出せません。正しい構文で回答を更新できるように、もう一度バッチファイルにアクセスしようとしています。
スティーブンジェニングス

@Radek自分が使用した実際のコードで回答を更新しました。ルックスは、私が得たように%%Iして%%J混ぜ、そして我々は、区切り文字としてコロンが必要です。これを試してみて、どうなるか見てください。
スティーブンジェニングス

cmdが管理者として起動した場合は、バッチファイルとコマンドラインバージョンの両方で問題なく動作します。私が一晩の自動化テストの一部としてそれをどのように機能させることができるかについてのアイデアは?runasこの場合、私にはうまくいきません。
Radek

うまくいきました。コツは、runasで実行するコマンドが実際にはcmd.exeであり、cmdの引数がコードであることです。私はcmdなしでそれをやっていました。
Radek、2012年

0

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                                                                    

実行:

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                                                       

1
これをさらに詳しく説明し、(4年半前の)受け入れられた回答がどのように改善されるか説明できますか?
bertieb 2017

あなたのコマンドは受け入れられた答えとは異なるので、それは正当な答えです。ただし、bertiebが示したように、あなたの回答に、コマンドが何をするのか、およびOPの質問にどのように対処するのかについての説明が必要です。SuperUserに貢献していただきありがとうございます。
私はモニカを

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"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.