Создать цикл в батнике
04.02.2013, 00:56. Показов 198657. Ответов 16 Вдохновившись сообщением от FraidZZ, написал мини-статейку, основанную на изложенных им положениях. Заметки Циклическиe операции FOR Командой FOR задаётся список команд, которые выполняются с КАЖДЫМ элементом набора. Набор* пишется внутри IN (…) Список команд пишется внутри DO (…) Командная строка выполняет эти команды раз за разом, при этом текущий элемент набора находится в переменной, заданной после %% (назовём ее переменной цикла). Например,
выведет имена и путь ко всем файлам с расширением .txt в папке C:Users. * Примеры под спойлером Виды наборов для FOR Для команды For без ключей набором может являться: 1) Маска файлов* (или путь + маска файлов) – в двойных кавычках, или без них: IN (*.txt) Результат: список файлов с расширением .txt в текущем каталоге. IN (*.txt *.bat) Результат: список файлов с расширениеми .txt и .bat в текущем каталоге. IN (“C:Folder 1Doc_31-12-*.txt”) Результат: тот же. Но поиск ведется в каталоге C:Folder 1 (заметьте с пробелом в имени); имя файла начинается на Doc_31-12- Прим.: FOR без ключа не умеет выводить список каталогов. * маска файлов – это набор файлов, заданный с помощью подстановочных знаков * и/или ? где * – обозначает 0 или больше любых символов в имени файла. а ? – означает 0 или 1 любой символ в имени файла. 2) Строка – в двойных кавычках, или без них: Строкой считается любая последовательность символов, если она не содержит знаков маски * или ? Смысл цикла здесь в том, чтобы разбить такую строку по пробелам (или знакам табуляции) и выполнить с каждой подстрокой список команд.
Результат: Если мы хотим, чтобы какая-то из строк не “билась” по пробелам, укажем ее в двойных кавычках:
Результат: Моя гитара Моя дорогая рыбка При этом, чтобы не выводились сами кавычки “” мы используем модификатор* ~ (тильда) при раскрытии переменной цикла %%~a *О других модификаторах переменной цикла можно почитать здесь и здесь. Не по теме: 3) еще есть смешанный тип. Это когда в наборе стоит маска (1-й описанный тип), а через пробел Строка (2 тип)… ведет себя вполне ожидаемо, но вряд ли найдет себе применение. О наборах для FOR с ключем /F далее в нижнем спойлере. Ключ /F часто используется для построчного разбора файла, т.е.
выведет все строки файла 1.txt, который находится в корне диска C. UseBackQ (Use back quotes) означает, что набор с двойными кавычками* подразумевает передачу в цикл имени файла. delims= означает, что в переменную %%a будет записана вся строка (без разделения по пробелу или знаку табуляции, т.к. стандартный разделитель заменен на NULL (пустой символ). В такой вариации: tokens=* приводит к тому же результату, что и delims=. Означает прекратить разбивку по разделителю после “0-го” токена, т.е. сразу же. * Этот вариант необходим для работы с файлом, путь или имя которого содержит пробелы. Можно было не использовать UseBackQ, тогда команда приняла бы вид:
но такая конструкция восприняла бы пробел в имени как определение нового файла, поэтому UseBackQ более приемлем. ** Примеры под спойлером Виды наборов для FOR /F В цикле FOR /F вид задаваемого набора зависит от формы кавычек в IN (…), а также наличия ключевого слова UseBackQ Виды наборов для FOR /F: 1) Набор файлов (задание маски недопустимо!) без UseBackQ – задается без кавычек IN (…) __с UseBackQ – может задаваться как в кавычках так и без них. IN (…) IN (“…”) Специфика работы Функционал: чтение содержимого файла(ов) построчно в переменную цикла! Принцип работы: источником для разбиения по разделителю (delims) является содержимое файла, заданного внутри IN (…) или файлов, если они заданы через пробел. Исключение: принятый по-умолчанию разделитель (пробел и знак табуляции) для этой конструкции цикла не применяется. А что получится, если установить delims= (возле равно – знак пробела) ?
В выводе на экран командой Echo %%a мы получим содержимое файла, где каждая из строк будет напечатана до первого встретившегося пробела. . 2) Строка (допускаются практически любые символы) без UseBackQ – задается с двойными кавычками IN (“…”) __с UseBackQ – задается с одиночными прямыми кавычками IN (‘…’) 3) Команда (сначала выполняется она, а уже ее результаты обрабатываются циклом как строка(-и)) без UseBackQ – задается с одиночными прямыми кавычками IN (‘…’) __с UseBackQ – задается с одиночными обратными кавычками IN (`…`) Примеры: 1.1. Чтение файла – Набор файлов
Результат: выведет подряд содержимое двух файлов – 1.txt и 2.txt из каталога c:users Прим.: Echo. – с точкой – это обход ошибки, чтобы можно было напечатать пустую строку, точнее строку с пробелами. 1.2. Чтение файла – Набор файлов + UseBackQ Получаем возможность использовать пробелы.
Результат: выведет содержимое файла 1.txt из каталога c:folder 1 (заметьте, в имени папки есть пробел). 2.1. Строка
Сообщение от Результат a=Каждое; b=слово; c=в; d=отдельную; e=переменную 2.2. Строка + UseBackQ
Результат такой же. 3.1. Команда
Сначала выполняется Dir /L, которая выводит информацию о папках в текущем каталоге. Вот что попадает под разбор циклу: Далее цикл разбирает каждую строку по пробелам и табуляции на подстроки (токены). На примере 1-й строки: 1-й токен (%%a)=29.12.2012 …2-й токен (%%b)=15:16 …3-й токен (%%c)=<DIR> …4-й токен (%%d)=Favorites … Результат через Echo выводится на экран: Папка Favorites Дата модификации 29.12.2012. Время 15:16 Папка s Дата модификации 14.01.2013. Время 01:51 …и т.д. 3.2. Команда + UseBackQ
Результат такой же. Альтернативный вариант нужен с целью, если одна из выполняемых команд требует точно такие же кавычки как и ключевое слово IN (…). Дабы не пользоваться символом экранирования, просто применяем другие кавычки. Отличительной особенностью FOR /F является умение работать через токены*, а также поддержка дополнительных ключевых слов: 1) eol – знак комментария в начале строки (1-й символ). Т.е. строки с таким символом не будут обрабатываться. (по умолчанию, знак точки с запятой ; ) 2) skip – пропуск определенного кол-ва обрабатываемых строк от начала файла 3) delims – задать другой разделитель(-ли) (по умолчанию, пробел и знак табуляции) 4) tokens – количество получаемых токенов (подстрок) в теле цикла и пределы разбивки по разделителю. Также можно задать конкретный № токена, который попадет в первую переменную цикла. 5) usebackq – изменение правил использования кавычек внутри IN (…) Детальную справку можно получить, введя в консоль команду FOR /? * Токены – это подстроки, которые попадают в переменные цикла %% в каждой из итераций. Они получаются в результате разбивки строки, заданной в IN (…), по разделителю, заданному в Delims= (по умолчанию, пробел и знак табуляции). В отличие, от FOR без ключа, в FOR /F все токены (все подстроки одной строки) попадают сразу В ПЕРВУЮ ИТЕРАЦИЮ цикла. Они будут распределены по РАЗНЫМ переменным цикла, идущим в алфавитном порядке*, начиная с буквы, заданной после FOR /F %% Т.е.
Результат: Обратите внимание: по умолчанию, цикл выдаёт в результатах только 1-ый токен. Если вам нужно, получить другой, нужно явно указывать модификатор “tokens=xxx”. * Макс. количество токенов и обход ограничения Максимальное кол-во токенов составляет – 26, если начальным указать %%a либо %%A (регистр имеет значение) При этом переход с %%z в %%A не происходит. Остальная часть подстрок опускается. Можно проверить: Windows Batch file For /F “tokens=1,2” %%z IN (“1 2”) do echo %%A Бывают случаи, когда требуется разбить строку по специфическому разделителю и при этом выполнить одну и ту же команду над каждой из подстрок (токеном). Кол-во токенов неизвестно. Метод показал Anonymоus в теме Символ переноса строки в переменной окружения Алгоритм заключается в замене разделителя на пробел с одновременным заключением каждого токена в двойные кавычки. Далее строка разбирается обычным циклом FOR без ключа. Более универсальные конструкции на основе FOR /F для работы с файлами/папками строятся путем помещения в IN (‘…’) команды, результаты от выполнения которой уж затем обрабатываются циклом. Чаще всего это команда Dir. А теперь рассмотрим более сложный пример: 1.2. Чтение файла (сложный пример). Давайте возьмем сложный пример, и раскусим “крепкий орешек”
Имеем в распоряжении файл 1.txt, который находится рядом с батником. Сообщение от Содержимое файла 1.txt первая строка ;комментарий/кода наше любимоеблюдо Порядок разбора (или “как прибл. будет думать ком. строка”): 1) %~dp0 – означает каталог, где находится батник, например c:temp 2) UseBackQ, ага – значит если в IN (…) ничего нет или двойные кавычки, то это файл и его нужно прочесть. 3) Читаем содержимое файла 1.txt в папке %~dp0, а затем каждую его строку проверяем по правилам… ключевых слов skip=1 tokens=2 delims=/ eol= 4) Итак, первая строка так и называется “первая строка” skip=1 – означает пропустить от начала файла 1-у строку, значит идем дальше: 5) Вторая строка: “;комментарий/кода” Первый символ – это точка с запятой. А теперь смотрим сюда “eol=пустой символ”. По умолчанию eol=; и если бы мы не указали пустой EOL, то цикл просто бы пропустил эту строку. Итак, символ комментария не совпадает с заданным (т.е. он вообще пустой), а значит строчка нам подходит -> проверяем ее дальше: 6) Смотрим какие приняты разделители: delims=/ (знаки / и ), значит из строки “;комментарий/кода” мы получим 2 подстроки: 1-й токен – “;комментарий” 2-й токен – “кода” 7) Теперь смотрим сюда tokens=2 – значит, что первой букве цикла нужно присвоить значение 2-го токена. Первая буква цикла у нас X. Переменная называется %%X А второй токен – это подстрока “кода” 8) Только теперь мы попадаем в тело цикла: Echo %%X что означает – вывести на экран текст “кода” С 3-ей строкой потренируйтесь самостоятельно. Вот такой результат окажется на экране: Ключ /L
IN (первое, шаг, последнее) означает математическое перечисление чисел от первого числа (0), до третьего (6), с шагом, указанным вторым числом (2) в наборе IN (…). Указанная команда выведет: Прим.: дробные числа командной строкой не поддерживаются. 16 Миниатюры |
Источник
1- Обзор цикла в языке Batch
Стандартные разделители (Standard Delimiter).
- Пробел (space)
- Запятая ( , )
- Точка с запятой ( ; )
- Знак TAB
2- Цикл for (По умолчанию)
Цикл For по умолчаниюю языка Batch используется для повторения списка файлов.
Синтаксис:
@rem set_of_files – Set of Files @rem Files separated by standard delimiters. @rem The parameter name ‘variable’ must be 1 character FOR %%variable IN ( set_of_files ) DO command @rem Hoặc: FOR %%parameter IN ( set_of_files ) DO ( command )
Например скопировать некоторые файлы в папку (Заметьте файлы должны быть скопированы и папка должна быть на одном диске).
copyFiles.bat
@echo off @rem Copy to same Disk FOR %%f IN (E:testfile1.data E:testfile2.txt) DO ( echo Copying %%f copy %%f E:backup ) pause
Другие примеры:
@rem The delimiter is a semicolon (;) FOR %%f IN (“E:my dirfile1.data” ; E:testfile2.txt) DO copy %%f E:backup @rem The delimiter is a comma ( , ) FOR %%f IN (“E:my dirfile1.data” , E:testfile2.txt) DO copy %%f E:backup @rem The delimiter is a space. FOR %%f IN (“E:my dirfile1.data” E:testfile2.txt) DO copy %%f E:backup
Цикл FOR /R используется для повторения на списках файлов. Включая файлы в подпапках,.. Называется рекурсией (Recurse).
Синтаксис:
FOR /R [path] %%variable IN ( set_of_file_filters ) DO command @rem Or: FOR /R [path] %%variable IN ( set_of_file_filters ) DO ( command )
- [path] : Данный параметр является корневой папкой. Если нет данного параметра”папка включает выполняющийся сценарий файла” или “текущая папка” будет считаться корневой папкой.
- set_of_file_filters : Список фильтров файлов. Напирмер *.txt , *.bat, … Или точка ( . ) значит все.
- variable: Является названием переменной и должна иметь 1 единственный символ.
Пример ниже распечатывает список всех файлов *.txt или *.log в папке C:/Windows/System32 (Поиск включает и в подпапках,..)
forR_example1.bat
@echo off FOR /R “C:WindowsSystem32” %%f IN (*.txt *.log) DO ( echo %%f ) pause
Пример ниже распечатывает все файлы C:/Windows/System32 (Влкючая файлы в подпапках,…)
forR_example2.bat
@echo off FOR /R “C:WindowsSystem32” %%f IN ( . ) DO ( echo %%f ) pause
Цикл FOR /D используется для загрузки списка папок, которые являются подпапками текущей папки.
Синтаксис:
FOR /D [/r] %%variable IN ( set_of_directory_filters ) DO command @rem Or: FOR /D [/r] %%parameter IN ( set_of_directory_filters ) DO ( command )
- set_of_directory_filters : Список фильтров папок (directory filter) как en*, fr*,.. разделены стандартным разделителем (Standard Delimiter).
- [/r]: Это параметр рекурсии (Recurse) и необязателен, если имеется данный параметр подпапки,.. будут участвовать в цикле.
- variable: Является названием переменной и должна иметь 1 единственный символ.
Пример: Перечислить список подпапок C:/Windows.
forD_example1.bat
@echo off C: cd C:/Windows FOR /D %%d IN ( * ) DO ( echo %%d ) pause
Пример: Перечислить подпапки C:/Windows с названиями начинающимся на “en” или”fr”
forD_example2.bat
@echo off C: cd C:/Windows FOR /D /r %%d IN (en* fr*) DO ( echo %%d ) pause
Цикл For /R используется для загрузки на ряде цифр (range of numbers).
Синтаксис:
FOR /L %%variable IN (start, step, end) DO command @rem Or: FOR /L %%variable IN (start, step, end) DO ( command )
- start: Первое значение переменной
- step: После каждого повтора (iteration) значение переменной будет прибавлять ‘step’.
- end: Последнее значение.
Пример:
forL_example1.bat
@echo off FOR /L %%d IN (1 2 8 ) DO ( echo %%d ) pause
forL_example2.bat
@echo off FOR /L %%d IN (20 -2 5 ) DO ( echo %%d ) pause
Цикл For /F является сложным циклом, но сильным. Он читает содержание файла или несколько файлов. После анализирует содержание файлов. Содержание фала является текстом, оно будет разделено на несколько маленьких текстов, каждый отрывок текста называетя Token. Правило по умолчанию для разделения основано на пробелах (white space). Но вы можете кастомизировать правило разделения с помощью параметра [“delims=xxx”].
Цикл For /F так же используется для анализа содержания строки (string), или для выполнения набора команд.
Синтаксис:
FOR /F [“options”] %%variable IN ( set_of_filenames ) DO command FOR /F [“options”] %%variable IN ( set_of_filenames ) DO ( command ) FOR /F [“options”] %%variable IN (“Text string to process”) DO command FOR /F [“options”] %%variable IN (“Text string to process”) DO ( command )
- set_of_filenames: Список из одного или нескольких файлов.
- options: Опции, например: “delims=, tokens=1,2,4”
Опция | Описание |
delims=xxx | Символы разделителя (delimiter character(s)). По умолчанию это пробел (space) |
skip=n | Количество первых строк, которые будут пропущены в содержании файла. По умолчанию skip=0 |
eol=; | eol (End of Line): Определяет особый символ, который поставлен в начале строки, чтобы отметить эту строку как примечание. Строка примечания будет пропущена программой. По умолчанию это знак точки с запятой ( ; ) |
tokens=n1,n2,n3 | Определить нужные позиции (n1, n2, n3, ..), По умолчанию tokens=1 |
usebackq | (Смотреть объяснение в примерах) |
Чтобы легче понять, проанализируем следующие файлы:
eol (End of Line)
eol: Использовать для определения особого символа. По умолчанию является символ точки с запятой ( ; ). Поставлено в начале строки для отметки этой строки как примечания (), программа пропустит данную строку.
skip=n
skip: Объявить, что количество первых строк будет пропущено, программа не проанализирует данные строки. по умолчанию skip=0
delims (Delimiter character(s))
delims: Определияет символы разделителя (delimiter characters), помогая программе разделить каждую строку текста на мелкие параграфы, каждый параграф называется Token. Token индексированы 1, 2, 3, …
tokens=n1,n2,n3
tokens: Объявляет список заинтересованных индексов, индексы разделены запятой. Например tokens=1,2,4. По умолчанию: tokens=1
Tokens | Описание |
tokens=1,2,4 | Индексы 1, 2, 4 заинтересованы. |
tokens=2-8 | Индексы от 2 до 8 заинтересованы |
tokens=3,* | Индексы 3, 4,5, … заинтересованы |
tokens=* | Все индексы заинтересованы |
Например “tokens=1,2,4”, значит только Token в позиции 1, 2, 4 заинтересованы, другие Token будут пропущены ().
Пример анализа файла:
Пример использования цикла FOR /F для чтения файла persons.txt:
persons.txt
List of celebrities Creation : 2017/09/11 ; () Male List Bill,Gates,1955/10/28,Male Steve,Jobs,1955/02/24,Male Mark,Zuckerberg,1984/05/16,Male Sundar,Pichai,1972/07/12,Male ; () Female List Hillary,Clinton,1947/10/26,Female
forF_example1.bat
@echo off FOR /F “delims=, skip=3 eol=; tokens=1,2,4” %%i IN ( persons.txt ) DO ( echo Full Name: %%i %%j Gender: %%k ) pause
Примечание: Названия переменных в цикле имеют только 1 символ.
Переменная %%i объявлено явным способом на цикле. Переменные %%j, %%k являются переменными, объявленные неявным способом (Названия неявных переменных являются следующие символы явных переменных).
Пример анализа строки:
Источник
Описание
Иногда необходимо создать bat-файл, который будет запускать некую команду через определённый интервал времени. Для решения этой задачи можно воспользоваться Планировщиком и часто запускать bat-файл из него, а можно создать в bat-файле цикл с паузой.
Cmd цикл с задержкой
Продолжение…
Особенности, которые распространяются на циклы FOR
0) Если нужно записать в наборе несколько команд, то используем:
а) знаки амперсанда &, если мы хотим записать все в одну строку:
FOR /L %%a IN (1,1,10) DO echo Найден файл:& echo %%a
б) знаки скобок, если хотим разбить команды в несколько строк для наглядности и удобства:
FOR /L %%a IN (1,1,10) DO (
echo Найден файл:
echo %%a
)
1) Пустые строки в содержимом файлов и выводе команд игнорируются.
2) Если предполагается получение пустого токена, остальные токены смещаются.
К примеру,
имеем файл с содержимым:
file.txt написал(а):
Применим команду:
FOR /F “tokens=1,2,3 delims=/” %%a in (file.txt) do echo a=%%a; b=%%b; c=%%c
Результат будет:
cmd написал(а):
вместо ожидаемого
cmd написал(а):
3) Все специальные (служебные) символы необходимо экранировать (предварять птичкой ^).
Это такие символы, как | = ^ < > &. А также % ! – если они используются не для раскрытия переменной, кроме случая с !, когда не включено удаленное расширение переменных.
Сюда же входит знак кавычки, которая соответствует форме кавычки, применяемой для определения вида набора.
4) Регистр переменной цикла имеет значение.
5) Изменить вручную значение переменной цикла нельзя. Например, set %%A=param не даст эффекта.
6) После выхода из цикла переменная цикла уничтожается.
7) Внутри цикла можно использовать не более 1-го комментария вида :: (иначе, будет критическая ошибка и “вылет” из пакетного файла)
Вместо этого используем Rem.
8) Внутри цикла можно использовать не более 1-й метки (иначе, будет такой же “вылет”).
Пример максимально допустимой конструкции:
@echo off
for %%n in ( 0 1 2 3 4 5 6 7 8 9 ) do (
:label
echo %%n
::
echo %%n
)
9) Тем не менее из цикла можно безвозвратно выйти на метку Goto metka
а также выйти в подпрограмму и вернутся снова в цикл точно в ту же позицию через команду Call :metka
В конце подпрограммы должна стоять команда Exit /B
10) Для получения значения обычной переменной внутри цикла в случае, если этой переменной было присвоено новое значение внутри тела этого же цикла, необходимо раскрывать переменную через знаки восклицания !variant! – это называется отложенное расширение переменных.
Перед использованием такого способа, его нужно включить, задав в начале пакетного файла команду:
SetLocal EnableDelayedExpansion
Иначе, если использовать обычный способ раскрытия %variant%, мы получим значение переменной, присвоенное ей еще до входа в цикл.
Точно таким же образом (через ! ) необходимо раскрывать переменную времени внутри цикла, т.к. иначе для цикла время “замерзает”.
Происходит это потому, что в цикл попадает т.н. “слепок” переменных среды. И работа с ними через % происходит уже как с копией данных, а не актуальными значениями.
11) Когда после IN указана команда, под разбор цикла попадают такие потоки:
1-й поток (StdOut)
с 3-го по 9-й поток (User Stream)
При этом 2-й поток (StdError) отображается на экране сразу после выполнения указанной в цикле команды в IN (…)
2-й поток можно занулить, обычным способом, не забыв экран:
FOR /F %%A IN (‘dir %someparam% 2^>nul’) do rem
Также можно перенаправить 2-й поток, чтобы он обрабатывался вместе с первым, вместо его вывода на экран:
FOR /F %%A IN (‘dir %someparam% 2^>^&1’) do rem
Собственно, чтобы наоборот, обрабатывать 2-й поток вместо первого, можно воспользоваться следующей конструкцией:
FOR /F %%A IN (‘dir %someparam% 1^>nul 2^>^&3’) do rem
12) При запуске цикла из консоли (cmd.exe) переменные цикла нужно указывать без удвоения знака процента %a.
Это же правило касается вызова цикла через Shell-подобные команды на других языках программирования.
13) Переменную цикла нельзя раскрыть внутри строки модификаторов другого цикла:
for /f %%q in (quote) do for /f “usebackq tokens=1* delims=%%q” %%a in (“%~dp01.txt”) do echo %%a%%b
но есть способ обхода от ComSpec:
Sleep.exe из windows xp resource kit (или windows 2003 resource kit – смотря какая ос).
Из краткой справки
sleep.exe/? Usage: C:Program FilesWindows Resource KitsToolssleep.exe -to-sleep-in-seconds C:Program FilesWindows Resource KitsToolssleep.exe [-m] -to-sleep-in-milliseconds C:Program FilesWindows Resource KitsToolssleep.exe [-c] commited-memory ratio (1%-100%)
понятно, что для задержки в 10 секунд надо запустить
sleep.exe 10
а для задержки 500 мс надо написать
sleep.exe -m 500
Преимущества: можно задавать задержки в секундах и миллисекундах.
Недостатки: SLEEP.EXE не входит в стандартный комплект Windows и может оказаться, что на другом компьютере его нет.
Инструкция
Цикл организуется следующим образом:
:loop … <- здесь команда для создания паузы … <- здесь другие команды, которые необходимо выполнять в цикле goto loop
Паузу можно создать несколькими способами. В операционных системах Windows Vista, и более новых, для этого существует команда out:
out /t 5
где параметр /t – это время ожидания в секундах.
Как выполнить cmd файл в цикле с задержкой между каждой итерацией?
цикл for – это то, что вы хотите. в этом случае мы говорим, что начинаем подсчет на 1, шаг 1, заканчиваем на 5, что означает, что вы будете запускать 5 циклов. Более подробную информацию о for запуска из cmd.exe for/?
Время ожидания зависит от вашей версии ОС. Старая ОС не имеет этого, то, возможно, посмотрите на более старую версию, называемую sleep или, альтернативно, используйте команду ping с подсчетом таймаута, который вы хотите, 1. out В некоторых версиях Windows вам не нравится /t и поэтому можно использовать без него. т.е. out 5
@echo off
for %%i in (1,1,5) do (
echo We do something here..
out /t 5
)
Чтобы узнать о командах Windows cmd/batch и о том, как их использовать в пакетных файлах, вы можете открыть cmd и ввести help котором будет отображаться множество команд. каждый из них может быть запущен, за которым следует /? чтобы получить полную помощь по каждой команде.
Скрипт wsh/jscript
Создаём на JScript небольшой скрипт SLEEP.JS, использующий функцию WScript.Sleep:
if(WScript.Arguments.Unnamed.length){ var milliseconds=WScript.Arguments.Unnamed(0); WScript.Sleep(milliseconds); }
и вызываем его из командного файла, например, задержка 10 секунд:
cscript //nologo sleep.js 10000
или 500 мс
cscript //nologo sleep.js 500
Преимущества: можно задавать задержки в секундах и миллисекундах; не требуются сторонние программы.
Источник