Shell 我们可以将标签(类似于函数)加载到名称空间中,以便以后调用吗?

Shell 我们可以将标签(类似于函数)加载到名称空间中,以便以后调用吗?,shell,batch-file,command-line,Shell,Batch File,Command Line,我目前正在学习批处理,我知道我们可以创建一个标签,在我看来,它的工作原理与其他语言中的函数类似 然而,我的批处理文件很快变得杂乱无章 我是否可以将我的标签移动到另一个.bat文件中,并将其加载到我的主.bat文件中供以后使用(不是即时使用) 我在想下面的事情(Psuedocode) main.bat include funcCopy.bat include funcDeleteDir.bat @echo "hello Stackoverflow" ... @call funcDeleteDir

我目前正在学习批处理,我知道我们可以创建一个标签,在我看来,它的工作原理与其他语言中的函数类似

然而,我的批处理文件很快变得杂乱无章

我是否可以将我的标签移动到另一个.bat文件中,并将其加载到我的主.bat文件中供以后使用(不是即时使用)

我在想下面的事情(Psuedocode)

main.bat

include funcCopy.bat
include funcDeleteDir.bat

@echo "hello Stackoverflow"
...
@call funcDeleteDir "C:\Windows"

@echo "hi again"
...
@call funcCopy "C:\Program Files" "C:\Users"
:funcCopy
XCOPY /Y "%~n1" "%~n2"
goto :EOF
:funcDeleteDir
@RD /S /Q "%~n1"
goto :EOF
@call funcCopy     @call funcCopy "C:\Program Files" "C:\Users"
@ECHO OFF
call funcDeleteDir.bat "C:\Windows"
@ECHO OFF
RD /S /Q "%~n1"
funcMove.bat

include funcCopy.bat
include funcDeleteDir.bat

@echo "hello Stackoverflow"
...
@call funcDeleteDir "C:\Windows"

@echo "hi again"
...
@call funcCopy "C:\Program Files" "C:\Users"
:funcCopy
XCOPY /Y "%~n1" "%~n2"
goto :EOF
:funcDeleteDir
@RD /S /Q "%~n1"
goto :EOF
@call funcCopy     @call funcCopy "C:\Program Files" "C:\Users"
@ECHO OFF
call funcDeleteDir.bat "C:\Windows"
@ECHO OFF
RD /S /Q "%~n1"
funcDeleteDir.bat

include funcCopy.bat
include funcDeleteDir.bat

@echo "hello Stackoverflow"
...
@call funcDeleteDir "C:\Windows"

@echo "hi again"
...
@call funcCopy "C:\Program Files" "C:\Users"
:funcCopy
XCOPY /Y "%~n1" "%~n2"
goto :EOF
:funcDeleteDir
@RD /S /Q "%~n1"
goto :EOF
@call funcCopy     @call funcCopy "C:\Program Files" "C:\Users"
@ECHO OFF
call funcDeleteDir.bat "C:\Windows"
@ECHO OFF
RD /S /Q "%~n1"
我已经设法实现了即时使用,并将每个函数移动到另一个文件中,但是它很混乱,因为我必须在它自己的批处理文件中包含对该函数的调用,也正因为如此,它在包含时会立即执行,这是我不希望看到的。这种即时使用方法如下

main.bat

include funcCopy.bat
include funcDeleteDir.bat

@echo "hello Stackoverflow"
...
@call funcDeleteDir "C:\Windows"

@echo "hi again"
...
@call funcCopy "C:\Program Files" "C:\Users"
:funcCopy
XCOPY /Y "%~n1" "%~n2"
goto :EOF
:funcDeleteDir
@RD /S /Q "%~n1"
goto :EOF
@call funcCopy     @call funcCopy "C:\Program Files" "C:\Users"
@ECHO OFF
call funcDeleteDir.bat "C:\Windows"
@ECHO OFF
RD /S /Q "%~n1"
funcMove.bat @调用funcCopy“%~n1”“%~n2”


您的问题的简短答案是“否”…批处理语言不支持这一点

但是,您可以按照您的建议执行操作,而不需要为其他文件添加
include
,也不需要在这些文件中添加标签

main.bat
,您可以调用另一个
.bat
文件:

main.bat

include funcCopy.bat
include funcDeleteDir.bat

@echo "hello Stackoverflow"
...
@call funcDeleteDir "C:\Windows"

@echo "hi again"
...
@call funcCopy "C:\Program Files" "C:\Users"
:funcCopy
XCOPY /Y "%~n1" "%~n2"
goto :EOF
:funcDeleteDir
@RD /S /Q "%~n1"
goto :EOF
@call funcCopy     @call funcCopy "C:\Program Files" "C:\Users"
@ECHO OFF
call funcDeleteDir.bat "C:\Windows"
@ECHO OFF
RD /S /Q "%~n1"
funcDeleteDir.bat

include funcCopy.bat
include funcDeleteDir.bat

@echo "hello Stackoverflow"
...
@call funcDeleteDir "C:\Windows"

@echo "hi again"
...
@call funcCopy "C:\Program Files" "C:\Users"
:funcCopy
XCOPY /Y "%~n1" "%~n2"
goto :EOF
:funcDeleteDir
@RD /S /Q "%~n1"
goto :EOF
@call funcCopy     @call funcCopy "C:\Program Files" "C:\Users"
@ECHO OFF
call funcDeleteDir.bat "C:\Windows"
@ECHO OFF
RD /S /Q "%~n1"

这似乎是一种更干净的方式,而不是使用标签。是的,您只需要在需要函数并且希望/需要将所有内容保存在一个文件中时使用标签。