【问题标题】:Start a Java application using Bat file if not already started如果尚未启动,则使用 Bat 文件启动 Java 应用程序
【发布时间】:2015-12-18 04:54:31
【问题描述】:

我想使用 bat 文件检查 Java 程序是否已在运行。如果它没有运行,则使用start javaw 启动它。

我已经尝试过WMIC,但到目前为止我只是成功获得了 PID。

WMIC process where "CommandLine like '%MyServer.jar%' and Name like '%javaw%'" get ProcessId

但是如何在bat文件中写一个if else条件来启动呢?

我尝试使用任务列表并找到

tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /N "myapp.exe">NUL
if "%ERRORLEVEL%"=="0" echo Programm is running

但对于所有 Java 应用程序,myapp.exe 将是java.exe

请帮忙...

P.S:有一些选项可以通过 Java 程序本身来完成,但我的具体情况需要 bat 文件解决方案。

【问题讨论】:

    标签: java windows batch-file wmic tasklist


    【解决方案1】:

    您可以使用 jcmd.exe 查看所有运行的 java 进程的主类。批处理文件的 IF-ELSE 语法在以下线程中进行了解释

    How to use if - else structure in a batch file?

    jcmd | find /I /N "sun.tools.jconsole.JConsole"
    
    
    IF "%ERRORLEVEL%" GTR "0" (
        jconsole.exe
    )
    
    IF %ERRORLEVEL% EQU 0 (
        echo Programm is running 
    ) 
    

    此链接将有助于 IF 构造 - http://ss64.com/nt/if.html

    【讨论】:

    • 谢谢。但是在那之后我该怎么办。我如何在 IF 中检查它。我已经使用 jps -m | 获得了名称寻找。 jps -m | find /i "MYAPP" 6356 MYAPP localhost 1899 C:\TRAMM4.0\TRAMM\ true 现在我该怎么写 IF else?如何使用变量?我要检查什么条件?抱歉,我对这种规模的 CMD 命令/脚本不太熟悉。
    • 看看上面添加的例子是否有帮助。上面的程序正在检查 JConsole 是否正在运行(主类:sun.tools.jconsole.JConsole)——如果它没有运行,它就会启动它。更多信息可以在这里找到ss64.com/nt/if.html
    • 感觉jcmd会比jps简单。输出看起来像:` $ jcmd 33004 sun.tools.jcmd.JCmd`
    • 谢谢阿克谢。这为我解决了它。但是当我将它用于我的应用程序时,会发生这种情况, C:\FOLDER>TITLE My Server C:\FOLDER>jcmd |查找 /I /N "MyServer" C:\FOLDER>IF "1" GTR "0" ( cd bin set filename= C:FOLDER\ start javaw -classpath ../lib/*;MyServer.jar .cig.MyAPP. Myserver.MyServer localhost 1899 C:FOLDER\true) C:\FOLDER\bin>IF 0 EQU 0 (echo Programm is running) Programm is running C:\FOLDER\bin>pause 按任意键继续。 . .如您所见,整个内容都打印在控制台上。我怎样才能避免这种情况并只打印“程序正在运行”?
    • 你需要关闭回声“@echo off”
    猜你喜欢
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多