Войти

Показать полную графическую версию : [решено] Существует ли возможность взаимодействия с пользователем по ходу выполнения скрипта?


RUVATA
05-08-2010, 09:25
Всем доброго времени суток :gamer:
Подскажите пожалуйста существует-ли возможность взаимодействия с пользователем по ходу выполнения скрипта в батнике
смысл в том, что единственное булевое значение, заданное пользователем на определенном этапе - избавит от большой работы, по процедурам обработки ошибок,
да и вообще упрощает алгоритм до "нельзя"
...Покопавшись в поисковиках, в поисках типа: "взаимодействие с пользователем cmd, bat, батник" , "операторы ввода cmd, bat... и.т.д. Ничего вразумительного не нашел.
...Подкоркой мозга чую, что возможность должна быть, или я где-то это уже видел...
конструкция проста : приостановка - получение значения переменной от пользователя - проверка или - продолжение

PS: именно с батниками никогда не заморачивался, но принципы программирования хорошо известны, пишу на VB, VBA. Готов учиться уму разуму. :yessir:

Petya V4sechkin
05-08-2010, 09:28
SET /P variable=[promptString]
Ключ /P позволяет установить значение переменной для входной строки, введенной пользователем. Показывает указанное приглашение promptString перед чтением введенной строки. Приглашение promptString может быть пустым.

Oleg48
05-08-2010, 12:06
ECHO Хотите продолжить работу программы? Y - Да, N - нет
ECHO __________________________________________
SET /P Choice=
IF %Choice%=="N" GOTO :EOF
::продолжаем работу программы
Где то так

RUVATA
05-08-2010, 13:02
Назрело два вопроса:

1) Если из одного батника выполняется другой... переменные в них общие, или переменные надо как-то переносить, как например в VB атрибутом к вызываемой процедуре, вообще есть такая возможность?

2) Батник может создавать текстовый файл, и записывать туда данные... а самое главное читать и извлекать данные?

%Choice%=="N" »
почему два знака "=" подряд

gora
05-08-2010, 13:40
RUVATA
<del>
2 Писать может. Echo Bla bla bla>text.txt Читать тоже может, но здесь нужно знать конкретно что и куда Вы хотите "читать и извлекать данные".почему два знака "=" подряд »
Таков синтаксис CMD!

deepred
05-08-2010, 13:40
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 же тоже используется "==")

будет больше пользы если изложишь задачу побробнее...

Oleg48
05-08-2010, 13:49
RUVATA Два знака равно потому что в этой команде сравнивается введенное значение пользователем хранящееся в переменной %Choice% и строковое значение "N" с помощью IF, это не присвоение переменной значения где ставиться одно равно. И правильно писать IF %Choice%=="N"

RUVATA
05-08-2010, 14:10
синтаксис так синтаксис :) все понятно... Жаль что в справке на этом не заострено внимание как бы в примерах везде ==, но нигде не упоминается, что это синтаксическое условие IF
Где - то наверное я накуролесил...
программа приостанавливается... значение запрашивает... но нифига его не сохраняет...
Set /P Choice=
echo полученно %Choise%
if /i %Choice%=="N" (goto :No) else (goto :2step)

echo кажет полученно ничего что бы я не нажимал

или я где-то в "if" напутал, потому, что исход всегда один (goto :No)

gora
05-08-2010, 14:20
RUVATA, попробуйте изменить так:Set /P Key=
echo полученно %Key%
if /i %Key%==N (goto :No) else (goto :2step)

Какая у Вас система?

Oleg48
05-08-2010, 14:42
RUVATA, попробуйте изменить так:
Set /P Key=
echo полученно %Key%
if %Key%=="N" goto :No
goto :2step
уберите ключ /i

RUVATA
05-08-2010, 14:59
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 , как указанно в справке он отвечает за то, что при сравнении не будет учитываться регистр символов

deepred
05-08-2010, 15:02
RUVATA,


команда goto не требует ":", просто goto No - это и есть "причина выхода", т.е. ошибка

Cовет: запускай *.bat через cmd и "Echo on"

RUVATA
05-08-2010, 15:03
хотя это ничего не меняет...
if %Key%=="N" (goto :No) else (goto :2step) /i »
/i это опечатка в коде его нет

т.е
if %Key%=="N" (goto :No) else (goto :2step) » ?
там везде есть :
как правильно собирается конструкция
IF - Else
справка убогая до безобразия
там во всех примера в конце строки какой-то missing ничкго в скобки не заключается
например в том-же "урок-батники" нет никакого missing
параметры инструкция заключены в скобки

gora
05-08-2010, 15:09
if %Key%=="N" »
Здесь у Вас ошибка. Переменная %Key% не содержит кавычек, а сравниваете Вы ее с N в кавычках. Либо уберите кавычки совсем (но будет вылетать при пустом вводе) либо добавьте кавычки и в первую часть сравнения:if "%Key%"=="N" Либо так:if %Key%#==N#А ключ /i Вы используете правильно и целесообразно, можете его вернуть на место.

PSgoto не требует ":", просто goto No - это и есть "причина выхода", т.е. ошибка »
Не всегда не требует! И написание с двоеточием тоже правильное.

deepred
05-08-2010, 15:13
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

RUVATA
05-08-2010, 15:22
ну из меня и скрипто-кодер :))
вот э-т я наблукал :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