批处理脚本的问题:DOS 屏幕停止

批处理脚本的问题:DOS 屏幕停止

我创建了一个 bat 文件来在夜间运行一个简单的备份程序。

这是我的台词:


@echo off
echo.
echo Please select the followings:
echo.
echo *************************************
echo.
echo.
echo.
echo Select "Y" if you want to start backup.
echo.
echo ****************************************************
echo.
echo.
echo.
echo Select "N" to shut down without backup.
echo.
echo ****************************************************
echo.
echo.
echo.
echo Select "R" to restart without backup.
echo.
echo ****************************************************
echo.
echo.
echo.
set /p choice=Select Y or N or R and Enter:
set choice=%choice:~0,1%
if "%choice%"=="n" shutdown -s -t 0
if "%choice%"=="N" shutdown -s -t 0
if "%choice%"=="y" c:\backup.exe
if "%choice%"=="Y" c:\backup.exe
if "%choice%"=="r" shutdown -r -t 0
if "%choice%"=="R" shutdown -r -t 0

目前,当我按下 y 并输入后,backup.exe 会运行,但 dos 屏幕会停在那里。我想改进它。

我想添加一些文字,例如:“做得好!备份已开始,请记住关闭显示器。晚安。”

这可能吗?

答案1

尝试将行“if "%choice%"=="y" c:\backup.exe”更改为:


if "%choice%"=="y" echo Well done! Backup started, please remember to off the monitor. Good night. & c:\backup.exe

您可以将多个命令放在一行上,并以“ &”符号分隔。

我还建议您将开关 -f 添加到关机命令 ( shutdown -r -f -t 00)。您是否曾在计算机关机前点击过“结束任务”?好​​吧,如果您不在现场,-f 开关会为您完成此操作。

答案2

基于@emb1995 的解决方案的变体和(我认为更简单、更清晰)解决方案。为了简洁起见,我缩短了。该解决方案假设 Windows 7 和命令扩展已启用:

@echo off

echo.
echo Please select one of the following:
echo.
echo Select "Y" if you want to start backup.
echo Select "N" to shut down without backup.
echo Select "R" to restart without backup.
echo.
:select
set /p choice=Select Y or N or R and press Enter:
set choice=%choice:~0,1%
if /I "%choice%" EQU "n" (
    shutdown -s -t 0
) else if /I "%choice%" EQU "y" (
    echo Well done! Backup started, please remember to turn off the monitor. Good night.
    c:\backup.exe
) else if /I "%choice%" EQU "r" (
    shutdown -r -t 0
) else (
    echo.
    echo Please enter one of the listed options...
    echo.
    goto :select
)

答案3

是的,你可以!标签(例如:start)是使用批处理文件的绝佳方式。你可以跳转到它们,goto start或者只是将它们用作部分注释。看看这个修改后的代码。我添加了一些标签,并回答了你的问题。批处理文件不只是运行命令c:\backup.exe,而是跳转到标有的部分:backup。它会显示你的消息,然后执行程序。

@echo off
:start
echo.
echo Please select one of the following:
echo.
echo *************************************
echo.
echo.
echo.
echo Select "Y" if you want to start backup.
echo.
echo ****************************************************
echo.
echo.
echo.
echo Select "N" to shut down without backup.
echo.
echo ****************************************************
echo.
echo.
echo.
echo Select "R" to restart without backup.
echo.
echo ****************************************************
echo.
echo.
echo.
set /p choice=Select Y or N or R and press Enter:
set choice=%choice:~0,1%
if "%choice%"=="n" shutdown -s -t 0
if "%choice%"=="N" shutdown -s -t 0
if "%choice%"=="y" goto backup
if "%choice%"=="Y" goto backup
if "%choice%"=="r" shutdown -r -t 0
if "%choice%"=="R" shutdown -r -t 0
:end
:backup
echo Well done! Backup started, please remember to turn off the monitor. Good night.
c:\backup.exe

编辑:您也不需要检查大小写if。只需使用/I标志即可。

if /I "%choice%"=="N" shutdown -s -t 0
if /I "%choice%"=="Y" goto backup
if /I "%choice%"=="R" shutdown -r -t 0

答案4

我可能会这样写:

@echo off

:menu
    echo.
    echo   Please choose one of the following:
    echo.
    echo     (S)hutdown
    echo     (R)estart
    echo     (B)ackup
    echo.
    choice /c:srb "  What would you like to do "
    echo.

    if errorlevel 3 goto backup
    if errorlevel 2 goto restart
    if errorlevel 1 goto shutdown
    if errorlevel 0 goto menu

:shutdown
    echo   Good night.
    start  shutdown -s -t 0 -c "Shutting down from menu."
    goto   :eof

:restart
    echo   Rebooting; just a moment...
    start  shutdown -r -t 0 -c "Restarting from menu."
    goto   :eof

:backup
    echo   Running backup... Please remember to off the monitor.
    start  c:\backup.exe
    goto   :eof

有几点需要注意。SET我没有使用 ,而是使用了CHOICE专门为此目的而设计的命令。虽然由于使用了errorlevel,操作起来稍微困难一些,但它提供了更好的自定义和对提示的控制,包括默认选择超时和默认不区分大小写(这在大多数情况下使操作变得容易得多)。接下来,我使用了适当的格式和缩进,使脚本更具可读性和可维护性。我对输出做了同样的事情,这使得文本和提示在控制台窗口中更容易看到。我还加入了一些错误检测,它会循环菜单并注意到 s EOF;它们是必需的,因为shutdown即使使用 ,命令也会启动关闭并返回,start因此您需要避免进入下一个“功能”(您实际上可以称呼标签就像功能一样,但这会不必要地使像这样的简单菜单变得复杂)。

相关内容