任务计划程序无法使用java命令运行批处理文件

6

从任务计划程序运行批处理文件时,其中包含Java命令的.bat文件无法正常工作。如果我手动运行.bat文件,则可以正常工作。

这是我尝试安排的简单.bat文件:

set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_24;
set CMD= "%JAVA_HOME%\bin\java" -version

echo %CMD%
%CMD%

很有可能它正在运行,只是你看不到输出。你在哪个用户下运行任务?提供一个SSCCE加1分。 - ixe013
感谢您的回复。我正在尝试运行具有管理员访问权限的用户。不确定是否正确使用任务计划程序进行调度。我已经设置了“启动程序”操作,并在“程序/脚本”部分指定了上述.bat文件的完整路径。 - user2371505
我有其他简单的Java程序计划,并且Java程序在运行时生成日志,但我根本看不到日志。 - user2371505
8个回答

11
当你在命令行中键入 batchfile.bat 时,你告诉 cmd.exe 读取文件并执行其中的每一行。当你在资源管理器中双击批处理文件时,它会调用注册表中的文件关联信息,并为你调用 cmd.exe
任务管理器则不能这样操作。
因此,为了让你的任务正常工作,请按照以下方式安排计划(根据记忆,现在不在Windows环境中):
cmd /c "c:\full\path\to\your\batchfile.bat"

为了增加健壮性,您可以确保批处理文件从已知目录运行,例如它所在的目录,在顶部添加以下内容:

为了确保更稳定可靠,你可以在批处理文件的开头加入以下代码,以使其从已知目录中运行:
pushd %~dp0
REM .... The original batch file goes here ....
popd

最后,您可以通过在cmd之后添加/d来禁用CMD自动运行条目,如下所示:

cmd /d /c "c:\full\path\to\your\batchfile.bat"

这对我仍然没有解决问题 - 看起来有效的方法是使用SYSTEM用户运行(设置为最高特权运行)。 (我还尝试以NETWORK SERVICE身份运行,但那也不起作用) - James McCormack
有趣的,@Jamesmccormack。你遇到了什么错误?你使用了什么命令行?你选择的用户是否具有运行java.exe的权限或环境设置?提供更好的答案回答问题永远不会太晚。 - ixe013
2
这个方法可行,但是根据批处理文件的编写方式,用户可能还需要将正确的目录添加到“启动位置”字段中。 - techdude

8
如果ixe013的建议不起作用,请前往


'Actions'
'Edit' the task
'Start in (optional):'  Put the path to the directory  where the script is

因此,对于最后一个问题,如果您有'C:\Users\Desktop\script.py',只需在“起始位置(可选):”字段中放入'C:\Users\Desktop\'。


3

对我有用的方法是将任务运行为“用户”(计算机名称\Users)。一旦这样做,并且勾选了“使用最高权限运行”,它就可以顺利运行。


1
在批处理文件中提供java.exe的完整路径,这样问题就得到了解决。我在记事本中输入了以下行:
"C:\Program Files\Java\jdk1.8.0_40\bin\java.exe" -jar "C:\Users\usernameXXXX\Documents\NetBeansProjects\JavaApplication5\dist\JavaApplication5.jar"

将此保存为app1.bat文件(C:\ temp \ app1.bat)
在任务计划程序的操作选项卡中,提供批处理文件的路径,即C:\ temp \ app1.bat 此外,在任务计划程序的条件选项卡中要小心-确保取消选中“仅在计算机接通交流电时启动任务”

0
一个同事在处理某个问题时发现了一些东西,而我也在我的系统上验证了这些内容:
当整个任务最初设置时,你必须最初使用单选按钮“仅当用户已登录时运行”。它会要求你输入更改密码。
现在运行任务。
验证无论批处理应该做什么,都已经发生了。
然后将单选按钮更改回“无论用户是否登录”。
这解决了我们俩个人分别为此工作了数小时的问题。
附注:两个问题也在尝试调用第三方FTP应用程序(WinSCP和WinFTP),在我们各自的情况下。常规的“内部”批处理/任务没有任何问题。

0

0
我在批处理文件所在的文件夹属性的安全选项卡中授予了用户“Everyone”完全权限,然后它开始工作了。

0

我曾经遇到过同样的问题,为了解决它,我将下一个命令行放入批处理文件中:

cd "CURRENT_DIRECTORY"

其中CURRENT_DIRECTORY是批处理文件所在的目录。

例如: 假设我的批处理文件名为test.bat,位于c:\windows\system32\mytest

在我的test.bat文件中,我输入了下一个命令行:

cd c:\windows\system32\mytest


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接