Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Подверждение выполнения команд в bat файле (Y/N) (http://forum.oszone.net/showthread.php?t=332393)

Sergey.l 09-01-2018 17:58 2790036

Подверждение выполнения команд в bat файле (Y/N)
 
Помогите написать код, чтобы перед выполнением, например нескольких команд 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 2790042

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 2790045

У нас Windows 7. Т.е. choice.exe будет выдавай запрос на разрешение выполнения команды? Я просто не вижу теста с (Y/N)
Цитата:

Цитата Iska (Сообщение 2790042)
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 2790049

Цитата:

Цитата Sergey.l
Я просто не вижу теста с (Y/N) »

Смотрите:
Скрытый текст


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

Цитата choice.exe /?
/C список Создаваемый список выбираемых элементов.
Список по умолчанию "YN".


Sergey.l 09-01-2018 20:36 2790091

Все хорошо, но как быть если в батнике более 20 команд. Устанешь Y нажимать. Может есть возможность команды выполнить под одним подтверждением или запуск батника сделать с подтверждением?
Цитата:

Цитата Iska (Сообщение 2790049)
Цитата:

Цитата Sergey.l
Я просто не вижу теста с (Y/N) »

Смотрите:
Скрытый текст


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


Sergey.l 09-01-2018 20:52 2790095

Или может в ТоталКоммандере прописать ключ для запуска батника с подтверждением?
p.s. необходимость подтверждения возникла из за осторожности, чтобы случайно не "понажимать", а то у нас девушки в смене, которые нажимают куда попало
Цитата:

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


Sergey.l 09-01-2018 21:12 2790097

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

Sergey.l 09-01-2018 21:56 2790107

Воспользовался вашим советом. решил вместо подтверждения сделать диалог, меню
Написал такой код
Код:

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
Поможете разобраться?
Цитата:

Цитата Iska
choice.exe »


Iska 10-01-2018 00:48 2790154

Цитата:

Цитата Sergey.l
Все хорошо, но как быть если в батнике более 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

Цитата:

Цитата Sergey.l
Можно сделать такое меню, чтобы под цифрами выполнялись батники? »

Можно. Примерно так:
Скрытый текст
Код:

@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 2790224

Подскажите, а как вы делали рамку для меню?
Код:

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

есть ли инструмент для этого или вручную символ в каждую строку?
Цитата:

Цитата Iska
Можно. Примерно так:
Скрытый текст »


Казбек 10-01-2018 12:07 2790265

Цитата:

Цитата Sergey.l
есть ли инструмент для этого или вручную символ в каждую строку? »

Цитата:

Цитата https://lifehacker.ru/2013/05/16/15-poleznyx-funkcij-far-manager/
Рисование линий — один из забавнейших встроенных плагинов встроенного редактора — это рисование линий. Для этого необходимо в редакторе вызвать окно плагинов F11 и активировать Draw Lines. После этого переключать на одинарную/двойную линию можно клавишей F2, а рисование происходит при нажатой клавише SHIFT и перемещению курсора стрелками.


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


Время: 17:46.

Время: 17:46.
© OSzone.net 2001-