我真的不明白为什么这会拒绝工作。
@ECHO OFF
SET CURRDIR=%CD%
if [%1%]==[1] GOTO ONE
if [%1%]==[2] GOTO TWO
if [%1%]==[3] GOTO THREE
:ONE
call "%CURRDIR%\PlanningProduct.bat"
:TWO
call "%CURRDIR%\Organization.bat"
:THREE
call "%CURRDIR%\Measure.bat"
pause
我在命令行中执行了以下操作
I:\BatchMania>I:\BatchMania\Home.bat 1
我得到的输出很有趣如下:
Planning
Organization
Measure
Press any key to continue . . .
这很奇怪。希望永远不要写这种代码!!!
答案 0 :(得分:4)
这里有几个需要注意的事项:
if
语句按预期工作:[%1%]==[1]
应为[%1%]==[1%]
或[%1]==[1]
; %__CD__%
; if
(或类似名称)并重命名标签,则可以省略所有goto batch%~1
语句; OR if
语句中指定要调用的批处理和/或使用if-else
构造,则可以省略所有数字标签。以下是一些替代实施方案:
@ECHO OFF
set CURRDIR=%CD%
goto :BATCH%~1 2>NUL
goto :UHOH
:BATCH1
call "%CURRDIR%\PlanningProduct.bat"
goto :DONE
:BATCH2
call "%CURRDIR%\Organization.bat"
goto :DONE
:BATCH3
call "%CURRDIR%\Measure.bat"
goto :DONE
:UHOH
echo Invalid parameter "%~1"
:DONE
pause
@ECHO OFF
set CURRDIR=%CD%
if "%~1"=="1" (
call "%CURRDIR%\PlanningProduct.bat"
) else if "%~1"=="2" (
call "%CURRDIR%\Organization.bat"
) else if "%~1"=="3" (
call "%CURRDIR%\Measure.bat"
) else (
echo Invalid parameter "%~1"
)
pause
@ECHO OFF
set CURRDIR=%CD%
set BAT=
if "%~1"=="1" set BAT=PlanningProduct.bat
if "%~1"=="2" set BAT=Organization.bat
if "%~1"=="3" set BAT=Measure.bat
call "%CURRDIR%\%BAT%" 2>NUL
pause
答案 1 :(得分:1)
以下产生的是您所期望的吗?
:ONE
call "%CURRDIR%\PlanningProduct.bat"
GOTO OUT
:TWO
call "%CURRDIR%\Organization.bat"
GOTO OUT
:THREE
call "%CURRDIR%\Measure.bat"
:OUT
pause
答案 2 :(得分:1)
跳到ONE并执行调用之后,它将继续在下一行(TWO)继续。标签不会改变执行顺序,它仍然会逐行解析文件,除非你跳到某个地方。
跳到特定点:
...
:ONE
call "%CURRDIR%\PlanningProduct.bat"
GOTO DONE
:TWO
...
:DONE
pause
或结束批次:
:ONE
call "%CURRDIR%\PlanningProduct.bat"
pause
GOTO :EOF