Войти

Показать полную графическую версию : [решено] Подверждение выполнения команд в bat файле (Y/N)


Sergey.l
09-01-2018, 17:58
Помогите написать код, чтобы перед выполнением, например нескольких команд move (переместить) выдавался запрос с текстом "Подтвердить выполнение? (Y/N)
Нашел вот этот код

Код:
@set /p answer=Подтвердите выполнение? (Y/N):
if %answer%==y move d:/folder/*.doc d:/folder/2018/01/09/
move d:/folder/*.docx d:/folder/2018/01/09/
move d:/folder/*.txt d:/folder/2018/01/09/
if %answer%==n cls

, но он работает только с одной командой, т.е. если, например будет две или три команды move, то при нажати N, отменяется первая команда, а остальные выполняются. Как сделать так чтобы под условием (подверждением yes/no) работали все команды?

Просьба не предлагать решение задачи на др. кроме BAT, т.к. все готовые команды, а их много, написаны на BAT.

Iska
09-01-2018, 18:19
Sergey.l, следует разместить сие перед каждой командой move. Кроме того, на Windows 2003 и выше имеет смысл задействовать не set /p, а choice.exe (на предыдущих версиях его не было в комплекте, и требовалась отдельная установка из Resource Kit'ов), наподобие:
@echo off
setlocal enableextensions enabledelayedexpansion

choice.exe /m "Переместить *.doc"
if %errorlevel% equ 1 move d:/folder/*.doc d:/folder/2018/01/09/

choice.exe /m "Переместить *.docx"
if %errorlevel% equ 1 move d:/folder/*.docx d:/folder/2018/01/09/

choice.exe /m "Переместить *.txt"
if %errorlevel% equ 1 move d:/folder/*.txt d:/folder/2018/01/09/

endlocal
exit /b 0

Sergey.l
09-01-2018, 18:29
У нас Windows 7. Т.е. choice.exe будет выдавай запрос на разрешение выполнения команды? Я просто не вижу теста с (Y/N)
Sergey.l, следует разместить сие перед каждой командой move. Кроме того, на Windows 2003 и выше имеет смысл задействовать не set /p, а choice.exe (на предыдущих версиях его не было в комплекте, и требовалась отдельная установка из Resource Kit'ов), наподобие:
@echo off
setlocal enableextensions enabledelayedexpansion

choice.exe /m "Переместить *.doc"
if %errorlevel% equ 1 move d:/folder/*.doc d:/folder/2018/01/09/

choice.exe /m "Переместить *.docx"
if %errorlevel% equ 1 move d:/folder/*.docx d:/folder/2018/01/09/

choice.exe /m "Переместить *.txt"
if %errorlevel% equ 1 move d:/folder/*.txt d:/folder/2018/01/09/

endlocal
exit /b 0

Iska
09-01-2018, 18:46
Я просто не вижу теста с (Y/N) »
Смотрите:
https://i.imgur.com/JRWOBax.png

«[Y,N]?» — добавляется по умолчанию, если иного не задано параметром /c:
/C список Создаваемый список выбираемых элементов.
Список по умолчанию "YN".

Sergey.l
09-01-2018, 20:36
Все хорошо, но как быть если в батнике более 20 команд. Устанешь Y нажимать. Может есть возможность команды выполнить под одним подтверждением или запуск батника сделать с подтверждением?
Я просто не вижу теста с (Y/N) »
Смотрите:
https://i.imgur.com/JRWOBax.png

«[Y,N]?» — добавляется по умолчанию, если иного не задано параметром /c:

Sergey.l
09-01-2018, 20:52
Или может в ТоталКоммандере прописать ключ для запуска батника с подтверждением?
p.s. необходимость подтверждения возникла из за осторожности, чтобы случайно не "понажимать", а то у нас девушки в смене, которые нажимают куда попало
«[Y,N]?» — добавляется по умолчанию, если иного не задано параметром /c: »

Sergey.l
09-01-2018, 21:12
Наткнулся на вот эту статью http://www.winblog.ru/win7/1147767821-09121101.html
Можно сделать такое меню, чтобы под цифрами выполнялись батники?

Sergey.l
09-01-2018, 21:56
Воспользовался вашим советом. решил вместо подтверждения сделать диалог, меню
Написал такой код
Echo off
cls
Echo Work menu
Echo ============================================================================
Echo 1 111.bat создать папки
Echo 2 222.bat переместить заготовки
Echo 2 333.bat забрать файлы по маске

Echo ============================================================================
Choice /C 123 /M "Выберите один из вариантов!"

If Errorlevel 1 Goto 1
If Errorlevel 2 Goto 2
If Errorlevel 3 Goto 3

Goto End

:3
cls
d:\папка\333.bat
Goto End


:2
cls
d:\папка\222.bat
Goto End

:1
cls
d:\папка\111.bat
Goto End

Проблема в том, что нажимаю цифру 2 или 3 выполняется все равно батник под цифрой 1
Поможете разобраться?
choice.exe »

Iska
10-01-2018, 00:48
Все хорошо, но как быть если в батнике более 20 команд. Устанешь Y нажимать. Может есть возможность команды выполнить под одним подтверждением »
Прошу прощения, видимо, я неправильно Вас понял. Возможно, Вы хотели что-то такое?
@echo off
setlocal enableextensions enabledelayedexpansion

choice.exe /m "Переместить файлы *.doc, *.docx, *.txt"

if %errorlevel% equ 1 (
move d:/folder/*.doc d:/folder/2018/01/09/
move d:/folder/*.docx d:/folder/2018/01/09/
move d:/folder/*.txt d:/folder/2018/01/09/
)

endlocal
exit /b 0

Или, ещё проще:
@echo off
setlocal enableextensions enabledelayedexpansion

choice.exe /m "Переместить файлы *.doc, *.docx, *.txt"

if %errorlevel% equ 1 for %%i in (*.doc *.docx *.txt) do move "d:/folder/%%~i" "d:/folder/2018/01/09/"

endlocal
exit /b 0
Можно сделать такое меню, чтобы под цифрами выполнялись батники? »
Можно. Примерно так:
@echo off
setlocal enableextensions enabledelayedexpansion

:Repeat
echo ╔═══════════ Меню ═══════════╗
echo ║ 1. Создать папки ║
echo ║ 2. Переместить заготовки ║
echo ║ 3. Забрать файлы по маске ║
echo ║ 4. Выход из меню ║
echo ╟────────────────────────────╢
echo ║ Выберите один из вариантов ║
echo ╚════════════════════════════╝
echo.
choice.exe /c 1234

if %errorlevel% equ 4 exit /b
if %errorlevel% equ 255 exit /b

call :Sub%errorlevel%
goto :Repeat

endlocal
exit /b 0

:Sub1
call d:\папка\111.bat
exit /b

:Sub2
call d:\папка\222.bat
exit /b

:Sub3
call d:\папка\333.bat
exit /b


Причём необязательно, чтобы именно «выполнялись батники» — можно исполнять код непосредственно в процедурах прямо в этом же файле.

Sergey.l
10-01-2018, 10:54
Подскажите, а как вы делали рамку для меню?
echo ╔═══════════ Меню ═══════════╗
echo ║ 1. Создать папки ║
echo ║ 2. Переместить заготовки ║
echo ║ 3. Забрать файлы по маске ║
echo ║ 4. Выход из меню ║
echo ╟────────────────────────────╢
echo ║ Выберите один из вариантов ║
echo ╚════════════════════════════╝
echo.
есть ли инструмент для этого или вручную символ в каждую строку?
Можно. Примерно так:
Скрытый текст »

Казбек
10-01-2018, 12:07
есть ли инструмент для этого или вручную символ в каждую строку? »

Рисование линий — один из забавнейших встроенных плагинов встроенного редактора — это рисование линий. Для этого необходимо в редакторе вызвать окно плагинов F11 и активировать Draw Lines. После этого переключать на одинарную/двойную линию можно клавишей F2, а рисование происходит при нажатой клавише SHIFT и перемещению курсора стрелками.

https://i.imgur.com/Dxkkzbb.png

А Iska - известный адепт FAR и его встроенного редактора.




© OSzone.net 2001-2012