2013-06-18 9 views
5

私は、WindowsのbashのWindowsのcmdでファイルの内容をコマンド引数として渡す方法はありますか?

kill -9 `cat pid.txt` 

のような何かをしたいです。私は

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

を試みたが、それは動作しません、%mypid%taskkillの実行後に割り当てられた状態になるように見えます。

どうすればよいですか? (私はNSISのインストールスクリプトからこのコマンドを呼び出すつもりですので、別の.batファイルを作成したくありません)。

+1

Windowsプラットフォームは、Linux/Unixの世界で共通のいくつかのメカニズムを欠いています。あなたはプロセスを断片化しようとする可能性があります:1)pidファイルを読んで、2) 'taskkill'に渡します。 – Seki

答えて

6

私はpid.txtの内容が何であるかわからないんだけど、それはそれ自体でちょうどPIDだと仮定すると、あなたがこれを行うこともできます、あなたがそのコマンドラインから実行している場合

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

をバッチファイルの一部ではなく、%%x%xに置き換えてください。

これがpid.txtにない場合は、その点を明確にするために質問を編集してください。

+0

ありがとう。 'pid.txt'は単なるPIDです。しかし、私はそれを実行しようとすると、Windowsは 'pid.txt'でノートパッドを実行しました。 –

+0

優秀!私は、Windowsのバッチファイルがそれを行うことができるとは思いませんでした!ありがとう。 – codeplumber

1

次のスクリプトは、シェルの機能に依存することなく、あなたが期待するものをやっている:

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 
関連する問題