Как в командной строке сделать бесконечный текст
Перейти к содержимому

Как в командной строке сделать бесконечный текст

  • автор:

Как создать бесконечный цикл в командном файле Windows?

Это в основном то, что я хочу в пакетном файле. Я хочу иметь возможность повторно запускать «Do Stuff» всякий раз, когда я нажимаю любую клавишу, чтобы пройти «Pause».

Похоже, в пакете доступны только for циклы, а в пакете нет while циклов. Как мне тогда создать бесконечный цикл?

6 ответов

Как насчет использования старого доброго (?) goto ?

См. Также это более полезный пример.

Действительно бесконечный цикл, считая от 1 до 10 с шагом 0.
Вам нужно бесконечное или большее количество шагов, чтобы достичь 10.

Это может быть полезно, если вам нужен действительно бесконечный цикл, поскольку он намного быстрее, чем версия goto :loop , потому что цикл for полностью кэшируется один раз при запуске.

Как в командной строке сделать бесконечный текст

Команда FOR задает запуск некоторой команды для каждого файла из заданного множества.

Работу команды for можно охарактеризовать так:

a) получение диапазона данных
b) присвоить переменной цикла for (например %%G) значение из диапазона данных
c) выполнить команду (иногда в команде участвует %%G, например, в качестве параметра)
d) выполнить шаги a), b), c), пока не будет достигнуто конечное значение из диапазона значений переменной цикла.

Очень хорошо команда for описана в справке w2k.

Синтаксис

Параметры команды for следующие:

Параметр Описание
<%% | %>< переменная > Обязательный элемент, который представляет замещаемое значение. Используйте один знак %, чтобы выполнить команду for из командной строки (не в командном файле). Два знака %% используются для команды for, выполняемой в составе командного файла (*.bat или *.cmd). Имена переменных чувствительны к регистру символов, и должны быть составлены из символов букв алфавита (например %a, %b или %c).
(< множество >) Обязательный элемент, указывает на один или несколько файлов, каталогов или текстовых строк, или диапазон значений, по которому должна проходить итерация команды for. Наличие круглых скобок обязательно.
< команда > Обязательный элемент, который указывает команду, выполняемого для каждого элемента множества (см. предыдущий параметр).
ПараметрыКоманднойСтроки Задает параметры командной строки, необходимые для использования с указанной командой (см. предыдущий параметр).
/? Отображение справки в командной строке для команды for.

Команду for можно использовать в командном файле (*.bat, *.cmd) или непосредственно запускать в командной строке.

Атрибуты. К команде for применяются перечисленные ниже атрибуты.

• В команде for переменная %переменная (или %%переменная) будет заменяться текстовой строкой из заданного параметра множество, пока параметр команда не обработает все файлы этого множества.
• Имена параметров переменная команды for учитывают регистр буквы, они являются глобальными, и одновременно может быть активно не больше 52 переменных.
• Для обозначения параметра переменная можно использовать любые знаки, кроме цифр 0–9, чтобы не было конфликта с параметрами пакетных файлов %0–%9. Для простых пакетных файлов вполне достаточно обозначений с одним знаком, например %%f.
• В сложных командных файлах могут быть использованы и другие обозначения для параметра переменная.

Задание множества файлов. Параметр множество может представлять группу файлов или несколько групп файлов. Для задания групп файлов можно использовать подстановочные знаки (* и ?). Следующие множества файлов являются допустимыми:

(*.doc)
(*.doc *.txt *.me)
(jan*.doc jan*.rpt feb*.doc feb*.rpt)
(ar??1991.* ap??1991.*)

Когда используется команда for, первое значение в параметре множество заменяет параметр %переменная (или %%переменная), а затем для обработки этого значения выполняется указанная команда. Это продолжается до тех пор, пока не будут обработаны все файлы (или группы файлов), которые соответствуют значению параметра множество.

in и do. Ключевые слова in и do не являются параметрами, но они требуются для работы команды for. Если какое-то из этих слов пропущено, на экран будет выведено сообщение об ошибке.

Использование дополнительных форм команды for. Если расширения командного процессора разрешены (по умолчанию), то поддерживаются следующие дополнительные формы команды for.

