CMD文件不会在else块中运行我的命令

时间:2014-07-14 13:54:30

标签: batch-file cmd

我正在编写一个CMD脚本来执行Java程序。该程序至少需要一个参数,所以我创建了一个if else块来检查参数%1是否为空。当我在不提供参数的情况下运行脚本时,我得到了预期的you must provide an argument to run。但是当我提供参数时,程序不会执行。另外,如果我没有设置@echo off,那么当我提供正确的参数时,整个脚本会在窗口中打印出文本。

以下是完整的脚本:

    set APP_HOME=C:\Temp\Hammer
    rem Set APP_HOME to the place where you installed Hammer

    if ["%1"] == [""] (

        echo you must provide a python script to run
    ) else (

    java -cp %APP_HOME%\lib\jython.jar;%APP_HOME%\lib\hammer.jar;%CLASSPATH% bridenstine.hammer.main.Main %1 %2
    )

我认为这是脚本的一个问题,而不是程序本身的问题,因为当我在没有脚本的情况下自行运行else块中的行时,

    java -cp C:\Temp\Hammer\lib\jython.jar;C:\Temp\Hammer\lib\hammer.jar;%CLASSPATH% bridenstine.hammer.main.Main argument1

程序正常执行。我一直在查看示例脚本并交叉引用此站点for CMD files,我所拥有的似乎是有效的。我有语法错误吗?

更新

我正在运行这样的脚本,

    cd C:\Temp\Hammer
    bin\ProgramScript.cmd argument1

更新2:

有人指出,当他们运行此脚本时,会收到一条错误消息,指出Java未被识别为内部或外部命令(当他们的PATH上没有设置Java时的预期消息)但是他们做得很好指出这意味着脚本实际上进入了else块。然后我指出了以下内容,

使用有效参数运行脚本后,它会在命令提示符下将整个脚本打印为文本。然后我能够从else语句(已打印)中mark行,复制它,粘贴它,并且它运行程序正常。所以 Java 命令似乎是有效的。但是你明确指出脚本显然已进入了else块...这里仍然存在问题,而且它似乎不是程序。

注意:

如果相关我正在使用Windows 8.1并且我使用的是标准命令提示符,而不是具有管理权限的命令提示符(无论使用具有管理权限的命令提示符,结果都保持不变)。

3 个答案:

答案 0 :(得分:1)

我建议使用

set APP_HOME=C:\Temp\Hammer
rem Set APP_HOME to the place where you installed Hammer.

if "%~1"=="" (
   echo You must provide a Python script to run.
   pause
) else (
   java.exe -cp "%APP_HOME%\lib\jython.jar;%APP_HOME%\lib\hammer.jar;%CLASSPATH%" bridenstine.hammer.main.Main %*
)

如果参数字符串包含像 CLASSPATH 这样的环境变量(可能包含一个或多个空格的字符串值),最好将参数字符串括在双引号中。

%*由作为参数传递给批处理文件的所有参数扩展,即%1%2 ...

最好始终指定具有完整路径和文件扩展名的 java 等应用程序,否则Windows必须搜索文件扩展名的文件,如环境变量 PATHEXT中所定义在当前工作目录中以及在环境变量 PATH 中定义的所有目录。如果应用程序的程序文件目录不同,至少文件扩展名应该在批处理文件中。

答案 1 :(得分:0)

我只能提出一个建议;我没试过这个。

我会尝试使用插入符号;转义每个^

java -cp %APP_HOME%\lib\jython.jar^;%APP_HOME%\lib\hammer.jar^;%CLASSPATH% bridenstine.hammer.main.Main %1 %2

(但我承认它抓着稻草......)

答案 2 :(得分:-2)

你在剧本的顶部想念你 -

#!/bin/bash