Problema com script em lote: a tela do DOS simplesmente para

2

Eu criei um arquivo bat para executar um programa de backup simples durante a noite.

Estas são as minhas linhas:


@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

Atualmente, depois que pressiono y e digito, o backup.exe é executado, mas a tela do dos apenas para lá. Eu gostaria de melhorar isso.

Gostaria de acrescentar algum texto como: "Muito bem! O backup começou, lembre-se de desligar o monitor. Boa noite".

Isso é possível?

    
por Mamister 10.07.2011 / 04:27

4 respostas

1

Tente alterar a linha "if"% choice% "==" y "c: \ backup.exe" para isso:


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

Você pode colocar vários comandos em uma linha separados pelo sinal " & ".

Também recomendo adicionar o switch -f aos comandos de desligamento ( shutdown -r -f -t 00 ). Você já teve que bater "Finalizar tarefa" antes do seu computador desligar? Bem, a opção -f faz isso por você, se você não está lá para fazer isso.

    
por 10.07.2011 / 04:42
1

Uma solução de variação e (eu acho mais simples e clara) baseada em @ emb1995. Eu encurtei por brevidade. A solução assume o Windows 7 e as extensões de comando estão ativadas:

@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
)
    
por 10.07.2011 / 07:27
0

Sim, você pode! Etiquetas, por exemplo :start , é uma ótima maneira de usar arquivos em lote. Você pode pular para eles, goto start , ou apenas usá-los como comentários da seção. Dê uma olhada neste código revisado. Adicionei alguns marcadores e respondi sua pergunta. Em vez de apenas executar o comando c:\backup.exe , o arquivo em lote salta para a seção rotulada :backup . Que exibe sua mensagem e, em seguida, executa o programa.

@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

EDIT: Você também não precisa da verificação de caso if s. Basta usar o sinalizador /I .

if /I "%choice%"=="N" shutdown -s -t 0
if /I "%choice%"=="Y" goto backup
if /I "%choice%"=="R" shutdown -r -t 0
    
por 10.07.2011 / 04:51
0

Eu provavelmente teria escrito assim:

@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

Há algumas coisas a serem observadas. Em vez de SET , usei o comando CHOICE que é destinado a esse propósito. Embora torne as coisas um pouco mais difíceis, porque usa errorlevel , fornece melhor personalização e controle sobre o prompt, incluindo tempo limite de seleção padrão e padrão para não diferenciar maiúsculas de minúsculas (o que torna as coisas muito mais fáceis na maioria das vezes). Em seguida, usei formatação e recuo adequados para tornar o script mais legível e sustentável. Eu fiz o mesmo com a saída, o que torna o texto e prompts mais fácil de ver na janela do console. Eu também usei um pouco de detecção de erros, onde ele irá fazer um loop no menu e notará o EOF s; eles são necessários porque o comando shutdown inicia o desligamento e retorna, mesmo com o start , então você precisa evitar passar para a próxima “função” (você pode realmente chamar etiquetas como funções, mas isso complicaria desnecessariamente um menu simples como este).

    
por 13.07.2011 / 03:12