运行批处理脚本以终止进程的问题

时间:2011-03-13 00:06:32

标签: batch-file process awk ksh kill

我在命令行上使用以下脚本来杀死假设的记事本进程(在Windows XP中使用KornShell(ksh),如果这很重要):

  

kill $(tasklist | grep -i notepad.exe | awk'{print 2}')

现在我拿这行,把它放到一个批处理文件c:\ temp \ testkill.bat中,以为我也应该能够通过运行批处理文件来终止进程。但是,当我运行批处理文件时,我得到以下关于不平衡括号的awk错误:

  

C:/温度> ./testkill.bat

     

C:\ Temp> kill $(tasklist | grep -i notepad.exe | awk'{print $ 2}')
  awk:unbalanced()上下文是:
  >>> {print $ 2})<<<
  C:/温度>

所以当我通过批处理文件运行这个脚本时,为什么我收到关于不平衡括号的错误,我感到困惑,但是当我直接从命令行运行命令时没有问题?

(我不一定与这种杀死进程的方式联系在一起 - 我还想知道为什么我在命令行上写下以下内容:

  

任务列表| grep -i notepad.exe | awk'{print $ 2}'|杀

来自tasklist / grep / awk调用的进程ID似乎没有正确地通过管道传输来杀死。

1 个答案:

答案 0 :(得分:2)

如果您有Korn shell,为什么要制作批处理文件?写一个shell脚本 - 这可能会帮到你很多。

我可以回答你的最后一个问题 - kill不会将PID从标准输入中删除,而是在命令行上执行。您可以使用xargs使其正常工作:

tasklist | grep -i notepad.exe | awk '{print $2}' | xargs kill