2

Я создал 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 просто останавливается. Я хотел бы улучшить это.

Я хотел бы добавить в текст, как: «Молодец! Резервное копирование началось, пожалуйста, не забудьте выключить монитор. Доброй ночи."

Это возможно?

4 ответа4

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 сделает это за вас, если вас там нет.

1

Вариант и (я думаю, более простое и понятное) решение, основанное на @ 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
)
0

Я, вероятно, написал бы это так:

@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 , поскольку использует уровень ошибки , он обеспечивает лучшую настройку и контроль над приглашением, включая время ожидания выбора по умолчанию и значение по умолчанию без учета регистра (что в большинстве случаев значительно упрощает работу). Затем я использовал правильное форматирование и отступы, чтобы сделать сценарий более читабельным и понятным. Я сделал то же самое с выводом, который делает текст и подсказки легче увидеть в окне консоли. Я также добавил немного обнаружения ошибок, когда оно будет циклически отображать меню и замечать EOF ; они необходимы, потому что команда shutdown инициирует завершение работы и возвращает, даже при start , поэтому вам нужно избегать перехода к следующей «функции» (вы можете фактически вызывать метки как функции, но это излишне усложнит простое меню, подобное этому),

0

Да, ты можешь! Метки, например :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 s. Просто используйте флаг /I

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .