2013-06-18 28 views
5

chcę zrobić coś jak bashJak przekazać zawartość pliku jako argument polecenia w systemie Windows cmd?

kill -9 `cat pid.txt` 

w systemie Windows. Próbowałem

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

ale to nie działa, wygląda %mypid% zostaje przypisany po wykonaniu z taskkill.

Jak to zrobić? (Mam zamiar nazwać to polecenie skryptem instalacyjnym NSIS, więc nie chcę tworzyć osobnego pliku .bat).

+1

Platforma Windows brakuje kilku wspólnych mechanizmów na świecie Linux/Unix. Możesz spróbować oddzielić proces: 1) przeczytaj plik pid i 2) przekaż go do 'taskkill' – Seki

Odpowiedz

6

Nie jestem pewien, co zawartość pid.txt są, ale przy założeniu, że jest to po prostu PID sama, można to zrobić:

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

Jeśli używasz, że z linii poleceń, a nie jako część pliku wsadowego, zamień %%x na %x.

Jeśli nie ma tego w pliku pid.txt, edytuj swoje pytanie, aby było bardziej zrozumiałe w tym punkcie.

+0

Dziękuję. 'Pid.txt' to po prostu PID. Ale kiedy próbowałem go uruchomić, Windows właśnie wykonał dla mnie notatnik z 'pid.txt'. –

+0

Znakomita! Nie miałem pojęcia, że ​​pliki wsadowe Windows mogą to zrobić! Dzięki. – codeplumber

1

Poniższy skrypt robi to, czego oczekują, bez zależności od funkcji powłoki:

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