Если параметр множество содержит подстановочные знаки (* и ?), команда, указанная в параметре команда, выполняется для каждого каталога (кроме множества файлов в указанном каталоге), совпадающего с параметром множество. Используется следующий синтаксис.
for /D <%% | %>переменная in (множество) do команда [ПараметрыКоманднойСтроки]

Проходит по дереву каталогов с корнем в [диск:]путь, выполняя инструкцию for для каждого каталога в дереве. Если после ключа /R не задан каталог, предполагается текущий каталог. Если параметр множество задан одной точкой (.), то команда просто перечислит каталоги в дереве. Используется следующий синтаксис.
for /R [[диск:]путь] <%% | %>переменная in (множество) do команда [ПараметрыКоманднойСтроки]

• Итерация диапазона значений

Используйте переменную итерации для установки начального значения (НачальноеЗначение#), а затем перемещайтесь по диапазону значений, пока значение не превысит конечное значение множества (КонечноеЗначение#). /L выполнит итерацию, сравнив параметр НачальноеЗначение# с параметром КонечноеЗначение#. Если параметрНачальноеЗначение# меньше параметра КонечноеЗначение#, то выполняется команда. Когда переменная итерации превысит параметр КонечноеЗначение#, командная оболочка покидает цикл. Также можно использовать отрицательный параметр шаг# для перемещения в диапазоне убывающих значений. Например, (1,1,5) создает последовательность «1 2 3 4 5», а (5,-1,1) создает последовательность «5 4 3 2 1». Используется следующий синтаксис.
for /L <%% | %>переменная in (НачальноеЗначение#,шаг#,КонечноеЗначение#) do команда [ПараметрыКоманднойСтроки]

• Итерация и разбор файлов

Разбор файлов следует использовать для обработки вывода команды, строк и содержимого файла. Используйте переменные итерации для определения содержимого или строк, которые требуется проверить. Параметр КлючевыеСловаРазбора используется для изменения разбора. Используйте параметр маркера КлючевыеСловаРазбора для указания маркеров, которые воспринимаются как переменные итерации. Примечание. Без параметра маркера ключ /F проверяет только первый маркер.

Разбор файлов состоит в чтении вывода, строки или содержимого файла, разбиении его на отдельные строки текста и разборе каждой строки на ноль или маркеры. Цикл программы for затем вызывается с переменной итерации, установленной в маркер. По умолчанию /F передает первый отделенный пробелом элемент из каждой строки каждого файла. Пустые строки пропускаются. Используется также другой синтаксис.
for /F [«КлючевыеСловаРазбора»] <%% | %>переменная lin (МножествоИменФайлов) do команда [ПараметрыКоманднойСтроки]
for /F [«КлючевыеСловаРазбора»] <%% | %>переменная in («СимвольнаяСтрока») do команда [ПараметрыКоманднойСтроки]
for /F [«КлючевыеСловаРазбора»] <%% | %>переменная in (‘команда’) do команда [ПараметрыКоманднойСтроки]

Аргумент МножествоИменФайлов задает одно или несколько имен файлов. Каждый файл открывается, считывается и обрабатывается до перехода к следующему файлу параметра МножествоИменФайлов. Чтобы переопределить стандартное поведение разбора, укажите параметр «КлючевыеСловаРазбора». Это строка, заключенная в кавычки, которая содержит одно или несколько ключевых слов для указания различных режимов разбора.

Если используется параметр usebackq, используйте один из приведенных ниже синтаксисов:
for /F [«usebackqКлючевыеСловаРазбора»] <%% | %>переменная in («МножествоИменФайлов») do команда [ПараметрыКоманднойСтроки]
for /F [«usebackqКлючевыеСловаРазбора»] <%% | %>переменная in (‘СимвольнаяСтрока’) do команда [ПараметрыКоманднойСтроки]
for /F [«usebackqКлючевыеСловаРазбора»] <%% | %>переменная in (‘команда’) do команда [ПараметрыКоманднойСтроки]

В приведенной ниже таблице перечислены ключевые слова разбора, которые используются для параметра КлючевыеСловаРазбора.

Ключевое слово Описание
eol=c Задает символ конца строки (только один символ).
skip=N Задает число строк, пропускаемых в начале файла.
delims=xxx Задает набор разделителей. Заменяет набор разделителей по умолчанию, состоящий из пробела и символа табуляции.
tokens=X,Y,M-N Задает элементы, передаваемые из каждой строки в тело цикла for при каждой итерации. В результате размещаются дополнительные имена переменных. Форма M-N задает диапазон, указывающий элементы с M-го по N-ый. Если последним символом строки tokens= является звездочка (*), то размещается дополнительная переменная, в которую помещается остаток строки после разбора последнего элемента.
usebackq Задает возможность использования кавычек для имен файлов в параметре МножествоИменФайлов. Задает исполнение строки, заключенной в обратные кавычки, как команды, а строки в одиночных кавычках — как команды в символьной строке.

Были расширены модификаторы подстановок для ссылок на переменные в for. Приведенная ниже таблица перечисляет варианты синтаксических конструкций (на примере переменной I).

Как создать бесконечный цикл в командном файле Windows?

Это в основном то, что я хочу в пакетном файле. Я хочу иметь возможность повторно запускать «Do Stuff» всякий раз, когда я нажимаю любую клавишу, чтобы пройти «Pause».

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

задан 30 марта ’11, 11:03

Вы спрашиваете о пакетном файле Windows / DOS? — thkala

Да, извините за расплывчатость, сделаю дополнение к ОП. — sooprise

+1 ой, другого ответа я не заметил! — PA.

Ты можешь использовать For Command Or Ссылка — user9556248

6 ответы

Как насчет использования хороших (?) Старых goto ?

Смотрите также это для более полезного примера.

ответ дан 30 мар ’11, в 15:03

нехорошо: D иногда быстрее, но никогда не хорошо: D хорошо, есть только одно хорошее место для goto — в самом низком программировании x) — jave.веб

Я согласен с jave.web, вам следует использовать предложенный ниже цикл for. Вы почти никогда не должны использовать goto в своем коде, даже если это сценарий. Гото был крутым в 80-е в дни GW Basic. — ДудлКана

Я не согласен с jave.web — в goto нет ничего плохого, если вы используете его правильно. Например, я собираюсь использовать его, чтобы гарантировать, что программа, выполняемая в цикле, автоматически возрождается, если она умирает по какой-либо причине. Однако может быть разумно поставить небольшое ожидание в цикле, чтобы остановить перегрузку процессора, если моя программа по какой-то причине мгновенно умирает. — Джон Хант

@theonlygusti Не работает как однострочная команда, как и следовало ожидать :lbl & echo Ooops & goto lbl ; но комментарий @Nicholi ниже делает: FOR /L (1,0,2) DO @echo Oops — JimB

@JimB в вашей команде (1 was unexpected at this time. ошибка, думаю так лучше: stackoverflow.com/a/8846529/1407491 — Наби КАЗ

Неограниченный цикл в однострочная команда для использования в cmd окна:

CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

Интересно. А какова была цель-то? И почему именно «for»?

4 Ответ от smaharbA 2012-09-05 00:41:32

  • smaharbA
  • Разработчик
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

5 Ответ от alexii 2012-09-05 00:47:57

  • alexii
  • Разработчик
  • Неактивен
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

smaharbA, всё равно не понятно. Поясните словами, пожалуйста.

6 Ответ от smaharbA 2012-09-05 00:50:57 (изменено: smaharbA, 2012-09-05 00:52:09)

  • smaharbA
  • Разработчик
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

часы в заголовке командной строки, можно конечно и стартануть пакетник, но подумалось как из самой строки
позырил свои "болванки" пакетников и обнаружил в них for /l %x in (0,0,0)

навеяло увиденной темой про powershell и часы в заголовке

7 Ответ от alexii 2012-09-05 01:31:24

  • alexii
  • Разработчик
  • Неактивен
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

smaharbA, спасибо, ясно. Я так и предполагал. У меня, правда, эти часы «стоят» , потому решил уточнить.

8 Ответ от smaharbA 2012-09-05 01:45:38

  • smaharbA
  • Разработчик
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

там суть в start "" /b из командной строки

9 Ответ от alexii 2012-09-05 07:42:01

  • alexii
  • Разработчик
  • Неактивен
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

Шут его знает. В оригинальном виде часы у меня просто замирали в начальном состоянии.

10 Ответ от smaharbA 2012-09-05 08:04:44 (изменено: smaharbA, 2012-09-05 08:06:42)

  • smaharbA
  • Разработчик
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

идея была в том, что бы запустить работающие часы которые не будут препятствовать интерактивной работе
может в каких системах и не отрабатывает

у меня отрабатывает и при запуске в командном интерпретаторе и если запустить в фаре, мигает только в фаре при переходе по каталогам и в момент начала просмотра/редактирования файлов

11 Ответ от Аскет 2012-09-06 03:48:13

  • Аскет
  • Заблокирован
  • Неактивен
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

Ох ты какой трюк. Работает
Достойно Коллекции.

12 Ответ от Arigato 2012-12-16 21:17:01

  • Arigato
  • Разработчик
  • Неактивен
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

Когда запускаю эти часы, то avp.exe (Касперский) загружает процессор почти на 50%, закрываю окно консоли с часами, загрузка падает до 0%. Странная реакция.

13 Ответ от wisgest 2013-01-07 02:23:31 (изменено: wisgest, 2013-01-07 02:37:43)

  • wisgest
  • Разработчик
  • Неактивен

Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

У меня эти часы стояли, но лишь теперь понял почему. Возможно, у alexii та же причина. Просто у меня CMD.EXE сразу запускается с ключом /V (через ярлык), поэтому текущее значение !date! !time! подставлялось в командную строку уже при запуске. А вот, если экранировать восклицательные знаки

то работает независимо от того, была включена перед этим отложенная подстановка или нет.
(Ну, или так

Можно и в Коллекцию.

14 Ответ от smaharbA 2013-01-07 20:49:35

  • smaharbA
  • Разработчик
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

15 Ответ от Aскет 2013-01-09 03:14:48

  • Aскет
  • Заблокирован
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

Arigato, грузит систему — пинг [самопинг?] в качестве паузы (кстати основательно).
А каперский — как вытекающее.

Писал я как-то для замены этих неудобств процедуру — концептуальную фишку (чуть более точнее и с градацией до милисекунд) в качестве паузы.

Надо будет попозже в коллекцию закинуть.

16 Ответ от alexii 2013-01-09 06:37:16

  • alexii
  • Разработчик
  • Неактивен
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

Arigato, грузит систему — пинг [самопинг?] в качестве паузы (кстати основательно).

Не вытекающее. Это и есть причина.

17 Ответ от Aскет 2013-01-09 10:05:11

  • Aскет
  • Заблокирован
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

Это когда как — смотря в какой ситуации и на какой машинке.

А причина или следствие, кто его знает.

18 Ответ от wisgest 2013-01-10 05:29:38

  • wisgest
  • Разработчик
  • Неактивен

Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

грузит систему — пинг [самопинг?] в качестве паузы (кстати основательно).

0-2% — это основательно?

Писал я как-то для замены этих неудобств процедуру — концептуальную фишку (чуть более точнее и с градацией до милисекунд) в качестве паузы.

19 Ответ от Aскет 2013-01-10 07:34:22 (изменено: Aскет, 2013-01-11 06:27:56)

  • Aскет
  • Заблокирован
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

Бывает что куллер процессора начинает изрядно гудеть (вероятно — угнетает фаервол) и доставляет неудобства.

Чтобы Вы в очередной раз, в порыве конгнитивного диссонанса и соблимированной злобы (накопленной за пол-года мучений от борьбы с моей грандиозной эНЛПятиной) обгадили мой пусть даже высакоинтеллектуальный, пусть ДэХаЕшный и сверхконцептуальный, но всё же "банный стыд"?

Зачем же. Да и прав что-то нехватает чтоб в Коллекцию "гадить". ))

20 Ответ от Aскет 2013-01-10 07:51:02 (изменено: Aскет, 2013-01-10 07:59:55)

  • Aскет
  • Заблокирован
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

21 Ответ от Aскет 2013-01-10 07:53:51 (изменено: Aскет, 2013-01-10 08:03:53)

  • Aскет
  • Заблокирован
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

А давайте лучше устроим конкурс (тест Айзека)) — я поясняю суть концепта, а вы предложите свои варианты решения второй части задачи. А-ля "мозговой штурм".
Думаю наберётся несколько решений. Может у кого-то будет и пооптимальнее и поинтереснее чем у меня.

