Как разблокировать файлы, используя handle.exe и имя процесса?

8

Я попробовал Unlocker 1.9.1, но он не работает правильно для меня в Windows7 (нормально работал в Windows XP), а также я попытался LockHunter 2.0.2.103 x64 и сообщил об ошибке, но .... LockHunter фактически разблокирует файл из графического интерфейса, но не из командной строки.

Поэтому я хочу использовать handle.exe от SysInternals, чтобы разблокировать один файл "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 64bit
  • Microsoft Windows [Версия 6.1.7601]
Радек
источник

Ответы:

8

Вы можете использовать handle.exeодин раз для отображения 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не работает для меня в этом случае.
Радек
Получил это работает. Хитрость в том, что команда для запуска под runas на самом деле - cmd.exe, а аргумент для cmd - ваш код. Я делал это без cmd.
Радек
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
Можете ли вы рассказать об этом подробнее и объяснить, как это улучшает принятый ответ (четыре с половиной года) ?
бертиб
Я вижу, что ваши команды отличаются от принятого ответа, поэтому это законный ответ. Однако, как указал bertieb, ваш ответ нуждается в объяснении того, что будут делать ваши команды и как они решают вопрос OP. Спасибо за участие в SuperUser.
Я говорю Восстановить Монику
0

Выполнение из контекстного меню без bat-файла. 1) Поместите файл handle64.exe в C: \ Windows. 2) Создать и выполнить рег скрипт

    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"
Garric
источник