Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何编写分批标签(函数)_Batch File_Cmd - Fatal编程技术网

Batch file 如何编写分批标签(函数)

Batch file 如何编写分批标签(函数),batch-file,cmd,Batch File,Cmd,我正在写一个批处理文件,其中有3个函数。其他一切正常,但当调用第一个函数时,它运行所有3个函数;当调用第二个函数时,它运行第二个函数和第三个函数;当调用第三个函数时,它只运行第三个函数,因为它是最后一个函数 怎么了 代码: 批处理将执行转移到指定的标签上,但与pascal和类似语言不同,批处理不将标签视为“过程结束”——它只是通过标签进行充电 要退出程序,您需要执行 goto :eof 如果冒号是必需的,并且标签:eof被理解为“文件结束”,并且不必声明(实际上,不应该是IMHO)Shell脚

我正在写一个批处理文件,其中有3个函数。其他一切正常,但当调用第一个函数时,它运行所有3个函数;当调用第二个函数时,它运行第二个函数和第三个函数;当调用第三个函数时,它只运行第三个函数,因为它是最后一个函数

怎么了

代码:


批处理将执行转移到指定的标签上,但与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