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

Как сделать бесконечную строку в cmd

  • автор:

How to Create an Infinite Loop in Windows Batch File?

An infinite loop in Batch Script refers to the repetition of a command infinitely. The only way to stop an infinitely loop in Windows Batch Script is by either pressing Ctrl + C or by closing the program.

Syntax: Suppose a variable ‘a’

Here, you need to know how to create a batch file in windows. It is very simple. First, copy the code in a notepad file and save this file with .bat extension. To run or execute the file, double click on it or type the file name on cmd.

Example 1: Let’s start by looping a simple command, such as ‘echo’. ‘echo‘ commands is analogous to ‘print’ command like in any other programming languages. Save the below code in a notepad file like sample.bat and double click on it to execute.

Output:

Infinite in Windows Batch Script

To stop this infinite loop, press Ctrl + C and then press y and then Enter.

Example 2: Suppose we want to loop the command ‘tree’. ‘tree’ command pulls and shows directory and file path in the form of a branching tree.

Note: ‘REM’ command is only used for typing comments in the batch script program, you can ignore them while typing the program. They are only put for the understanding of the program script and have no real use in the program. Here you can see the below option also.

How to create an infinite loop in Windows batch file?

This is basically what I want in a batch file. I want to be able to re-run «Do Stuff» whenever I press any key to go past the «Pause».

Looks like there are only for loops available and no while loops in batch. How do I create an infinite loop then?

6 Answers 6

How about using good(?) old goto ?

See also this for a more useful example.

Unlimited loop in one-line command for use in cmd windows:

enter image description here

A really infinite loop, counting from 1 to 10 with increment of 0.
You need infinite or more increments to reach the 10.

This could be useful if you need a really infinite loop, as it is much faster than a goto :loop version because a for-loop is cached completely once at startup.

Как сделать бесконечную строку в cmd

How to create an infinite loop in Windows batch file?

This is basically what I want in a batch file. I want to be able to re-run «Do Stuff» whenever I press any key to go past the «Pause».

Looks like there are only for loops available and no while loops in batch. How do I create an infinite loop then?

6 Answers 6

How about using good(?) old goto ?

See also this for a more useful example.

Unlimited loop in one-line command for use in cmd windows:

enter image description here

A really infinite loop, counting from 1 to 10 with increment of 0.
You need infinite or more increments to reach the 10.

This could be useful if you need a really infinite loop, as it is much faster than a goto :loop version because a for-loop is cached completely once at startup.

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

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

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

6 ответов

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

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

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

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

FOR /F

Loop command: against a set of files — conditionally perform a command against each item.

FOR /F processing of a text file consists of reading the file, one line of text at a time and then breaking the line up into individual items of data called ‘tokens’. The DO command is then executed with the parameter(s) set to the token(s) found.

If you want to process the File Names rather than the content of the files, use the FOR /F command_to_process variant, with DIR /b as the command.

FOR parameters (%%A – %%Z)

Read the main FOR introduction page for a full description of assigning the replaceable %%parameter.
FOR parameters are used in all variations of the FOR command, it is a good idea to get up to speed with writing a basic FOR command before trying the more complex FOR / F variant.

By default, /F breaks up each line within the file at each blank space " " , and any blank lines are skipped, this default parsing behavior can be changed by applying one or more of the «options» parameters. The option(s) must be contained "within quotes"

Within a FOR loop the visibility of variables is affected by SETLOCAL EnableDelayedExpansion, by default variable changes within the loop will not be visible until the loop completes.

usebackq