Суть проста: start /wait . .
Остаётся лишь подобрать подходящую комбинацию команд, которая отрабатывалась бы за определённое время (1s. или N-ms), но главное чтобы была стабильность и без нагрузки на ресурсы.
Варианты?

22 Ответ от wisgest 2013-01-10 17:03:40 (изменено: wisgest, 2013-01-10 17:13:38)

  • wisgest
  • Разработчик
  • Неактивен

Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

в порыве конгнитивного диссонанса и соблимированной злобы, накопленной за пол-года мучений моей грандиознейшой эНэЛПятиной, обгадили мой пусть даже высакоинтеллектуальный, ДэХаЕшный

Из всех слов понял только «пол-года», да и то не понял: как ты их насчитал?
Во-вторых, моя злоба (которой нет) не играет никакого значения:

В очередной раз вы попытались скомпрометировать грандиозного Аскета и настроить против него участников. Чтож, Вам повезло — повёлся даже модератор, питающий ко мне непрофессианальную злобу.
Вот вы то и есть настоящий мистификатор и провокатор.

— как будто мои намерения оправдали бы твои ошибки и флуд в Коллекции.

Да и прав не хватает чтоб в Коллекцию "гадить".

Правильно, не надо гадить. Пиши здесь, мы посмотрим.

Суть проста: start /wait . .
… но главное чтобы была стабильность и без нагрузки на ресурсы.

