【问题标题】:Run a batch file from Task Scheduler is not working with a java command从任务计划程序运行批处理文件不使用 java 命令
【发布时间】:2013-10-18 17:42:13
【问题描述】:

从任务计划程序运行批处理文件无法使用 .bat 文件中的 java 命令。如果我手动运行 .bat 文件,它工作得很好。

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

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

echo %CMD%
%CMD%

【问题讨论】:

  • 它可能正在运行,您只是看不到输出。您在哪个用户下运行任务? +1 用于提供 SSCCE。
  • 感谢您的回复。我尝试运行的用户具有管理员访问权限。不确定我是否使用任务计划程序正确安排了它。我已将操作设置为“启动程序”,并在“程序/脚本”部分中指定了上述 .bat 文件的完整路径
  • 我安排了其他简单的 java 程序,java 程序在运行时生成日志,但我根本看不到日志。

标签: windows batch-file scheduled-tasks


【解决方案1】:

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

cd "CURRENT_DIRECTORY"

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

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

在我的 test.bat 文件中,我介绍下一个命令行:

cd c:\windows\system32\mytest

【讨论】:

    【解决方案2】:

    当您在命令行中键入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"
    

    【讨论】:

    • 这仍然没有解决我的问题 - 似乎工作的是以系统用户身份运行(以最高权限集运行)。 (我也尝试过作为 NETWORK SERVICE 运行,但没有成功)
    • 有趣,@Jamesmccormack。你得到什么错误?您使用的命令行是什么?您选择的用户是否具有运行 java.exe 的权限或环境设置?为问题提供更好的答案永远不会太晚。
    • 这行得通,但是我还应该添加用户可能需要根据批处理文件的编写方式将正确的目录添加到“开始”字段。
    【解决方案3】:

    一位同事发现他的某些东西不能正常工作,而我已经在我的系统上验证了它不能正常工作的情况如下:

    初始设置整个任务时,您必须首先使用单选按钮“仅在用户登录时运行”。它会要求您输入密码以进行更改。

    现在运行任务。

    验证批次应该做的任何事情都发生了。

    然后更改为单选按钮 BACK TO '无论用户是否登录都运行。"

    这为我们俩解决了一个我们已经单独工作了几个小时的问题。

    旁注:在我们的每个案例中,这两个问题都试图引出第 3 方 FTP 应用程序(分别为 WinSCP 和 WinFTP)。常规的“内部”批处理/任务没有问题。

    【讨论】:

      【解决方案4】:

      我从批处理文件所在文件夹的“属性”中的“安全”选项卡中向用户“所有人”授予了完全权限。它开始工作了。

      【讨论】:

        【解决方案5】:

        所有其他方法都不适合我,我遵循了这个指南: http://richardstk.com/2012/06/15/scheduled-task-to-run-a-batch-file/#comment-6873

        为了让批处理文件运行,我必须将“程序\脚本”框设置为只包含脚本的名称(即 script.bat),并在“开始于(可选)”框

        【讨论】:

          【解决方案6】:

          在批处理文件中提供 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)

          在任务调度程序的 Actions 选项卡中,给出批处理文件的路径,即 C:\temp\app1.bat 此外,请注意任务计划程序的“条件”选项卡 - 确保取消选中“仅当计算机使用交流电源时才启动任务”

          【讨论】:

            【解决方案7】:

            对我有用的是作为“用户”(计算机名\用户)运行任务。一旦我这样做了,并检查了“以最高权限运行”,它就可以顺利运行了。

            【讨论】:

              【解决方案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\”

              【讨论】:

                猜你喜欢
                • 2023-03-23
                • 1970-01-01
                • 2014-03-15
                • 1970-01-01
                • 2013-03-01
                • 2019-04-06
                • 1970-01-01
                • 2014-12-12
                • 1970-01-01
                相关资源
                最近更新 更多