2013-08-05 12 views
5

Ho uno script shell Unix che ucciderà qualsiasi processo che accede una cartella:batch Windows equivalente di "fuser -k <folder>"

fuser -k ..\logs\* 

C'è un Windows script batch equivalente a questo? Sono a conoscenza di TASKKILL ma non sono sicuro che farà ciò di cui ho bisogno. Qualcuno sa se questo è possibile con la shell di Windows?

risposta

5

Non con strumenti integrati (non c'è nulla che possa enumerare gli handle), ma è possibile utilizzare Sysinternals Handle tool per ottenere un elenco dei PID che hanno maniglie aperte su un file. È quindi possibile analizzare l'output con FOR /F e utilizzare TASKKILL per terminare i processi.

Esempio:

for /f "skip=4 tokens=3" %i in ('handle ..\logs\') do taskkill /pid %i 

skip=4 salta le informazioni sul copyright nell'uscita maniglia e tokens=3 individua il PID di ciascuna linea di uscita. Il resto è auto-esplicativo.

+0

Grazie per il commento. Deve essere fatto interamente nella shell di Windows senza altri strumenti, poiché ho bisogno di distribuirlo a molte macchine su cui non posso installare le cose. Non pensavo che fosse possibile con una semplice shell, quindi dovrò convincere la mia squadra ad installare qualcosa di simile sulle macchine. – Matt

+1

@Matt: nota che Handle (e qualsiasi altro strumento che può farlo) deve essere eseguito con privilegi amministrativi. – Jon

0

Ho trovato un fuser per Windows. Controlla this link su Sourceforge

Problemi correlati