START /WAIT нужно, если вызывается неконсольное приложение, значит — внешняя программа; а это всё равно обращение к диску, т.е. нагрузка на ресурсы.

Но, думаю, ты просто блефуешь.

23 Ответ от Aскет 2013-01-11 07:09:23 (изменено: Aскет, 2013-01-11 07:28:58)

  • Aскет
  • Заблокирован
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

Ну вот, wisgest опять завалил тест Айскета уже с первой попытки, даже не начав его решать.

> . если вызывается неконсольное приложение.
Ну с такой железной логикой ("If-Then-Else") очень сложно поспорить.

> значит — внешняя программа
Вообще говоря, командный интерпретатор cmd.exe, за исключением скудного набора встроенных ф-ций for,if,call. основан на вызове внешних программ (т.е. команд). Это так, на заметку.

p.s. start/w/b echo Я НЕвнешнее, ниразу НЕнеконсольное app.

24 Ответ от wisgest 2013-01-11 16:30:47

  • wisgest
  • Разработчик
  • Неактивен

Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

start/w/b echo Я НЕвнешнее, ниразу НЕнеконсольное app.

START/W/B APP.EXE — если APP.EXE консольное, что-то не вижу преимуществ перед простым вызовом APP.EXE (может, изменение приоритета?).
START/W/B INNER_COMMAND — это на самом деле
START/W/B %ComSpec% /K INNER_COMMAND — т.е. никуда не годится.

