Batch file CMD文件不会在else块中运行我的命令
我正在编写一个CMD脚本来执行一个Java程序。该程序至少需要一个参数,因此我创建了一个if-else块来检查参数oneBatch 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
%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块…这里仍然有一些问题,似乎不是程序。这是这里提供的唯一对我有效的解决方案。这个答案非常有用和简洁。