This option is useful when dealing with a filenameset that is a long filename containing spaces, it allows you to put double quotes around the filename.
Because double quotes are used to indicate a filename, it then uses single quotes instead of double quotes to indicate a text string and backquotes for a command to process. The backquote character ` is just below the ESC key on most keyboards.
Filenames which don’t contan spaces can still be referenced without using quotes.

Usebackq can be abbreviated to useback (undocumented.)

SKIP will skip processing a number of lines from the beginning of the file.
SKIP includes empty lines, but after the SKIP is complete, FOR /F ignores (does not iterate) empty lines.

The default end-of-line character is a semicolon ‘;’ when the FOR command reads a text file (or even a character string), any line that STARTS with the eol character will be ignored. In other words it is treated as a comment.
Use eol=X to change the eol character to X.

Often you will want to turn this feature off so that every line of your data file is processed, in theory "eol=" should turn this feature off, but in practice this fails to work correctly — it will set eol to whatever the next character is, often the quote or space character. One workaround is to set eol to some unusual character that you don’t expect to ever encounter in the data file e.g. "eol=€" or "eol=¬" . Another method is to escape every delimiter For /f tokens^=*^ delims^=^ eol^= %%a in (file.txt) do. (see forum for a discussion of this)

None of the options can be repeated, if you include say " eol=# eol=@ " then only the second, " eol=@ " is applied.

Delims

More than one delimiter can be specified so a string like ‘ abcd;efg+hijk;lmno;pqr ‘ can be broken up using "delims=;+" .

for /f "tokens=1,2,3,4,5 delims=;+" %%G in (filename.txt) do echo %%G %%H %%K

For simple FOR commands which only process one item at a time, use «delims code»>for /f "usebackq delims=" %%G in ("file 1.txt","file 2.txt","file 3.txt" ) do echo %%G

You can use almost any character as a delimiter, but they are case sensitive.

delims should always the last item in the options string "tokens=3 delims= " not "delims= tokens=3"
This is because the quotations around the options string do double duty as a terminator for the delims character(s), which is particularly important when that character is a space.

If you don’t specify delims it will default to «delims=<TAB><Space>»
This is different from the default delimiters for the CMD shell command line (Space,Tab,Comma,Equals,Semicolon). All of those can be specified as delimiters with the FOR command, but when using = as a delimiter it cannot be the last one in the list. So this is valid: "delims=;= " and this is not valid: "delims=; ="

Consecutive delimiters will be treated as one, even if they are different characters.

One special case is using a quote ( " ) as delimiter.
By default this will be misinterpreted as the end of the "delims string", a workaround for this is to remove the outer enclosing quotes and instead escape all the delimiter chars with ^.

for /f tokens^=1^,2^,3^ delims^=^" %%G in (filename.txt) do echo %%G %%H %%I

n.b. some text editors will enter the TAB character as a series of spaces.

Tokens

tokens=2,4,6 will cause the second, fourth and sixth items on each line to be processed.

tokens=2-6 will cause the second, third, fourth, fifth and sixth items on each line to be processed.

tokens=* will cause all items on each line to be processed.

tokens=3* will process the third token and the 4th + all subsequent items, this can also be written as tokens=3,*

Each token specified will cause a corresponding parameter letter to be allocated. The letters used for tokens are case sensitive.

If the last character in the tokens= string is an asterisk, then additional parameters are allocated for all the remaining text on the line.

The following ASCII characters can be used as FOR tokens:
ASCII 63 — 93 inclusive, 31 tokens: ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ]
ASCII 95-123 inclusive, 29 tokens: _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z

The precedence/priority of FOR command options is: usebackq > skip > delims > eol > tokens

Examples

Copy the files listed in a text file to a new destination:

FOR /f "delims=" %%G in (files.txt) DO copy "\\source\folder\%%G" "H:\destination\%%G"

This assumes that files.txt contains one filename on each line.

Extract data from a text file which contains characters and commas (but no spaces or other punctuation):

January,Snowy,02
February,Rainy,15
March,Sunny,25

FOR /F «tokens=1,3 delims=,» %%G IN (weather.txt) DO @echo %%G %%H

The tricky part is splitting up each the line into the right tokens, in this case I’m splitting on the comma character ‘,’ this splits the line into 3 chunks of text and we pull out the first and third items with "tokens=1,3"

token=1 (%%G) token=2 token=3 (%%H)
(ignored)
January 02
February 15
March 25

%%G is declared in the FOR statement and %%H is implicitly declared via the tokens= option.

An alternative way to retrieve the same data would be:
FOR /F «tokens=1,2,3 delims=,» %%G IN (weather.txt) DO @echo %%G %%I

Splitting a string that includes spaces.

This can be done just as above, replacing " delims=,» with " delims code»>tokens= and/or delims= options in any order, but whenever both delims and tokens are specified, they must be separated by a space, this space will NOT count as a token. For this reason it is recommended to always place delims as the last option before the closing quotation, it is much easier to see what is happening with one space (or no spaces) at the end of the string.

Parse a text string

A string of text will be treated just like a single line of input from a file, the string must be enclosed in double quotes (or single quotes with usebackq).

Echo just the date from the following string

FOR /F «tokens=4 delims=,» %%G IN ("deposit,$4500,123.4,31-AUG-2021") DO @echo Date paid %%G

Parse the output of a command:

Parse the contents of a file:

FOR /F "usebackq tokens=1,2* delims=," %%G IN ("C:\My Documents\my textfile.txt") DO ECHO %%G

Filenameset

To specify an exact set of files to be processed, such as all .MP3 files in a folder including subfolders and sorted by date — just use the DIR /b command to create the list of filenames

Unicode

Many of the newer commands and utilities (e.g. WMIC) output text files in unicode format, these cannot be read by the FOR command which expects ASCII.
To convert the file format use the TYPE command.

Errorlevel

FOR does not, by itself, set or clear an Errorlevel, leaving that to the command being called.

FOR is an internal command.

“It’s completely intuitive; it just takes a few days to learn, but then it’s completely intuitive”

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 не тянет"

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

Как зациклить выполнение команды в bat-файле?

Как зациклить выполнение команды в bat-файле?

Иногда необходимо создать bat-файл, который будет запускать некую команду через определённый интервал времени. Для решения этой задачи можно воспользоваться Планировщиком и часто запускать bat-файл из него, а можно создать в bat-файле цикл с паузой.

Инструкция

Цикл организуется следующим образом:

Паузу можно создать несколькими способами. В операционных системах Windows Vista, и более новых, для этого существует команда timeout:

где параметр /t — это время ожидания в секундах.

Другая команда, которую можно использовать для данной цели (например, в Windows XP, в которой еще не присутствовала команда timeout), это команда ping:

  • -n 1 — выполнить один запрос
  • -w 100000 — ждать ответа 100 секунд (значение указывается в миллисекундах), меняете это значение на то, которое нужно вам
  • 192.168.254.254 — IP адрес, который заведомо не существует в локальной сети, т.е. никогда не ответит на ping, поэтому команда будет выполняться до достижения таймаута
  • >nul — перенаправление всего вывода команды ping в никуда.

Кроме этого, существует утилита sleep, которая выполняет те же функции, что и команда timeout. Данная утилита не входит в стандартный состав ни одной операционной системы Windows, и устанавливается из дополнительного пакета программного обеспечения «Windows Server 2003 Resource Kit Tools» на любую операционную систему Windows. Скачать данный пакет можно с сайта Microsoft, или нашего зеркала на Яндекс.Диск.

Использование программы sleep очень простое:

где цифра 5 обозначает время ожидания в 5 секунд.

Была ли эта статья Вам полезна?

Комментарии к статье (4)

    • lp85d
    • 11.05.2021 23:43

    Вот такой скрипт написал на тот случай если я поменяю на удалённой машине настройки адаптера и они будут вести к обрыву сети и у меня не будет доступа к удалённой машине то скрипт сам починит мою поломку

    • Ответить
    • Олег
    • 05.05.2021 12:58

    А как сделать чтоб цикл повторялся определенное число раз .
    Вот цикл и его надо повторит только 8 раз: —
    :loop
    . <- здесь команда для создания паузы
    . <- здесь другие команды, которые необходимо выполнять в цикле
    goto loop

    • Ответить

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

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