Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file CMD文件不会在else块中运行我的命令_Batch File_Cmd - Fatal编程技术网

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

Batch file CMD文件不会在else块中运行我的命令,batch-file,cmd,Batch File,Cmd,我正在编写一个CMD脚本来执行一个Java程序。该程序至少需要一个参数,因此我创建了一个if-else块来检查参数one%1是否为空。当我在不提供参数1的情况下运行脚本时,我得到了预期的,您必须提供一个参数才能运行。但当我提供参数时,程序不会执行。另外,如果我没有设置@echo off,当我提供正确的参数时,整个脚本将在窗口中打印为文本 以下是完整的脚本: set APP_HOME=C:\Temp\Hammer rem Set APP_HOME to the place wher

我正在编写一个CMD脚本来执行一个Java程序。该程序至少需要一个参数,因此我创建了一个if-else块来检查参数one
%1
是否为空。当我在不提供参数1的情况下运行脚本时,我得到了预期的
,您必须提供一个参数才能运行
。但当我提供参数时,程序不会执行。另外,如果我没有设置
@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
程序执行正常。我一直在看示例脚本和交叉引用这个站点,我所做的似乎是有效的。我有语法错误吗

更新:

    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
    )
我是这样运行脚本的

    cd C:\Temp\Hammer
    bin\ProgramScript.cmd argument1
更新2:

    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
    )
有人指出,当他们运行此脚本时,会收到一条错误消息,说明
Java
未被识别为内部或外部命令(当Java未设置在其路径上时,这是预期的消息),但他们指出,这意味着脚本实际上进入了else块。我接着指出,

使用有效参数运行脚本后,它会在命令提示符下以文本形式打印整个脚本。然后,我可以
标记else语句(已打印)内部的行,复制它,粘贴它,然后它可以正常运行程序。因此Java命令似乎是有效的。但是你要指出的是,脚本显然进入了else块中……这里仍然有一些问题,而且它似乎不是程序

注意:

    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
    )

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

您缺少了她在脚本顶部砰的一声

#!/bin/bash

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

我会尝试逃逸每个
带有插入符号
^
,因此:

java -cp %APP_HOME%\lib\jython.jar^;%APP_HOME%\lib\hammer.jar^;%CLASSPATH% bridenstine.hammer.main.Main %1 %2
(但我承认这是在抓救命稻草……

我建议使用

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个或多个空格

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


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

问题是关于在windows上使用cmd执行批处理脚本,bash不在其中。因为您的答案没有用处,因为它显然是错误的。尽管如此,我们都会时不时地犯错误或误读问题。尝试的荣誉——比其他七亿人贡献的还要多。(但你最好自己删除这个回复)有些人会提到一个缺陷,让你有机会对此采取行动。我要说的是,你应该删除这个答案,否则其他人也可能会否决你的答案。很抱歉,这没有任何效果。当我尝试在我的计算机上运行你的脚本时,使用一个参数,我得到了
“java”不可识别等等…
。这可能意味着我没有安装Java,但关键是脚本确实尝试执行
Java
行。剧本没问题吧?很有趣。你说得很对。但是,在使用有效参数运行脚本后,它会在命令提示符下以文本形式打印整个脚本。然后,我可以
标记else语句内部的行,复制它,粘贴它,它就可以正常运行程序了。因此,该命令似乎是有效的。但是你很好地指出,脚本显然进入了else块…这里仍然有一些问题,似乎不是程序。这是这里提供的唯一对我有效的解决方案。这个答案非常有用和简洁。