taskkill:不同的行为控制台与脚本

时间:2012-05-11 12:14:32

标签: windows batch-file taskkill

我正在为java应用程序编写一个小的关闭脚本。我得到了pid,然后尝试执行以下操作:

taskkill /t /pid !pid!

如果我从控制台运行命令(手动输入),一切正常。我看到在java控制台中执行了关闭例程,之后java控制台就消失了。我有时会在几秒钟后看到窗口“进程没有响应。立即杀死或等待”对话框,但是当java程序停止时对话框会自动关闭。

如果我使用相同的命令执行bat文件,我会立即看到“Process not responding ...”对话框。我看到控制台输出:“进程已成功关闭”但java控制台仍处于打开状态。它甚至没有启动关机顺序。

编辑:完整的批处理脚本

@echo off
setlocal enabledelayedexpansion
if exist .\lock (
set /p pid=< lock
taskkill /t /pid !pid!
) 

1 个答案:

答案 0 :(得分:1)

在命令行!pid!上通常不会展开,因为延迟扩展已禁用,只能由注册表ey或cmd /V:on启用。

因此,命令行!pid!将保持不变,在批处理中,它将扩展为pid变量的内容。

修改 当您在cmd行上显示正确的命令时,批处理中的命令必定是错误的。

您应该在set / p line

之后添加一个echo
Echo pid="!pid!"