Board logo

标题: 批处理 if 嵌套问题 [打印本页]

作者: msjsp     时间: 2008-12-4 15:13    标题: 批处理 if 嵌套问题

我写了一个编译并运行JAVA的批处理程序(JAVA环境变量已注册),我想实现的效果是:
格式: 批处理 JAVA源文件名
然后开始编译,若失败,用记事本打开让用户修改,若编译成功,则询问用户该程序是否带参数运行(以A/B表示),然后跳入指定段运行,最后退出。
但是为什么在实际运行的时候 CMD提示说    此时不应有goto  ?
应该怎么样写才能实现上述效果呢?请高手指点~~

批处理内容如下:


@echo off
cls
color 0a
title JAVA编译实用工具-汉化版
echo                **********JAVA编译实用工具************
echo.
echo wscript.sleep 2 >%windir%\delay.vbs
echo                          -^>正在编译....%1.java
javac .\%1.java
if errorlevel 1 (
echo                           -^>编译失败!
echo.
echo                    -^>请按任意键修改错误的JAVA源程序!
pause >nul
notepad .\%1.java
goto end
)
if errorlevel 0 (
echo.
echo                          -^>编译成功!
echo.
set /p="本程序是否带参数运行(A/B)?   " <nul
set /p pon=
if %pon%==A goto Para
if %pon%==B goto Nopara
echo                          -^>正在运行...
:Para
echo.
echo -^>创建测试文件...Record.dat
echo >.\Record.dat
echo -^>成功!
echo.
echo                *************输出视图**************
%windir%\delay.vbs
echo.
echo                     ======参数缺少异常======
echo                          -^>输入参数为 Record.dat
%windir%\delay.vbs
echo.
java %1 Record.dat
%windir%\delay.vbs
echo.
goto end
:Nopara
echo                *************输出视图**************
%windir%\delay.vbs
echo.
echo                     ======参数缺少异常======
echo                          -^>输入参数为空
%windir%\delay.vbs
echo.
java %1
if errorlevel 1 (
echo 发生了异常!
goto final
)
%windir%\delay.vbs
echo.
goto end
)
del %windir%\delay.vbs /f /q
:final
echo                                                               CopyRight(c)2008
echo                                                          409 Media Corporation
set /p="                成功完成所有任务,是否进行扫尾处理(Y/N)?" <nul
set /p ans=
if %ans%==Y goto Yes
if %ans%==N goto No
if %ans%==A goto Para
:Yes
del .\Record.dat /f /q
::del .\%1.java /f /q
del .\%1.class /f /q
echo -^>扫尾工作完成,按任意键退出...
goto end
:No
echo                    按任意键退出...
goto end
:end
pause >nul
作者: pooronce     时间: 2008-12-4 16:09
在比较的时候,变量有可能是是空值,那么实际比较时就成了这样:
if ==end goto xxx

这个时候就会提示“此时不应有”了,微软最垃圾的cmd设置,不管什么错误都是此时不应有

比较字串附加个字母或者用引号引起来吧