我创建了一个 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
因此您需要避免进入下一个“功能”(您实际上可以称呼标签就像功能一样,但这会不必要地使像这样的简单菜单变得复杂)。