Batch file 批处理文件子程序
我试图重新使用批处理文件代码,以便在菜单页面中执行类似的任务 主菜单由10多个选项组成。 当我进入每个菜单项时,我需要在文本中显示以下内容Batch file 批处理文件子程序,batch-file,subroutine,Batch File,Subroutine,我试图重新使用批处理文件代码,以便在菜单页面中执行类似的任务 主菜单由10多个选项组成。 当我进入每个菜单项时,我需要在文本中显示以下内容 Press [C] to Continue or [X] to exit [C/X]: _ 我每次都在菜单中创建标签,并重新指向负责提示消息和执行必要操作的代码 如何使用下面的代码作为子例程,这样我就不必多次重新编写代码了。把它称为子程序是很容易的 :MiniMenu1 SET INPUT1= SET /P INPUT1=Press [Y] to Cont
Press [C] to Continue or [X] to exit [C/X]: _
我每次都在菜单中创建标签,并重新指向负责提示消息和执行必要操作的代码
如何使用下面的代码作为子例程,这样我就不必多次重新编写代码了。把它称为子程序是很容易的
:MiniMenu1
SET INPUT1=
SET /P INPUT1=Press [Y] to Continue Installation or [N] to go back [Y/N]:
IF /I '%INPUT1%'=='y' GOTO Mini_cont1
IF /I '%INPUT1%'=='n' GOTO Mini_back1
ECHO ============INVALID INPUT============
ECHO Please select a number from the Menu Options
ECHO -------------------------------------
ECHO ======PRESS ANY KEY TO CONTINUE======
PAUSE > NUL
GOTO MiniMenu1
其中,主菜单项页面的代码为
:Selection1
:: MAin menu item 1
GOTO MiniMenu1
:Mini_cont1
:: xCopy update.zip C:\python27\ /y
@echo Update Completed.
pause
:Mini_back1
:: end
GOTO MENU
啊,想对了。很好
@echo off
setlocal
call :ask Question number one
if errorlevel 2 goto Q1X
call :ask Question number two
if errorlevel 2 goto Q2X
::get here for Q1Q2 responses both C
goto :eof
:ask
choice /c CX /N /M "%*"
goto :eof
这是一个基本的模板。在提示中,键入choice/?
以了解有关选项的说明
提示:set“choices=wqzk”
然后在子例程中choice/c%choices%/N/M“%*”
将允许您更改可用的选项/n
提示可用的选项,因此您无需在文本中指定,只需使其变得明显即可-例如,对于wqzk
来说,退出、Zap、Kill
应该是明显的
%errorlevel%
中的返回值将显示所选字符的序列号。W=>1,Q=>2..K=>4。在传统构造中,如果errorlevel n
如果errorlevel
为n
或大于n
则比较为真,因此使用
if errorlevel 4 goto QnA4
if errorlevel 3 goto QnA3
if errorlevel 2 goto QnA2
:: if it gets here, errorlevel is 1 hence choice was first character.
这比“现代”方式要短
注意:%*
表示传递给子例程的所有参数
。这没有巫毒。但是要小心——如果你喜欢,只需文本和一些符号。对cmd
具有特殊含义的符号可能会导致意外结果
当遇到匹配的
endlocal
时,在setlocal
之后创建/更改/删除的变量将被删除/恢复/恢复。因此,setlocal
通常用作批处理中的第一个“操作语句”——批处理结束时,环境将恢复为原始状态
要使用子例程删除批处理中的变量,可以使用
call :zap we dont want these variables
:zap
if "%1" neq "" set "%1="&shift&goto zap
goto :eof
(要删除变量我们
不
需要这些
和变量
或:zap版本2
:zap
for %%a in (%*) do set "%%a="
goto :eof
要删除所有以相同字符模式开头的变量,请使用
FOR /F "delims==" %%a In ('set $ 2^>Nul') DO SET "%%a="
(这将删除所有从$
开始的变量$
不是神圣的-您可以在此处用xyz
替换$
,例如,zapxyz123
xyz789
和xyzylofone
)
当然,你也可以结合这些技术
但是-问一个新问题并不昂贵。一点也不贵。甚至便宜。问一个新问题,而不是在现有问题上标记更多的问题,可以更容易地找到解决方案(比如..想知道如何删除变量的人可能不希望在题为“批处理文件子程序”的问题下找到它例如,它还可以防止问题成为传奇。谢谢,它可以工作。我如何清除setlocal下定义的变量,以防在我再次调用子程序时存储它们。
FOR /F "delims==" %%a In ('set $ 2^>Nul') DO SET "%%a="