2013-06-18 5 views
5

voglio fare qualcosa di simile bashCome passare il contenuto del file come argomento del comando in cmd di Windows?

kill -9 `cat pid.txt` 

in Windows. Ho provato

set /p mypid= < pid.txt && taskkill /f /pid %mypid% 

ma non funziona, sembra che %mypid% diventa assegnato dopo l'esecuzione di taskkill.

Come fare? (Vado a chiamare questo comando dallo script di installazione NSIS, quindi non voglio creare un file separato .bat).

+1

La piattaforma Windows priva di diversi meccanismi comuni sul mondo Linux/Unix. Si potrebbe provare a frammentare il processo: 1) leggere il file pid e 2) passarlo a 'taskkill' – Seki

risposta

6

io non sono sicuro di quello che il contenuto di pid.txt sono, ma assumendo è solo il PID di per sé, si potrebbe fare questo:

for /f %%x in (pid.txt) do taskkill /f /pid %%x 

se si sta eseguendo che dalla riga di comando, e non come parte di un file batch, sostituire lo %%x con %x.

Se questo non è ciò che è in pid.txt, si prega di modificare la domanda per essere più chiara su quel punto.

+0

Grazie. Il 'pid.txt' è solo PID stesso. Ma quando ho provato a eseguirlo, Windows ha appena eseguito il blocco note con 'pid.txt' per me. –

+0

Eccezionale! Non avevo idea che i file batch di Windows potessero farlo! Grazie. – codeplumber

1

Il seguente script sta facendo quello che ci si aspetta, senza dipendere da una funzione di svuotamento:

OutFile "kill.exe" 

Var pid 
!define filename "pid.txt" 

Section 

    ClearErrors 
    FileOpen $0 "${filename}" r 
    IfErrors 0 readok 
    DetailPrint "Error to open ${filename}" 
    goto done 
    readok: 
    FileRead $0 $pid 
    DetailPrint "pid found=$pid" 
    FileClose $0 

    ExecWait 'taskkill /F /PID $pid' 
    done: 

SectionEnd