Batch file 如何编写分批标签(函数)
我正在写一个批处理文件,其中有3个函数。其他一切正常,但当调用第一个函数时,它运行所有3个函数;当调用第二个函数时,它运行第二个函数和第三个函数;当调用第三个函数时,它只运行第三个函数,因为它是最后一个函数 怎么了 代码:Batch file 如何编写分批标签(函数),batch-file,cmd,Batch File,Cmd,我正在写一个批处理文件,其中有3个函数。其他一切正常,但当调用第一个函数时,它运行所有3个函数;当调用第二个函数时,它运行第二个函数和第三个函数;当调用第三个函数时,它只运行第三个函数,因为它是最后一个函数 怎么了 代码: 批处理将执行转移到指定的标签上,但与pascal和类似语言不同,批处理不将标签视为“过程结束”——它只是通过标签进行充电 要退出程序,您需要执行 goto :eof 如果冒号是必需的,并且标签:eof被理解为“文件结束”,并且不必声明(实际上,不应该是IMHO)Shell脚
批处理将执行转移到指定的标签上,但与pascal和类似语言不同,批处理不将标签视为“过程结束”——它只是通过标签进行充电 要退出程序,您需要执行
goto :eof
如果冒号是必需的
,并且标签:eof
被理解为“文件结束”,并且不必声明(实际上,不应该是IMHO)Shell脚本(批处理文件)实际上没有功能。Goto标签只是跳转目标。一旦跳转到标签,执行将从该行继续,直到到达另一个goto或到达文件末尾。这意味着当您使用此行时:
GOTO HELP
脚本将跳转到该行并在其后运行每一行
要解决此问题,请使用
goto :EOF
在标记的部分之后。:EOF表示“文件结束”
Bill这是因为
:HELP
和:END
不是真正的函数,它们是标签。当您使用GOTO HELP
时,cmd将跳转到HELP
并从那里继续运行脚本。解决此问题的一种方法是在每个函数后放置另一个标签。例如:
:HELP
ECHO ** Input parameter is missing **
ECHO Correct format: %0 filename_tempate
ECHO Example: %0 *.TXT
ECHO.
ECHO Try again
GOTO START
:END
ECHO **End of Display**
GOTO NEXT
:TOOMANY
ECHO **Too much data supplied**
GOTO HELP
:NEXT
这样,在cmd运行函数中的任何内容后,它将转到预期位置,而不会继续运行下一个函数
另一种方式:
IF NOT #%1#==## CALL :END
:
IF #%1#==## CALL :HELP
:
IF NOT #%2#==## GOTO TOOMANY
:
:HELP
ECHO ** Input parameter is missing **
ECHO Correct format: %0 filename_tempate
ECHO Example: %0 *.TXT
ECHO.
ECHO Try again
GOTO :EOF
:END
ECHO **End of Display**
GOTO :EOF
:TOOMANY
ECHO **Too much data supplied**
CALL :HELP
GOTO :EOF
这样,cmd将只查看函数并返回到之前的位置。是的,我没有测试这段代码,但我仔细阅读了它。现在我明白了,我必须重定向到另一个标签,如NEXT,这样函数就不会再执行了,而下一个标签必须位于所有代码的最后一个,所以它没有去向。:)非常感谢……)
IF NOT #%1#==## CALL :END
:
IF #%1#==## CALL :HELP
:
IF NOT #%2#==## GOTO TOOMANY
:
:HELP
ECHO ** Input parameter is missing **
ECHO Correct format: %0 filename_tempate
ECHO Example: %0 *.TXT
ECHO.
ECHO Try again
GOTO :EOF
:END
ECHO **End of Display**
GOTO :EOF
:TOOMANY
ECHO **Too much data supplied**
CALL :HELP
GOTO :EOF