如果我手动执行,批处理文件中的以下代码将正确退出。但是,如果我使用调度程序应用程序运行批处理文件,它不会终止在Windows Server 2008计算机上。应用程序正在退出,但cmd不是。
非常感谢任何帮助。
ncdu
答案 0 :(得分:0)
一个错误是使用EXIT;
而不只是exit
。
虽然在到达批处理文件的末尾时,命令进程会自动终止,因此通常不需要在批处理文件末尾exit
。例外是从另一个批处理文件调用批处理文件,在某些情况下,应立即退出执行两个批处理文件的整个命令进程,而不返回父批处理文件。
没有参数/B
的命令 EXIT 总是会导致退出命令进程,因此在命令提示符窗口中调试批处理文件也很困难,因为只有exit
结果在关闭命令提示符窗口时也是如此。因此,一般情况下,在需要时使用exit /B
总是更好。
但很可能java.exe
不会退出,因此批处理不会结束。
有几个信息缺失。
为什么在仅运行带有多个参数的java.exe
时完全使用批处理文件?
为什么不使用该命令行创建计划任务?
java.exe
运行此命令行作为计划任务的环境是什么?
计划任务是否配置为使用系统帐户或用户帐户运行?
为系统帐户定义的环境变量肯定与您的用户帐户的环境变量不同。 Java通常依赖于几个环境变量,除了使用适当的Java command line options在命令行上指定使用环境变量预定义的数据。
为什么不使用javaw.exe
(没有控制台窗口)代替java.exe
(带控制台窗口)导致根本不打开控制台窗口?
将应用程序(或批处理文件)作为计划任务运行,使其独立于环境变量PATHEXT
和PATH
,通过指定每个应用程序以完整路径运行并且文件扩展名用双引号括起来。
仅使用java
要求Windows命令处理器根据为PATH
文件定义的java.*
在PATHEXT
文件中搜索当前目录和下一个目录,然后在cmd.exe
文件中列出文件扩展名Run as administrator
1}}为当前使用的帐户定义。
双击批处理文件导致批处理文件由%SystemRoot%\System32
执行,批处理文件的目录作为当前目录。但是,使用myAPP.jar
或计划任务运行批处理文件会导致以cmd /?
作为当前目录执行批处理文件。
因此,在命令行中仅使用myAPP.jar
而不使用此Java包的完整路径是个好主意,并且如果是空格或最后一个段落上列出的其他字符,请用双引号括起文件名。通过在命令提示符窗口中运行来帮助页面输出%SystemRoot%\System32
在文件路径中?
我想,这不是一个好主意。我很确定在作为计划任务运行批处理文件的当前目录sticks[i] = new Chopstick(n);
目录中找不到sticks[i] = new Chopstick(i);
。
许多用户常常认为,将批处理文件作为计划任务运行的环境(当前目录,环境变量)与双击其用户环境中的批处理文件相同。