¿Cómo desbloquear archivos usando handle.exe y el nombre del proceso?

8

Probé Unlocker 1.9.1 pero no funciona correctamente para mí en Windows7 (funcionó bien en Windows XP) y también probé LockHunter 2.0.2.103 x64 e informé un error, pero ... LockHunter realmente desbloquea el archivo de la GUI pero No desde la línea de comando.

Así que quiero usar handle.exe por SysInternals para desbloquear un archivo "TestPro.log". Conozco el camino absoluto si ayuda. Puedo enumerar y todos los procesos que bloquearon el archivo ejecutando

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

Lo que necesito saber es cómo desbloquear el archivo usando la información anterior de la línea de comandos automáticamente . No es posible la intervención del usuario.

  • Windows 7 de 64 bits
  • Microsoft Windows [Versión 6.1.7601]
Radek
fuente

Respuestas:

8

Puede usar handle.exeuna vez para enumerar los PID y los controladores, y luego nuevamente varias veces para cerrar cada uno.

Use el for /fcomando para recorrer el resultado del primer comando. No tengo una máquina Windows a la mano para probar, pero debería verse así:

De un archivo por lotes:

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

Desde la línea de comandos:

for /F "tokens=3,6 delims=: " %I IN ('handle.exe -accepteula TestPro.log') DO handle.exe -c %J -y -p %I
Stephen Jennings
fuente
No puedo hacer que funcione. Su código me da ('handle.exe was unexpected at this time.Creo que falta inantes ('handle.exe was unexpected at this time.Pero entonces %%J contains : `entonces no es un argumento válido para handle.exe
Radek
Sí, recuerdo haber tenido problemas para obtener el comando exactamente correcto, pero no puedo recordar lo que hice fuera de mi cabeza. Estoy tratando de obtener acceso a mi archivo por lotes nuevamente para poder actualizar mi respuesta con la sintaxis correcta.
Stephen Jennings
@Radek Actualicé mi respuesta con el código real que usé. Parece que consiguieron %%Iy %%Jmezclados, y necesitamos los dos puntos como un delimitador. Pruebe esto y vea cómo va.
Stephen Jennings
Funciona bien (versiones de línea de comandos y archivos por lotes) si cmd comenzó como administrador. ¿Alguna idea de cómo puedo hacer que funcione como parte de mis pruebas de automatización durante la noche? runasNo funciona para mí en este caso.
Radek
Lo tengo funcionando. El truco es que el comando para ejecutar bajo runas es, de hecho, cmd.exe y el argumento para cmd es su código. Lo estaba haciendo sin cmd.
Radek
0

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

PRUEBA Y PANTALLA:

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

EJECUTAR:

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

EJECUTAR Y TASKKILL:

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                                                       
Alexandre DEFRANCE
fuente
1
¿Puede ampliar esto y explicar cómo mejora la respuesta aceptada (de cuatro años y medio) ?
bertieb
Veo que sus comandos son diferentes a la respuesta aceptada, por lo que es una respuesta legítima. Sin embargo, como indicó bertieb, su respuesta necesita una explicación de lo que harán sus comandos y cómo abordan la pregunta de los OP. Gracias por contribuir a SuperUser.
Digo reinstalar a Mónica
0

Ejecución desde el menú contextual sin un archivo bat. 1) Coloque el archivo handle64.exe en C: \ Windows. 2) Crear y ejecutar reg script

    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
fuente