重复批处理脚本

重复批处理脚本

我在编写名为“选项.bat“所以我想写下我所面临的挑战,看看是否有人可以给我提供帮助。

我的剧本设计

该脚本旨在提供对我经常使用的四个选项的快速访问:

  1. 创建一个名为“测试“在C盘中
  2. 开场IE浏览器
  3. 打开名为“测试“在C盘中
  4. 开场设备和打印机屏幕

我的脚本问题

  1. 重复- 我希望能够选择一个选项,然后让脚本返回开始,以便可以选择另一个选项,依此类推,直到用户实际关闭命令屏幕。目前,只能执行一项操作,然后命令屏幕在暂停后关闭

  2. 不要使用未选择的选项- 目前,如果选择选项 4,则仅运行其逻辑。但是,如果选择选项 1,则按顺序运行该选项的所有例程逻辑。

  3. 我需要从另一个脚本调用这个脚本,所以我需要确保这一切都能正常工作,通过另一个脚本调用它是可能的还是有关系的。


我的批处理脚本

选项.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- 否则,返回是即时的)。这两者都不是绝对必要的。

请注意,> NULaftertimeout会阻止显示倒计时(通常会产生倒计时timeout)。

如果我从另一个批处理文件调用此脚本,我是否仍然可以在另一个脚本中使用(1)中提到的重复选项?

我认为答案很简单:“否”(至少我认为您不是故意这么做的)。但是,通过第三方应用程序可以反复向批处理窗口发送输入。

相关内容