0

我正在编写一个批处理文件,其中包含 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
4

3 回答 3

1

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

要退出程序,您需要执行

goto :eof

冒号在哪里required并且标签:eof被理解为“文件结尾”并且不必声明(实际上,不应该是恕我直言)

于 2013-04-08T15:17:17.470 回答
0

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

GOTO HELP

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

要解决此问题,请使用

goto :EOF

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

账单

于 2013-04-08T15:19:12.487 回答
0

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

于 2013-04-08T15:23:37.017 回答