25 Ответ от Aскет 2013-01-11 18:57:48 (изменено: Aскет, 2013-01-11 19:29:51)

  • Aскет
  • Заблокирован
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

Эко Вас занесло. "start — для гуи, Гуя, хотя нет. Куя. Но тут воще хоть и куя, но ведь cmd с ключок /К. Не, не годится".
Суть концепта (гл. половину) я показал.
Не нужно пытаться опровергать — всё работает.
От вас только ком.строка.

Из крайности в крайность, То "блеф", то "start не тянет", то перебор попыток опровержения.
Это даже не "If-Then-Else", А самый натуральный "Do Loop без условия выхода цикла".

Завязывайте с демагогией, рефрейминг — это не Ваше. )

26 Ответ от smaharbA 2013-01-11 20:05:26

  • smaharbA
  • Разработчик
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

debug.exe далее хоть 15 мс, меньшего не получите, получите в любой момент до 100 нс точность, но цикл с меньшим периодом нет

27 Ответ от wisgest 2013-01-11 21:54:38

  • wisgest
  • Разработчик
  • Неактивен

Re: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)

Из крайности в крайность, То "блеф", то "start не тянет"

Потому и блеф, что не тянет.
Не хочешь делится — не надо, но завязывай с флеймом и кривлянием <…>.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *