我在编写名为“选项.bat“所以我想写下我所面临的挑战,看看是否有人可以给我提供帮助。
我的剧本设计
该脚本旨在提供对我经常使用的四个选项的快速访问:
- 创建一个名为“测试“在C盘中
- 开场IE浏览器
- 打开名为“测试“在C盘中
- 开场设备和打印机屏幕
我的脚本问题
重复- 我希望能够选择一个选项,然后让脚本返回开始,以便可以选择另一个选项,依此类推,直到用户实际关闭命令屏幕。目前,只能执行一项操作,然后命令屏幕在暂停后关闭
不要使用未选择的选项- 目前,如果选择选项 4,则仅运行其逻辑。但是,如果选择选项 1,则按顺序运行该选项的所有例程逻辑。
我需要从另一个脚本调用这个脚本,所以我需要确保这一切都能正常工作,通过另一个脚本调用它是可能的还是有关系的。
我的批处理脚本
选项.bat
::Provides 4 action options
@ECHO OFF
C:
CD\
CLS
:MENU
CLS
ECHO ============= MENU NAME =============
ECHO -------------------------------------
ECHO 1. Create "test" folder C drive
ECHO 2. Open Internet Explorer
ECHO 3. Open "test" folder
ECHO 4. Open Devices and printers
ECHO ==========PRESS 'Q' TO QUIT==========
ECHO.
SET INPUT=
SET /P INPUT=Please select a number:
IF /I '%INPUT%'=='1' GOTO Selection1
IF /I '%INPUT%'=='2' GOTO Selection2
IF /I '%INPUT%'=='3' GOTO Selection3
IF /I '%INPUT%'=='4' GOTO Selection4
IF /I '%INPUT%'=='Q' GOTO Quit
CLS
ECHO ============INVALID INPUT============
ECHO -------------------------------------
ECHO Please select a number from the Main
echo Menu [1-4] or select 'Q' to quit.
ECHO -------------------------------------
ECHO ======PRESS ANY KEY TO CONTINUE======
PAUSE > NUL
GOTO MENU
:Selection1
md c:\test
:Selection2
start iexplore
:Selection3
start c:\test
:Selection4
control printers
:Quit
PAUSE
答案1
我已经修改了下面的逻辑,以便按照我编写的方式运行,正如你解释希望它工作的方式一样。
本质上这将...
使用
CALL
命令来调用指定的子程序,而不是,GOTO
因为只要以 结尾,它就会将控制权交还给最初调用的子程序GOTO :EOF
。在每个被调用子程序的末尾使用
GOTO :EOF
将控制权交还给原始调用者子程序,以便它可以继续处理其余逻辑
脚本
::Provides 4 action options
@ECHO OFF
C:
CD\
CLS
:MENU
CLS
ECHO ============= MENU NAME =============
ECHO -------------------------------------
ECHO 1. Create "test" folder C drive
ECHO 2. Open Internet Explorer
ECHO 3. Open "test" folder
ECHO 4. Open Devices and printers
ECHO ==========PRESS 'Q' TO QUIT==========
ECHO.
SET INPUT=
SET /P INPUT=Please select a number:
IF /I '%INPUT%'=='1' CALL :Selection1
IF /I '%INPUT%'=='2' CALL :Selection2
IF /I '%INPUT%'=='3' CALL :Selection3
IF /I '%INPUT%'=='4' CALL :Selection4
IF /I '%INPUT%'=='Q' CALL :Quit
CLS
ECHO ============INVALID INPUT============
ECHO -------------------------------------
ECHO Please select a number from the Main
echo Menu [1-4] or select 'Q' to quit.
ECHO -------------------------------------
ECHO ======PRESS ANY KEY TO CONTINUE======
PAUSE > NUL
GOTO :MENU
:Selection1
md c:\test
GOTO :EOF
:Selection2
start iexplore
GOTO :EOF
:Selection3
start c:\test
GOTO :EOF
:Selection4
control printers
GOTO :EOF
:Quit
PAUSE
更多资源
-
调用子程序(:label)
该
CALL
命令将把控制权连同任何指定的参数一起传递给指定标签后的语句。要退出子程序,请指定GOTO :eof
这将把控制权转移到当前子程序的末尾。
答案2
所以:
:Selection1
md c:\test
GOTO Quit
之后您必须跳到结尾。如果不跳,它将继续Selection2
。
但是如果您想重新启动脚本直到用户选择“Q”,只需执行 GOTO 即可返回到选择。
为了从另一个批处理(如“batchfile.bat 4”)运行它(它将运行 Selection4),我添加了该函数
::Provides 4 action options
@ECHO OFF
C:
CD\
CLS
::Will skip menu if argument passed.
IF /I %1=='1' GOTO Selection1
IF /I %1=='2' GOTO Selection2
IF /I %1=='3' GOTO Selection3
IF /I %1=='4' GOTO Selection4
:MENU
CLS
ECHO ============= MENU NAME =============
ECHO -------------------------------------
ECHO 1. Create "test" folder C drive
ECHO 2. Open Internet Explorer
ECHO 3. Open "test" folder
ECHO 4. Open Devices and printers
ECHO ==========PRESS 'Q' TO QUIT==========
ECHO.
SET INPUT=
SET /P INPUT=Please select a number:
IF /I '%INPUT%'=='1' GOTO Selection1
IF /I '%INPUT%'=='2' GOTO Selection2
IF /I '%INPUT%'=='3' GOTO Selection3
IF /I '%INPUT%'=='4' GOTO Selection4
IF /I '%INPUT%'=='Q' GOTO Quit
CLS
ECHO ============INVALID INPUT============
ECHO -------------------------------------
ECHO Please select a number from the Main
echo Menu [1-4] or select 'Q' to quit.
ECHO -------------------------------------
ECHO ======PRESS ANY KEY TO CONTINUE======
PAUSE > NUL
GOTO MENU
:Selection1
md c:\test
GOTO MENU
:Selection2
start iexplore
GOTO MENU
:Selection3
start c:\test
GOTO MENU
:Selection4
control printers
GOTO MENU
:Quit
PAUSE
答案3
GOTO MENU
在每个末尾添加Selection
应该可以为您解决第一个和第二个问题,例如:
:Selection1
ECHO Option: "test" folder on C drive...
md c:\test
timeout /t 3 /nobreak > NUL
GOTO MENU
:Selection2
ECHO Option: Open Internet Explorer...
start iexplore
timeout /t 3 /nobreak > NUL
GOTO MENU
:Selection3
ECHO Option: Open "test" folder...
start c:\test
timeout /t 3 /nobreak > NUL
GOTO MENU
:Selection4
ECHO Option: Open Devices and printers...
control printers
timeout /t 3 /nobreak > NUL
GOTO MENU
:Quit
PAUSE
在上面的代码中,我还添加了一个ECHO
语句(以澄清选择了哪个选项)和一个暂停以秒为单位(这会延迟返回MENU
- 否则,返回是即时的)。这两者都不是绝对必要的。
请注意,> NUL
aftertimeout
会阻止显示倒计时(通常会产生倒计时timeout
)。
如果我从另一个批处理文件调用此脚本,我是否仍然可以在另一个脚本中使用(1)中提到的重复选项?
我认为答案很简单:“否”(至少我认为您不是故意这么做的)。但是,通过第三方应用程序可以反复向批处理窗口发送输入。