如何编写批处理单独的表(函数)

时间:2013-04-08 15:07:48

标签: batch-file cmd

我正在编写一个包含3个功能的批处理文件。其他一切工作正常但是当第一个函数调用它运行所有3个函数时,当第二个函数被调用时它运行第二个和第三个,当第三个函数被调用时它只运行第三个函数,因为它是最后一个函数。

它有什么不对吗?

代码:

IF NOT #%1#==## GOTO END
:

IF #%1#==## GOTO 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


:END
ECHO **End of Display**

:TOOMANY
ECHO **Too much data supplied**
GOTO HELP

3 个答案:

答案 0 :(得分:1)

Batch会将执行转移到指定的标签,但与pascal和类似语言不同,不会将标签视为“程序结束” - 它只是通过标签收费。

要退出程序,您需要执行

goto :eof

冒号是required,标签:eof被理解为'文件结尾'而不必声明(实际上,不应该是恕我直言)

答案 1 :(得分:0)

Shell脚本(批处理文件)实际上没有功能。转到标签只是跳转目标。一旦你跳转到一个标签,执行将从该行继续执行,直到它到达另一个goto或命中文件结束。这意味着当您使用此行时:

GOTO HELP

脚本将跳转到该行并在此之后运行每一行。

要解决此问题,请使用

goto :EOF

标记后的部分。 :EOF表示“文件结束”。

比尔

答案 2 :(得分:0)

这是因为:HELP:END不是真正的功能,它们是标签。当您使用GOTO HELP时,cmd将跳转到HELP并继续从那里运行脚本。解决此问题的一种方法是在每个函数之后添加GOTO另一个标签。例如:

: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只会查看该函数并返回到之前的位置。