Показать полную графическую версию : [решено] Существует ли возможность взаимодействия с пользователем по ходу выполнения скрипта?
Всем доброго времени суток :gamer:
Подскажите пожалуйста существует-ли возможность взаимодействия с пользователем по ходу выполнения скрипта в батнике
смысл в том, что единственное булевое значение, заданное пользователем на определенном этапе - избавит от большой работы, по процедурам обработки ошибок,
да и вообще упрощает алгоритм до "нельзя"
...Покопавшись в поисковиках, в поисках типа: "взаимодействие с пользователем cmd, bat, батник" , "операторы ввода cmd, bat... и.т.д. Ничего вразумительного не нашел.
...Подкоркой мозга чую, что возможность должна быть, или я где-то это уже видел...
конструкция проста : приостановка - получение значения переменной от пользователя - проверка или - продолжение
PS: именно с батниками никогда не заморачивался, но принципы программирования хорошо известны, пишу на VB, VBA. Готов учиться уму разуму. :yessir:
Petya V4sechkin
05-08-2010, 09:28
SET /P variable=[promptString]
Ключ /P позволяет установить значение переменной для входной строки, введенной пользователем. Показывает указанное приглашение promptString перед чтением введенной строки. Приглашение promptString может быть пустым.
ECHO Хотите продолжить работу программы? Y - Да, N - нет
ECHO __________________________________________
SET /P Choice=
IF %Choice%=="N" GOTO :EOF
::продолжаем работу программы
Где то так
Назрело два вопроса:
1) Если из одного батника выполняется другой... переменные в них общие, или переменные надо как-то переносить, как например в VB атрибутом к вызываемой процедуре, вообще есть такая возможность?
2) Батник может создавать текстовый файл, и записывать туда данные... а самое главное читать и извлекать данные?
%Choice%=="N" »
почему два знака "=" подряд
RUVATA
<del>
2 Писать может. Echo Bla bla bla>text.txt Читать тоже может, но здесь нужно знать конкретно что и куда Вы хотите "читать и извлекать данные".почему два знака "=" подряд »
Таков синтаксис CMD!
RUVATA,
1) Если из одного батника выполняется другой... переменные в них общие, или переменные надо как-то переносить, как например в VB атрибутом к вызываемой процедуре, вообще есть такая возможность? »
Возможность есть - называется вызов с параметрами, т.е есть некий second.bat запускаемый из first.bat, тогда:
в first.bat вызов запишется так: call Путь\second.bat "%parametr1%" "%parametr2%"
в second.bat "прием" параметров запишется так: parametr1=%~1 & parametr2=%~2
более подробно cmd>call /?
почему два знака "=" подряд »
таков синтаксис - cmd>if /? (в jscript же тоже используется "==")
будет больше пользы если изложишь задачу побробнее...
RUVATA Два знака равно потому что в этой команде сравнивается введенное значение пользователем хранящееся в переменной %Choice% и строковое значение "N" с помощью IF, это не присвоение переменной значения где ставиться одно равно. И правильно писать IF %Choice%=="N"
синтаксис так синтаксис :) все понятно... Жаль что в справке на этом не заострено внимание как бы в примерах везде ==, но нигде не упоминается, что это синтаксическое условие IF
Где - то наверное я накуролесил...
программа приостанавливается... значение запрашивает... но нифига его не сохраняет...
Set /P Choice=
echo полученно %Choise%
if /i %Choice%=="N" (goto :No) else (goto :2step)
echo кажет полученно ничего что бы я не нажимал
или я где-то в "if" напутал, потому, что исход всегда один (goto :No)
RUVATA, попробуйте изменить так:Set /P Key=
echo полученно %Key%
if /i %Key%==N (goto :No) else (goto :2step)
Какая у Вас система?
RUVATA, попробуйте изменить так:
Set /P Key=
echo полученно %Key%
if %Key%=="N" goto :No
goto :2step
уберите ключ /i
Windows Server 2003 R2
@echo off
set user=Богомолова_Л_Б
set ArchDir=D:\Пробная\%date:~6,4%\%date:~0,2%.%date:~3,2%.zip
set BaseDir=D:\Пробная\Архив\
echo 11:45 - ПРОЗЬБА ПОКИНУТЬ БАЗУ 1С
echo через 5 минут начнется автоматическое архивирование
:Er
echo Сможете ли вы покинуть БД до 11:50? Y - Да, N - нет
echo ============================================
Set /p Key=
if %Key%=="N" (goto :No) else (goto :2step) /i
:No
echo Укажите пожалуйста причину...
echo ============================================
set /p Event=
echo Причина ( %Event% ) зафиксированна для пользователя %user%
pause
:2step
echo ( %Choise% ) - не является командой
if not %Choice%=="Y" goto :Er
7z a -tzip %ArchDir% %BaseDir%
pause
что-то вроде того... но это просто полигон... проверка как работают операторы и конструкция в целом
сейчас вообще ведет себя странно...
на этапе первого запроса у пользователя - останавливается... принимает и благополучно закрывается...
ни ошибки ни чего... в коде нигде не встречается goto :eof, а в конце каждого логического блока pause
а мне нужен ключь /i оператора If , как указанно в справке он отвечает за то, что при сравнении не будет учитываться регистр символов
RUVATA,
команда goto не требует ":", просто goto No - это и есть "причина выхода", т.е. ошибка
Cовет: запускай *.bat через cmd и "Echo on"
хотя это ничего не меняет...
if %Key%=="N" (goto :No) else (goto :2step) /i »
/i это опечатка в коде его нет
т.е
if %Key%=="N" (goto :No) else (goto :2step) » ?
там везде есть :
как правильно собирается конструкция
IF - Else
справка убогая до безобразия
там во всех примера в конце строки какой-то missing ничкго в скобки не заключается
например в том-же "урок-батники" нет никакого missing
параметры инструкция заключены в скобки
if %Key%=="N" »
Здесь у Вас ошибка. Переменная %Key% не содержит кавычек, а сравниваете Вы ее с N в кавычках. Либо уберите кавычки совсем (но будет вылетать при пустом вводе) либо добавьте кавычки и в первую часть сравнения:if "%Key%"=="N" Либо так:if %Key%#==N#А ключ /i Вы используете правильно и целесообразно, можете его вернуть на место.
PSgoto не требует ":", просто goto No - это и есть "причина выхода", т.е. ошибка »
Не всегда не требует! И написание с двоеточием тоже правильное.
RUVATA,
@echo off
set user=Богомолова_Л_Б
set ArchDir=D:\Пробная\%date:~6,4%\%date:~0,2%.%date:~3,2%.zip
set BaseDir=D:\Пробная\Архив\
echo 11:45 - ПРОCЬБА ПОКИНУТЬ БАЗУ 1С
echo через 5 минут начнется автоматическое архивирование
:Er
echo Сможете ли вы покинуть БД до 11:50? Y - Да, N - нет
echo ============================================
Set /p Key=
if "%Key%"=="N" (goto No) else goto 2step
:No
echo Укажите пожалуйста причину...
echo ============================================
set /p Event=
echo Причина ( %Event% ) зафиксированна для пользователя %username%
goto :eof & rem а дальше что? Выход?
:2step
echo ( %Key% ) - не является командой
if not "%Key%"=="Y" goto Er
7z a -tzip %ArchDir% %BaseDir%
pause
ну из меня и скрипто-кодер :))
вот э-т я наблукал :o
т.е.
в конструкции if - else
иснструкции для true-IF заключаются в скобки, а для else - нет?
тож... синтаксис не описанный в справке?
@echo off
set user=Богомолова_Л_Б
set ArchDir=D:\Пробная\%date:~6,4%\%date:~0,2%.%date:~3,2%.zip
set BaseDir=D:\Пробная\Архив\
echo 11:45 - ПРОСЬБА ПОКИНУТЬ БАЗУ 1С
echo через 5 минут начнется автоматическое архивирование
:Er
echo Сможете ли вы покинуть БД до 11:50? Y - Да, N - нет
echo ============================================
Set /p Key=
if /i %Key%#==N# (goto No) else goto 2step
:No
echo Укажите пожалуйста причину...
echo ============================================
set /p Event=
echo Причина ( %Event% ) зафиксированна для пользователя %username%
pause
:2step
if /i not %Key%#==Y# goto Er
7z a -tzip %ArchDir% %BaseDir%
pause
вот так все работает :rupor:
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.