Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 0
Регистрация: 13.09.2018
Сообщений: 110
1

Прерывание (завершение) цикла For, Echo в цикле и спецсимволы

03.12.2020, 14:32. Показов 1947. Ответов 7

Author24 — интернет-сервис помощи студентам
Уважаемый FlasherX написал код для цикла со спецсимволами и выводом результата в файл:
  1. Первый код
    Цитата Сообщение от FlasherX Посмотреть сообщение
    Windows Batch file
    1
    2
    3
    4
    5
    
    @setlocal enabledelayedexpansion
    @for /l %%c in (1,1,20) do @set /p email%%c="Введите %%c EMail: " &set "Emails=!Emails!|!email%%c!"
    @echo !Emails:~1!
    @pause>nul
    @echo !Emails:~1!>MyLogFileTemp.txt
    Пытаюсь "допилить" под свои нужды:
    Windows Batch file
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    @echo off
    @Set AllEmails=
    @set "MyUserProfile=%USERPROFILE%"
    @Set "MyFolderLog=%MyUserProfile%\RegLog"
    rem Необходимо проверить на наличие папки. Это сделано. Папка есть, ошибка не здесь.
    @set "MyLogFileTemp=%MyFolderLog%\LogTemp.txt
    @setlocal enabledelayedexpansion
    @set /p EMailQuantity="Количество EMail  "
    @for /l %%c in (1,1,%EMailQuantity%) do @set /p email%%c="Введите %%c EMail:  " & If "!email%%c!==""" (call:Stoped) &Echo !email%%c! &set "Emails=!Emails!|!email%%c!" 
     
    :Stoped
    @echo !Emails:~2!
    Set "AllEmails=!Emails:~!"
    endlocal
    @Echo "%AllEmails%"
    @pause
    ::::::::::::::::::::::
    &If "!email%%c!==""" (call:Stoped) но предпологаю, что ошибка здесь, возможно из-за обилия кавычек, и с call тоже...
    И так: & If "!email%%c!==""" (set EMailQuantity=%%c)

    И после endlocal уже не работает @Echo "%AllEmails%"
    не смог разобраться, как в дальнейшем, после endlocal использовать значение в переменной.
    Опираясь на:
  2. Второй код
    Кликните здесь для просмотра всего текста
    Цитата Сообщение от NAWARRO Посмотреть сообщение
    классическое решение досрочного выхода из цикла
    Windows Batch file
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    setlocal enableextensions enabledelayedexpansion
    set /a err=0
    for /l %%a in (1,1,100000) do call:CompWork %%a
    :m
    endlocal
    exit
    :CompWork
    set /a err=%err%+1
    if %err% EQU 100 goto m
    Это превосходно! Но...


    Почему не работает echo %%a (в спойлере) в моей "редакции" как во Втором коде?
    Кликните здесь для просмотра всего текста

    7 строка
    Windows Batch file
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    @echo off
    setlocal enableextensions enabledelayedexpansion
    set /p StopedAt="Число для остановки  "
    set /a err=0
    for /l %%a in (1,1,100000) do call:CompWork %%a
    :m
    echo %%a
    endlocal
    Pause
    exit
    :CompWork
    set /a err=%err%+1
    if %err% EQU %StopedAt% goto m
    В консоли пишет только что Echo Включен...
Здесь вроде разобрался, хотел в цикле еще раз вывести вводимое значение &Echo !email%%c!:
Кликните здесь для просмотра всего текста
Windows Batch file
1
2
3
4
5
6
@echo off
@setlocal enabledelayedexpansion
@set /p EMailQuantity="Количество EMail  "
@for /l %%c in (1,1,%EMailQuantity%) do @set /p email%%c="Введите %%c EMail:  " &Echo !email%%c! &set "Emails=!Emails!|!email%%c!" 
@echo !Emails:~2!
@pause


Грубо:
Как "Подружить" Первый код и Второй код, что бы при вводе пустого &If "!email%%c!==""" (set EMailQuantity=%%c) значения в переменную !email%%c! принудительно остановить цикл. :EOF прям сосвем не комильфо...

Это от alpap не помогло.
И это от ComSpec
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2020, 14:32
Ответы с готовыми решениями:

Вывести символы, используя только три ECHO. Echo '0', Echo '*', Echo '\n' (использовать цикл)
Вывести символы, используя только три ECHO. Echo '0', Echo '*', Echo '\n' (использовать цикл)....

Echo в цикле не работает
<?php $ks = 0; $opencsv = fopen("tabl.csv","r"); while(($mas=fgetcsv($opencsv,0,"|"))!=false){...

Зависает прерывание клавиатуры в цикле
Товарищи, программа зависает после вывода 3х раз 'Hello World!', а должна завершать свою работу....

echo в каждый файл цикла FOR /L
День добрый! Как нужно изменить скрипт, чтобы в каждый созданный файл: а) добавить в начале...

7
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
03.12.2020, 17:11 2
совершенно не вчитывался в написанное, очень бегло:
Цитата Сообщение от nordri Посмотреть сообщение
&If "!email%%c!=="""
найди отличия
Windows Batch file
1
If "!email%%c!"=="" команда
Добавлено через 3 минуты
по остальному без четкого ТЗ и желаемой цели разговора не будет.
1
1 / 1 / 0
Регистрация: 13.09.2018
Сообщений: 110
03.12.2020, 17:29  [ТС] 3
Цитата Сообщение от alpap Посмотреть сообщение
без четкого ТЗ и желаемой цели
Прошу не судить строго новичка...
Если %EMailQuantity% равному 10 (допустим), но при вводе в Переменную !email%%c!цикла ничего "" (или пробела, не так важно, главное в нужное место поставить условие), то остановить цикл пройдя его не полностью (не вводив все 10 значений в переменную !email%%c!). Но есть маленькое НО. !Emails:~2! Нужно использовать дальше.
Наверное Set "AllEmails=!Emails:~!"
endlocal
@Echo "%AllEmails%"
Скорее всего не заработает.

