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

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

RUVATA 05-08-2010 09:25 1467174

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

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

Petya V4sechkin 05-08-2010 09:28 1467178

Код:

SET /P variable=[promptString]
Цитата:

Ключ /P позволяет установить значение переменной для входной строки, введенной пользователем. Показывает указанное приглашение promptString перед чтением введенной строки. Приглашение promptString может быть пустым.

Oleg48 05-08-2010 12:06 1467298

Код:


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

Где то так

RUVATA 05-08-2010 13:02 1467357

Назрело два вопроса:

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

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

Цитата:

Цитата Oleg48
%Choice%=="N" »

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

gora 05-08-2010 13:40 1467383

RUVATA
<del>
2 Писать может.
Код:

Echo Bla bla bla>text.txt
Читать тоже может, но здесь нужно знать конкретно что и куда Вы хотите "читать и извлекать данные".
Цитата:

Цитата RUVATA
почему два знака "=" подряд »

Таков синтаксис CMD!

deepred 05-08-2010 13:40 1467385

RUVATA,

Цитата:

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

Возможность есть - называется вызов с параметрами, т.е есть некий second.bat запускаемый из first.bat, тогда:

в first.bat вызов запишется так: call Путь\second.bat "%parametr1%" "%parametr2%"

в second.bat "прием" параметров запишется так: parametr1=%~1 & parametr2=%~2

более подробно cmd>call /?

Цитата:

Цитата RUVATA
почему два знака "=" подряд »

таков синтаксис - cmd>if /? (в jscript же тоже используется "==")

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

Oleg48 05-08-2010 13:49 1467393

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

RUVATA 05-08-2010 14:10 1467406

синтаксис так синтаксис :) все понятно... Жаль что в справке на этом не заострено внимание как бы в примерах везде ==, но нигде не упоминается, что это синтаксическое условие 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 1467416

RUVATA, попробуйте изменить так:
Код:

Set /P Key=
echo полученно %Key%
if /i %Key%==N (goto :No) else (goto :2step)

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

Oleg48 05-08-2010 14:42 1467441

RUVATA, попробуйте изменить так:
Код:

Set /P Key= 
echo полученно %Key% 
if %Key%=="N" goto :No
goto :2step

уберите ключ /i

RUVATA 05-08-2010 14:59 1467454

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 1467458

RUVATA,


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

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

RUVATA 05-08-2010 15:03 1467462

хотя это ничего не меняет...
Цитата:

Цитата RUVATA
if %Key%=="N" (goto :No) else (goto :2step) /i »

/i это опечатка в коде его нет

т.е
Цитата:

Цитата RUVATA
if %Key%=="N" (goto :No) else (goto :2step) »

?
там везде есть :
как правильно собирается конструкция
IF - Else
справка убогая до безобразия
там во всех примера в конце строки какой-то missing ничкго в скобки не заключается
например в том-же "урок-батники" нет никакого missing
параметры инструкция заключены в скобки

gora 05-08-2010 15:09 1467469

Цитата:

Цитата RUVATA
if %Key%=="N" »

Здесь у Вас ошибка. Переменная %Key% не содержит кавычек, а сравниваете Вы ее с N в кавычках. Либо уберите кавычки совсем (но будет вылетать при пустом вводе) либо добавьте кавычки и в первую часть сравнения:
Код:

if "%Key%"=="N"
Либо так:
Код:

if %Key%#==N#
А ключ /i Вы используете правильно и целесообразно, можете его вернуть на место.

PS
Цитата:

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

Не всегда не требует! И написание с двоеточием тоже правильное.

deepred 05-08-2010 15:13 1467472

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 1467476

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


Время: 06:00.

Время: 06:00.
© OSzone.net 2001-