1

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

taskkill /t /pid !pid!

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

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

编辑:完整的批处理脚本

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

1 回答 1

1

在命令行!pid!上通常不会展开,因为延迟展开被禁用并且只能由注册表 ey 或使用cmd /V:on.

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

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

您应该在 set/p 行之后添加一个回声

Echo pid="!pid!"
于 2012-05-11T12:45:49.223 回答