Добавлено через 9 минут
Цитата Сообщение от nordri Посмотреть сообщение
&If "!email%%c!==""" (call:Stoped) но предпологаю, что ошибка здесь, возможно из-за обилия кавычек, и
Да, мое предположение подтвердилось, но это пока не помогло...
Код
@for /l %%c in (1,1,%EMailQuantity%) do @set /p email%%c="Введите %%c EMail:  " &Echo !email%%c! &If "!email%%c!"=="" (set EMailQuantity=!c!)&set "Emails=!Emails!|!email%%c!"
Не работоспособно:
Я пытаюсь в цикле изменить количество "Итераций" (могу не правильно называть) @for /l %%c in (1,1,%EMailQuantity%). Возможно ли это?
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
03.12.2020, 19:00 4
повторюсь
Цитата Сообщение от alpap Посмотреть сообщение
без четкого ТЗ и желаемой цели разговора не будет.
выше у вас написанное - не ТЗ, просто мысли вслух.
0
1 / 1 / 0
Регистрация: 13.09.2018
Сообщений: 110
03.12.2020, 19:17  [ТС] 5
Я не знаю, как остановить цикл при вводе пустого значения посередине цикла.
Ввели 3 EMail. На 4 EMail пустой ввод (просто клавиша Enter), цикл надо завершить, независимо от значения в %EMailQuantity%. И использовать значение !Emails:~2! дальше
Цитата Сообщение от nordri Посмотреть сообщение
Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
@setlocal enabledelayedexpansion
@set /p EMailQuantity=10
@for /l %%c in (1,1,%EMailQuantity%) do @set /p email%%c="Введите %%c EMail:  " &Echo !email%%c! &set "Emails=!Emails!|!email%%c!" 
@echo !Emails:~2!
Set "AllEmails=!Emails:~!"
Echo "%AllEmails%"
rem Echo "%AllEmails%">>Text.txt
pause

Не по теме:

Цитата Сообщение от alpap Посмотреть сообщение
повторюсь
Сообщение от alpap
без четкого ТЗ и желаемой цели разговора не будет.
выше у вас написанное - не ТЗ, просто мысли вслух.
Да, вы правы... Благодарен за науку.
В правильно сформулированом вопросе уже половина ответа.
У меня адекватные мысли, и стоит ли их описывать (Озвучивать)? Или я безнадежен?

0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
03.12.2020, 21:46 6
Цитата Сообщение от nordri Посмотреть сообщение
остановить цикл при вводе пустого значения посередине цикла
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
set "z="a" "b" "" "d" "e""
for %%a in (%z%) do (
 if not "%%~a"=="" (
  echo %%a
 ) else (
  echo Пусто& pause>nul
 )
)
pause
или
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
set "z="a" "b" "" "d" "e""
for %%a in (%z%) do (
 if not "%%~a"=="" (
  echo %%a
 ) else (
  call :#
 )
)
pause& exit
 
:#
 echo Пусто& pause>nul
exit /b
1
1 / 1 / 0
Регистрация: 13.09.2018
Сообщений: 110
03.12.2020, 22:48  [ТС] 7
Цитата Сообщение от alpap Посмотреть сообщение
set "z="a" "b" "" "d" "e""
Напоминает массив данных...

Добавлено через 52 минуты
Правда это не помогло...
Цитата Сообщение от alpap Посмотреть сообщение
Кликните здесь для просмотра всего текста
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
set "z="a" "b" "" "d" "e""
for %%a in (%z%) do (
 if not "%%~a"=="" (
  echo %%a
 ) else (
  call :#
 )
)
pause& exit
:#
 echo Пусто& pause>nul
exit /b
Почти то... Но:
Цитата Сообщение от nordri Посмотреть сообщение
цикл надо завершить, независимо от значения в %EMailQuantity%. И использовать значение !Emails:~2! дальше
Мне требуется что то вроде этого:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
@set B=1
set "z="a" "b" "" "d" "e""
for %%a in (%z%) do (
 if not "%%~a"=="" (
  echo %%a &set "all=!all!|!a!"
 ) else (
  call :#
 )
)
pause& exit
 
:#
echo Пусто&goto Work &pause>nul 
exit /b
 
:Work
echo !all:~1!
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
03.12.2020, 23:03 8
Цитата Сообщение от nordri Посмотреть сообщение
что то вроде этого:
совершенно непонятно что надо.
0
03.12.2020, 23:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2020, 23:03
Помогаю со студенческими работами здесь

Прерывание цикла!
каким образом можно прервать while путем ввода какого нибудь символа, чтобы не нужно было при...

Прерывание цикла for
Собственно, вопрос в чем. Я запускаю на выполнение постройку графика, в котором количество точек...

Прерывание цикла
Здравствуйте. Есть ф-ция для загрузки нескольких фото.Нужно ограничить кол-во до пяти и вывести...

Прерывание цикла
Здравствуйте! Помогите решить задачу, пожалуйста! Компьютер 50 раз генерирует случайные числа...

Прерывание цикла
1. Используя оператор цикла, вычислите значения синуса при 21 значении аргумента от 0,2 до 4 с...

Прерывание цикла
Добрый день! Подскажите пожалуйста Как прервать цикл через определенный период, но что бы потом он...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru