Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
gurlov
3 / 3 / 1
Регистрация: 27.05.2014
Сообщений: 369
1

Не с первого раза срабатывает диалог "YES/NO" с пользователем

27.11.2015, 13:39. Просмотров 844. Ответов 3
Метки нет (Все метки)

Не могу понять почему вот такой код:
Windows Batch file
1
2
3
4
5
6
7
8
:m2
    set /P DEPT1="[Warning]: Заменить S11App.ini новым файлом? [y/n]: "
    if not defined DEPT1 (echo [ERROR]: Ваш выбор не распознан & goto m2)
    if /I "%DEPT1%" EQU "y" (echo yes & Exit /b 0)
    if /I "%DEPT1%" EQU "n" (echo no & Exit /b 0)
 
    echo [ERROR]:Вы ввели недопустимое значение, повторите.
    goto m2
всегда два раза спрашивает:
[Warning]: Заменить S11App.ini новым файлом? [y/n]: y
[ERROR]:Вы ввели недопустимое значение, повторите.
[Warning]: Заменить S11App.ini новым файлом? [y/n]: y
yes
или
[Warning]: Заменить S11App.ini новым файлом? [y/n]: n
[ERROR]:Вы ввели недопустимое значение, повторите.
[Warning]: Заменить S11App.ini новым файлом? [y/n]: n
no
Подскажите, пожалуйста.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2015, 13:39
Ответы с готовыми решениями:

Открыть диалог "обзор папок"
Вопрос не совсем имеет отношение к cmd\bat, но все же спрошу здесь: как через...

"Перечень файлов из указанных пользователем каталогов, удовлетворяющих условию: скрытый и системный"
Задание: Написать и отладить пакетный файл, который выдает перечень файлов...

"Перечень файлов из указанных пользователем каталогов, удовлетворяющих условию: скрытый и системный"
Написать и отладить пакетный файл, который выдает перечень файлов из указанных...

"По выбору даты пользователем архивировать все файлы в каталоге и подкаталогах двухнедельной давности"
Написать и отладить пакетный файл, который по выбору даты пользователем будет...

Избавиться от сообщений "Файл не найден", "Системе не удается найти указанный путь", "Устройство не готово"
Здравствуйте. В батнике присутствует поиск файлов: for %%i in (c d e f g h i j...

3
greg zakharov
Покинул форум
2211 / 880 / 248
Регистрация: 07.05.2015
Сообщений: 1,764
27.11.2015, 21:33 2
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
  setlocal
    :begin
    set /p "ret=Replace file? [y/n]: "
    (echo:%ret%|>nul findstr /irc:"^[y|n]$")&&(
      (echo:%ret%|>nul findstr /irc:"^y$")&&echo:yes||echo:no
      goto:eof
    )||(echo:Wrong choose, try again.&goto:begin)
  endlocal
exit /b 0
1
sov44
1760 / 744 / 128
Регистрация: 09.04.2011
Сообщений: 1,314
28.11.2015, 11:05 3
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
@echo off
:n
echo.
set /p DEPT1="[Warning]: Заменить S11App.ini новым файлом? [y/n]: "
if /i not defined DEPT1 (cls& goto n)
if /i "%DEPT1%"=="y" (echo yes& goto d)
if /i "%DEPT1%"=="n" (echo no& goto d)
Echo Не правильно сделан выбор задания& pause& cls& goto n
:d
echo Продолжение кода
pause
exit /b
1
gurlov
3 / 3 / 1
Регистрация: 27.05.2014
Сообщений: 369
28.11.2015, 13:34  [ТС] 4
Уважаемые greg zakharov и sov44!
Спасибо Вам за ваши примеры, я точно воспользуюсь одним из них. Но есть одна проблема:
Оба ваших варианта прекрасно работают в отдельности, но в составе всего моего кода опять происходит повторный вопрос к пользователю. Из-за чего это происходит я понять пока не могу.
Вот весь мой код с моим и вашими примерами:
Кликните здесь для просмотра всего текста
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
@echo off
 
set DistrFolder=\\10.145.150.253\share\SAMSON
set ProgramFolder=%systemdrive%\samvist
set AppFolder=%appdata%\samson-vista
set Link="%DistrFolder%\SAMSON.lnk"
 
:: проверка доступности сервера
set IPserver=10.145.150.253
ping -n 2 %IPserver% |>nul find /i "TTL=" && set status=ok
if defined status (echo [OK]: сервер %IPserver% доступен) else (
    echo [ERROR]: недоступен сервер %IPserver% 
    echo [ERROR]: установка невозможна, мы покидаем вас
    pause
    exit 0
    )
 
:: разбираемся с INI файлом S11App.ini
call :INI
 
:: копируем программу и ярлык на рабочий стол
If Not Exist %ProgramFolder% md %ProgramFolder%
Xcopy \\10.145.150.253\public\samvist\*.* %ProgramFolder% /d /y /s /v
Xcopy %DistrFolder%\samson_autoupdate.bat %ProgramFolder% /d /y /s /v
 
if exist "%userprofile%\Рабочий стол" copy /y %Link% "%userprofile%\Рабочий стол\SAMSON.lnk"
if exist "%userprofile%\Desktop" copy /y %Link% "%userprofile%\Desktop\SAMSON.lnk"
 
:: если WinXP 32bit то устанавливаем пакеты Visual C++ 
ver|find "5.1" && echo устанавливаем Microsoft Visual C++ 2008 Redistributable && start /wait %ProgramFolder%\vcredist_x86(2).exe /Q
 
:: запускаем самсон 
echo .
echo [OK]: Поздравляем, установка SAMSON завершена!
start %ProgramFolder%\samson.exe
 
:: визуализация запуска дабы пользователь дождался появления окна программы
<nul set /p strTemp=[OK]: Запускаем это чудо.
FOR /L %%a IN (0,1,60) DO  (
ping -n 2 localhost > nul
<nul set /p TmpStr=.
)
exit 0
 
rem ===================== процедура определения INI файла =======================
:INI
If not Exist %AppFolder%\S11App.ini (call :choice & call :copyINI & Exit /b 0 ) else (
    echo [Warning]: Hа компьютере уже имеется файл S11App.ini.
    
    REM REM -------мой вариант------
    REM :m2
    REM set /P DEPT1="[Warning]: Заменить S11App.ini новым файлом? [y/n]: "
    REM if not defined DEPT1 (echo [ERROR]: Ваш выбор не распознан & goto m2)
    REM if /I "%DEPT1%" EQU "y" (call :choice & call :copyINI & Exit /b 0)
    REM if /I "%DEPT1%" EQU "n" (Exit /b 0)
 
    REM echo [ERROR]:Вы ввели недопустимое значение, повторите.
    REM goto m2
    REM )
    REM echo [ERROR]: Упс, что-то пошло не так, программа будет закрыта & pause && Exit 0
    
    REM -------вариант с форума 1------
    setlocal
    :begin
    set /p "ret=Replace file? [y/n]: "
    (echo:%ret%|>nul findstr /irc:"^[y|n]$")&&(
        (echo:%ret%|>nul findstr /irc:"^y$")&&(
            echo:YES__ & call :choice & call :copyINI & Exit /b 0
        )||echo:NO__ & Exit /b 0
        goto:eof 
    )||(echo:Wrong choose, try again.&goto:begin)
    endlocal
        
    REM REM -------вариант с форума 2------
    REM :n
    REM echo.
    REM set /p DEPT1="[Warning]: Заменить S11App.ini новым файлом? [y/n]: "
    REM if /i not defined DEPT1 (cls& goto n)
    REM if /i "%DEPT1%"=="y" (echo YES__& call :choice& call :copyINI& Exit /b 0)
    REM if /i "%DEPT1%"=="n" (echo NO__& Exit /b 0)
    REM Echo Не правильно сделан выбор задания& pause& cls& goto n
        
    )
