Як розблокувати файли за допомогою handle.exe та імені процесу?


8

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

Тому я хочу використовувати 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команду для перегляду результатів першої команди. У мене не підходить машина для перевірки, але це має виглядати приблизно так:

З пакетного файлу:

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у цьому випадку для мене не працює.
Радек

Зрозуміло. Хитрість полягає в тому, що команда для запуску під рунами насправді 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

Я бачу, що ваші команди відрізняються від прийнятої відповіді, тому це є законною відповіддю. Однак, як зазначав bertieb, у Вашій відповіді потрібне пояснення, що будуть виконувати Ваші команди та як вони вирішують питання ОП. Дякуємо за внесок у 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"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.