echo [ERROR]: Упс, что-то пошло не так, программа будет закрыта & pause && Exit 0
        
rem =============================================================================
    
rem ====================== процедура выбора подразделения =========================
:choice
echo [OK]: Для какого подразделения установить настройки программы:
echo 1 - ВПО 50
echo 2 - ВПО 91
echo 3 - ВПО 105
echo 4 - ДПО 27
echo 5 - ДПО 60
echo 6 - ДПО 65
:m1
set /P DEPT="[OK]: Введите соответствующую цифру: "
if not defined DEPT (echo [ERROR]: Ваш выбор не распознан & goto m1)
if "%DEPT%"=="1" (set INI_File=%DistrFolder%\S11App_50.ini  & Exit /b 0)
if "%DEPT%"=="2" (set INI_File=%DistrFolder%\S11App_91.ini  & Exit /b 0)
if "%DEPT%"=="3" (set INI_File=%DistrFolder%\S11App_105.ini & Exit /b 0)
if "%DEPT%"=="4" (set INI_File=%DistrFolder%\S11App_27.ini  & Exit /b 0)
if "%DEPT%"=="5" (set INI_File=%DistrFolder%\S11App_60.ini  & Exit /b 0)
if "%DEPT%"=="6" (set INI_File=%DistrFolder%\S11App_65.ini  & Exit /b 0)
echo [ERROR]: Вы ввели недопустимое значение, повторите.
goto m1
echo [ERROR]: Упс, что-то пошло не так, программа будет закрыта & pause && Exit 0
rem =============================================================================
 
rem ====================== процедура копирования INI файла ======================
:copyINI
Xcopy %INI_File% %AppFolder%\S11App.ini /y /s /v
Exit /b 0
rem =============================================================================

Буду признателен за помощь ))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2015, 13:34

for /f "delims=" %%b in ('dir !DirName! /b /s /a-d') do () жрёт символы "!" и "^"
Добрый день, коллеги. День сегодня убил, но так и не понял что делать, может...

Диалог с пользователем
Итак, через set /p прошу пользователя ввести некое значение, которое задаю...

Поиск файлов с атрибутом "скрытый" ("hidden") на заданном дисковом томе с целью их дальнейшего удаления
Всем здравствуйте!!! Помогите пожалуйста создать батник. Задание: Поиск...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru