FOR — организация циклической обработки
Команда FOR используется для выполнения команды, заданной в виде параметра, для каждого элемента из набора. В качестве элементов могут использоваться файлы, каталоги, наборы строк.Формат командной строки:
FOR %переменная IN (набор) DO команда [параметры]
Параметры:
%переменная — Однобуквенный подставляемый параметр.
(набор) — Определяет набор, состоящий из одного или нескольких элементов, обрабатываемых командой.
команда — Команда, которую следует выполнить для каждого элемента набора.
параметры — Параметры для команды, выполняемой по отношению к элементам набора.
. В пакетных файлах для команды FOR используется запись
%%переменная вместо %переменная. Имена переменных учитывают регистр букв (%i отличается от %I).
Поддерживаются также дополнительные форма команды FOR:
FOR /D %переменная IN (набор) DO команда [параметры]
Ключ /D задает в качестве набора имена каталогов (не файлов).
FOR /R [[диск:]путь] %переменная IN (набор) DO команда [параметры]
Ключ /R задает выполнение команды для каталога [диск:]путь, а также для всех подкаталогов этого пути. Если после ключа /R не указано имя каталога, используется текущий каталог. Если набор — это одиночный символ точки (.), команда просто перечисляет дерево каталогов.
FOR /L %переменная IN (начало,шаг,конец) DO команда [параметры]
Ключ /L задает обработку набора из последовательности чисел с заданными началом, концом и шагом приращения. Так, набор (1,1,5) раскрывается в (1 2 3 4 5), а набор (5,-1,1) — в (5 4 3 2 1)
FOR /F [«ключи»] %переменная IN (набор-файлов) DO команда [параметры]
FOR /F [«ключи»] %переменная IN («строка») DO команда [параметры]
FOR /F [«ключи»] %переменная IN (‘команда’) DO команда [параметры]
Ключ /F задает обработку файлов, строковых значений или результатов стандартного вывода другой команды. Набор файлов — содержит имена одного или нескольких файлов, которые по очереди открываются, читаются и обрабатываются. Обработка состоит в чтении файла, разбивке его на отдельные строки текста и разборе каждой строки в ноль или более подстрок. Затем вызывается тело цикла «for», при выполнении которого каждая найденная подстрока используется в качестве значения переменной. По умолчанию ключ /F выделяет из каждой строки каждого файла первую отделенную пробелами подстроку. Пустые строки в файле пропускаются. Необязательный параметр «ключи» служит для переопределения правил разбора по умолчанию. Он представляет собой заключенную в кавычки строку, содержащую одно или несколько ключевых слов для определения параметров разбора. Ключевые слова:
eol=символ — знак начала комментария в конце строки ( признак конца обрабатываемых данных строки). Задается в виде одиночного символа.
skip=n — число пропускаемых при обработке строк от начала файла.
delims=xxx — набор разделителей между обрабатываемыми элементами строк. По умолчанию, в качестве разделителей используются пробелы и знаки табуляции.
tokens=x,y,m-n — номера подстрок из каждой строки, передаваемые в тело цикла «for» для каждой итерации. Например, для обычного текстового файла, подстроками будут слова, а разделителями подстрок — пробелы или знаки табуляции. При использовании этого ключа выделяются дополнительные имена переменных. Формат
usebackq — режим обработки кавычек. Строка, заключенная в обратные кавычки, выполняется как команда, строка, заключенная в прямые одиночные кавычки, является строкой символов, а двойные кавычки могут использоваться для задания имен файлов, содержащих пробелы.
Поясняющий пример:
FOR /F «eol=; tokens=2,3* delims=, » %i in (myfile.txt) do @echo %i %j %k
Выполняется разбор файла myfile.txt. Все строки, которые начинаются с символа точки с запятой (eol=; ), пропускаются. Вторая и третья подстроки из каждой строки ( tokens=2,3 ) передаются в тело цикла «for», причем подстроки разделяются запятыми и/или пробелами. В теле цикла переменная %i принимает значение второй подстроки, %j — третьей, а %k — все оставшееся поле до конца строки после третьей подстроки . Имена файлов, содержащие пробелы, необходимо заключать в двойные кавычки. Чтобы использовать двойные кавычки, необходимо использовать параметр usebackq, иначе двойные кавычки будут восприняты как определение строки-литерала для разбора.
В данном примере переменная %i явно объявлена в инструкции «for», а переменные %j и %k объявляются неявно с помощью ключа tokens= . Ключ tokens= позволяет извлечь из одной строки файла до 26 подстрок. Следует помнить, что имена переменных FOR являются однобуквенными, с учетом регистра, поэтому одновременно не может быть активно более 52 переменных, задаваемых как явно, так и неявно.
Команда FOR /F
В качестве обрабатываемого набора, также, может быть использован вывод ( выходные данные ) другой команды. В этом случае используется в качестве параметра в скобках строка в обратных одиночных кавычках . Эта строка передается для выполнения дочернему обработчику команд CMD.EXE, а вывод этой команды сохраняется в памяти и разбирается так, как если бы это был файл. Пример:
FOR /F «usebackq delims==» %i IN (`set`) DO @echo %i,
Выполняется команда SET, отображающая значения переменных среды и команда FOR /F выведет их перечень с использованием команды echo .
В команде FOR возможно использование ссылок на переменные. Допускается применение следующих синтаксических конструкций:
%~I — из переменной %I удаляются обрамляющие кавычки («)
%~fI — переменная %I расширяется до полного имени файла
%~dI — из переменной %I выделяется только имя диска
%~pI — из переменной %I выделяется только путь к файлу
%~nI — из переменной %I выделяется только имя файла
%~sI — полученный путь содержит только короткие имена
%~aI — переменная %I расширяется до атрибутов файла
%~tI — переменная %I расширяется до даты /времени файла
%~zI — переменная %I расширяется до размера файла
%~$path:I — проводится поиск по каталогам, заданным в переменной среды path, и переменная %I заменяется на полное имя первого найденного файла. Если переменная path не определена или в результате поиска не найден ни один файл, то этот модификатор заменяется на пустую строку.
При объединении нескольких операторов можно получить следующие результаты:
~dpI — переменная I раскрывается в имя диска и путь
~nxI — переменная I раскрывается в имя файла и его расширение
~fsI — переменная I раскрывается в полный путь с короткими именами
~dp$path:I — проводится поиск по каталогам, заданным в переменной среды path, и переменная I раскрывается в имя диска и путь к первому найденному файлу.
~ftzaI — переменная I раскрывается в строку, подобную выдаваемой командой DIR
В приведенных выше примерах переменные I и path можно заменить на другие допустимые значения. Синтаксическая конструкция с символами ~ заканчивается допустимым именем переменной цикла FOR.
Для имен переменных рекомендуется использовать заглавные буквы, например —I, что делает эту конструкцию более удобной для чтения и предотвращает ошибочное принятие их за модификаторы, которые не различают регистр.
При использовании команды FOR в командных файлах, если внутри цикла нужно выполнить более одной команды, то они заключаются в скобки:
FOR %переменная IN (набор) DO (
команда1 [параметры]
команда2
. . .
)
Пример:
@echo OFF
for /L %%I in (1,1,5) DO (
echo FIRST%%I
ECHO LAST%%I
)
Обычно, в командных файлах команда
Setlocal EnableDelayedExpansion
После чего, можно обрабатывать принимаемые переменными значения внутри цикла, используя вместо знаков процента восклицательные знаки. Синтаксически, использование обоих разделителей допускается, но результаты этого использования будут разными, что наглядно демонстрируется следующим командным файлом:
Setlocal EnableDelayedExpansion
@ECHO OFF
set VAR=before
if «%VAR%» == «before» (
set VAR=after
if «!VAR!» == «after» @echo Со знаком процента=%VAR% , Со знаком вопроса=!VAR!
)
Команда set VAR=after выполняется внутри подпрограммы, ограниченной скобками и, если убрать команду Setlocal EnableDelayedExpansion или не использовать для получения значения переменной VAR восклицательные знаки, ее значение останется старым ( тем, что было установлено до входа в цикл команды FOR ).
Данная особенность реализации командного процессора Windows нередко приводит к неожиданным результатам при использовании групп команд, объединенных скобками в конструкциях FOR и IF и тогда, когда значение какой-либо переменной изменяется внутри цикла с одной командой. Например, для получения списка файлов текущего каталога такой командный файл работать не будет:
set LIST=
for %%i in (*) do set LIST=%LIST% %%i
echo %LIST%
Вроде бы, логически все верно, но не учтена особенность обработки значений переменных. Значение переменной LIST внутри цикла команды FOR изменено не будет, оно останется пустым ( задано командой SET LIST= ), каким и было на начало цикла FOR. Команда SET LIST= %LIST% %%I должна в каждом цикле менять значение переменной LIST на текущее, плюс символ пробела, и плюс текущее значение переменной I, которое принимает значение имени файла в текущем каталоге. Синтаксически, команда верная, но из-за озвученной выше особенности реализации командного процессора — не работает, и значение переменной LIST не изменяется. Для того, чтобы это произошло, командный файл нужно изменить, таким же образом, как и в примере для группы команд:
Setlocal EnableDelayedExpansion
set LIST=
for %%i in (*) do set LIST=!LIST! %%i
echo %LIST%
Теперь, значение переменной LIST внутри цикла FOR будет
изменяться, последовательно принимая значения имен файлов, разделенных
пробелом ( set LIST=!LIST! %%i).
Эту особенность реализации CMD нужно учитывать и при использовании значений системных переменных внутри циклов, как например, переменной ERRORLEVEL:
IF !ERRORLEVEL!==0 вместо %ERRORLEVEL%==0
Весь список команд CMD WindowsУрок 9 по CMD — цикл for, обработка текстовых строк
В этой статье мы рассмотри как используется цикл командной строки for для обработки текстовых строк и файлов. Тут будет фигурировать ключ /f, который меняет логику работы цикла командной строи (cmd) for и позволяет производить разбор любого текста по полочкам, так сказать.
Давайте начнем…
Цикл cmd for – обработка текста
Для обработки текста или содержимого текстового файла применяется следующая конструкция:
for /f [«параметры»] %%переменная in (источник) do (оператор)
Тут “параметры” задают параметры поиска, мы их рассмотрим ниже, “источник” – тут нужно указать или путь к текстовому файлу, или текст, или вывод команд, “оператор” – тут собственно, находятся команды для обработки текста. Сам текст можно хранить в переменной, имя которой мы зададим в качестве источника.
Значение “параметры” может быть одним или комбинацией таких параметров:
eol – позволяет задать признак концевого комментария (end-of-line comment character). Весь текст, что будет находиться после него, будет приниматься за комментарий, например,“eol=#” – тут символ # является признаком концевого комментария. Собственно, комментарий не будет обрабатываться.
skip – позволяет в цикле cmd for задать количество строк, которые нужно пропустить, счет идет с начала файла, например, “skip=10” – в данном случае будут пропущены строки от первой до десятой.
delims – параметр позволяет задать дополнительные разделители строки на подстроки. Так, стандартными разделителями является пробел и символ табуляции. Например, “delims=,.:” – тут мы определили, что запятые, точки и двоеточия являются разделителями.
tokens — данный параметр командной стоки цикла for cmd позволяет указать, какие номера полей строки, полученных из заданного текста, нужно передать для обработки в цикл. Полученные поля будут храниться в отдельной переменной. Фактически, если принимать каждое слово строки как отдельный элемент, то параметр tokens позволяет указать, какие именно слова по счету нужно обработать. Как упоминалось выше, стандартным разделителем является пробел и табуляция.
Для дополнительной переменной, как и для переменной инициализации, в качестве имени указывается латинская буква, большая или маленькая. Значения можно указывать как через запятые, например, “tokens=1,4, 9” – первый, четвертый и девятый элемент, так и через диапазон, например, “tokens=4-11” – с четвертого по одиннадцатый. Можно комбинировать: “tokens=4-10,15,20” – с четвертого по десятый, а также, пятнадцатый и двадцатый элемент. Если мы укажем в качестве последнего значения звездочку, то создастся еще одна переменная, которая будет хранить в себе все остальные элементы (строки) текста.
usebackq – данный параметр является довольно интересным и полезным, так как позволяет выполнять команды, передав их как параметр. Включив этот параметр, двойные кавычки будут применяться для имен файлов и пути к ним, обратные кавычки (`), они находятся на той же кнопке, что и символ (~) – для исполняемых команд, а одинарные кавычки – для литеральных строк.
Хорошо, теперь можно рассмотреть цикл cmd for и работу с ним на практике.
Допустим, у нас есть файл test.txt, в котором прописаны такие строки:
100 200 300
#это комментарий
400 500 600
10; 20; 30;
Попробуем выполнить такой код:
@echo off for /F "eol=#" %%A in (d:\work\test.txt) do echo %%A |
На выходе функция echo выведет:
100
400
10;
Как видим, строка с комментарием не вывелась, но и остальные строки вывелись не полностью, что бы это исправить, напишем так:
@echo off for /F "eol=# tokens=*" %%A in (d:\work\test.txt) do echo %%A |
Бинго, теперь нам вывело все строки полностью, кроме строки с комментариями, так как мы указали в параметре tokens значение *, то есть все. В предыдущем примере сценарий принимал пробелы как разделители.
Теперь запишем в текстовый файл такой текст:
Ukraina-Kijev-grivna-salo
Rossija-Moskva-rubl-bliny
Belorussija-Minsk-zajec-kartoska
Chechija-Praga-krona-pivo
@echo off for /f "tokens=1-4 delims=-" %%A in (d:\work\test.txt) do ( (@echo Strana:%%A Stolica:%%B Valuta:%%C Produkt:%%D) & Echo.) |
Тут мы указали, что разделителем является тире, и указали, что надо обработать первые четыре поля строки, каждое из которых хранится в отдельной переменной. Как видим, в цикле for cmd идет обработка каждой строки из текста, на выходе мы получим:
Strana:Ukraina Stolica:Kijev Valuta:grivna Produkt:salo
Strana:Rossija Stolica:Moskva Valuta:rubl Produkt:bliny
Strana:Belorussija Stolica:Minsk Valuta:zajec Produkt:kartoska
Strana:Chechija Stolica:Praga Valuta:krona Produkt:pivo
Я специально вставил между строк пустую (echo.) что бы было лучше видеть.
Осталось рассмотреть пример с параметром usebackq:
@echo off set get_dir=d:\work\hello.txt for /f "usebackq" %%A in (`echo Hello, Wold ^>^> "%get_dir%"`) do echo OK type %get_dir% set get_dir= |
В данном случаем мы выполняем команду: записываем фразу “Hello, Wold” в текстовый файл, путь к которому содержится в переменной get_dir. В конце выводим содержимое файла и удаляем переменную.
Знаю, знаю, мало примеров, ничего, я исправлюсь…
Команда FOR задает запуск некоторой команды для каждого файла из заданного множества. Информация для данной статьи взята с сайта Microsoft. Работу команды for можно охарактеризовать так: Синтаксис for {%переменная | %%переменная} in (множество) do команда [ПараметрыКоманднойСтроки] <>Параметры {%переменная | %%переменная} Обязательный параметр. Замещаемый параметр. Используйте %переменная для выполнения команды for из командной строки. Используйте %%переменная для выполнения команды for в пакетном файле. В переменных учитывается регистр и они могут быть представлены буквами, например %A, %B или %C. (множество) Обязательный параметр. Задает один или несколько файлов, каталогов, диапазон значений или текстоваых строк, подлежащих обработке заданной командой. Скобки являются обязательными. команда Обязательный параметр. Задает команду, которая будет выполнена для каждого файла, каталога, диапазона значений или текстовой строки, включенной в указанный параметр (множество). ПараметрыКоманднойСтроки Задает параметры командной строки, которые используются с указанной командой. /? Отображение справки в командной строке. Заметки
[Примеры] В пакетных файлах используется следующий синтаксис для команды for: Чтобы отобразить содержимое всех файлов, имеющих разрешение DOC или TXT, в текущем каталоге с помощью заменяемой переменной %f, введите следующую команду: В предыдущем примере каждый файл с расширением .doc или .txt в текущем каталоге будет подставляться вместо переменной %f, пока не будет выведено содержимое всех файлов. Для использования этой команды в пакетном файле нужно заменить каждую команду %f на %%а. В противном случае переменная игнорируется и выводится сообщение об ошибке. Чтобы произвести разбор файла, игнорируя комментарии, можно использовать следующую команду: Данная команда производит разбор каждой строки в файле Myfile.txt, игнорируя строки, начинающиеся с точки с запятой, и передает второй и третий элементы из каждой строки в тело цикла команды FOR. Элементы разделяются запятыми или пробелами. Тело инструкции FOR использует %i для получения второго элемента, %j для получения третьего элемента и %k для получения оставшихся элементов в строке. Если имена файлов содержат пробелы, их следует заключать в кавычки (например, «ИмяФайла»). Для использования кавычек необходима команда usebackq. В противном случае кавычки рассматриваются как определение символьной строки для разбора. Переменная %i объявлена явно в инструкции FOR. Переменные %j и %k объявлены явно при использовании tokens=. С помощью tokens= можно указать до 26 элементов, если это не вызовет попытки объявить переменную с именем, большим буквы «z» или «Z». Для разбора вывода команды с помощью помещения параметра МножествоИменФайлов в скобки можно использовать следующую команду (пример выводит список имен всех переменных окружения): Ищем в директориях файлы с расширением html содержащие строку google: FOR /L Внутри командного файла в качестве параметра используйте %%G, а в командной строке %G (такие уж Микрософт придумал правила). (20,-5,10) будет генерить последовательность 20 15 10, а (1,1,5) последовательность 1 2 3 4 5. Пример Можно использовать нечисловой список, например: [Другие команды for] FOR — цикл по всем файлам в одной директории (исключая её подкаталоги) syntax-FOR-Files [Связанные с for команды] FORFILES (w2003 Server) — выборка списка файлов из директории для отображения или использования при обработке в bat-файле [Equivalent Linux BASH commands] for — Expand words, and execute commands [Условные обозначения форматирования]
[Ссылки] 1. Практические приемы программирования в bat-файлах. |
Выполнение сразу нескольких команд в командной строке. Linux статьи
В командной строке Linux можно объединять сразу несколько команд в одну строку (в один запуск). Например, вам нужно выполнить сначала одну команду, за ней вторую и так далее. Но вы хотите сразу вбить в командной строке одну инструкцию, которая все сделает. Для этого можно воспользоваться служебными символами.
Выполнение команд последовательно
Например, мы хотим выполнить сначала одну команду. Затем, когда она отработает (вернет управление в командную строку), нам нужно запустить вторую команду. Для этого служит символ точка с запятой ;. Таким образом, если вы выполните в терминале:
mycommand1; mycommand2; mycommand3
то сначала запустится первая команда mycommand1, а когда управление вернется в терминал, то запустится вторая и так далее.
Для теста попробуйте выполнить (в Ubuntu):
gnome-terminal; gedit
Это называется последовательным выполнением команд. Вне зависимости от того, как выполнилась предыдущая команда, вторая команда должна будет запуститься. Можно выполнять команды в зависимости от того, как отработала предыдущая для этого служат символы && и ||.
Зависимое выполнение команд
Символы && и || означают не что иное, как логическое И и ИЛИ. Поэтому когда мы пишем:
mycommand1 && mycommand2 && mycommand3
то это означает, что команда mycommand2 будет выполнена только в том случае, если команда mycommand1 была выполнена успешно. Каждая следующая команда выполняется только при успешном выполнении предыдущей.
Если выполнить конструкцию:
mycommand1 || mycommand2 || mycommand3
то команда mycommand2 будет выполнена только, если mycommand1 вернула ошибку. Каждая следующая команда запускается только если предыдущая вернула ошибку.
Выполнение нескольких команд в командной строке. Категория: ОС Linux • Разное
В командной строке можно объединять сразу несколько команд в одну строку (в один запуск). Например, вам нужно выполнить сначала одну команду, за ней вторую и так далее. Но вы хотите сразу вбить в командной строке одну инструкцию, которая все сделает.
Выполнение команд последовательно
Например, мы хотим выполнить сначала одну команду. Затем, когда она отработает (вернет управление в командную строку), нам нужно запустить вторую команду. Для этого служит символ «;». Таким образом, если набрать в терминале:
$ command1; command2; command3
то сначала запустится первая команда command1
, а когда управление вернется в терминал, то запустится вторая и так далее.
Зависимое выполнение команд
Символы &&
и ||
означают не что иное, как логическое И
и ИЛИ
. Поэтому когда мы пишем:
$ command1 && command2 && command3
то это означает, что команда command2
будет выполнена только в том случае, если команда command1
была выполнена успешно (вернула нулевой код завершения). Каждая следующая команда выполняется только при успешном выполнении предыдущей.
Если код завершения программы или команды 0 — это означает ИСТИНА, любое другое значение (как правило, это код ошибки) — ЛОЖЬ.
Если мы пишем:
$ command1 || command2 || command3
то команда command2
будет выполнена только в том случает, если command1
вернула ошибку (не нулевой код завершения). Каждая следующая команда запускается только если предыдущая вернула ошибку.
Такое поведение объясняется очень просто: интерпретируя И
нет смысла выполнять вторую команду, если первая вернула ошибку. А интерпретируя ИЛИ
нет смысла выполнять вторую команду если первая выполнилась с успехом.
Пример использования:
$ sort bigdata > /tmp/sorted && mv /tmp/sorted > bigdata
Этот же результат будет получен в результате выполнения кода:
if sort bigdata > /tmp/sorted ; then mv /tmp/sorted > bigdata fi
Операторы &&
и ||
можно объединять в одной командной строке:
$ who | grep "^$name " > /dev/null && echo "$name logged on" || echo "$name not logged on"
Первая команда echo
выполняется при удачном выполнении команды grep
, а вторая — при неудачном.
Эти операторы часто используются в условиях if
:
if command1 && command2 ; then command3 fi
Обе команды должны возвратить нулевой код завершения (логическая операция И
), чтобы выполнилась команда command3
. Этот фрагмент кода можно записать и так:
$ command1 && command2 && command3
Еще одни пример использования:
if command1 || command2 ; then command3 fi
Хотя бы одна команда должна возвратить нулевой код завершения (логическая операция ИЛИ
), чтобы выполнилась команда command3
. Этот фрагмент кода можно записать и так:
$ command1 || command2 && command3
Поиск: Bash • CLI • Linux • Команда
Работа с командной строкой — Документация Руководство по командной строке Windows 18.08.2015
Командная строка позволяет вводить и выполнять команды операционной системы и другие компьютерные команды. Вводя команды, можно выполнять на компьютере различные задачи, не пользуясь мышью или сенсорным вводом.
В разделе перечислены базовые приемы работы в командной строке Windows.
Запуск командной строки
Для запуска командной строки воспользуйтесь одним из следующих способов:
- «Пуск → Выполнить» (или клавиши
Win+R
) введитеcmd
и нажмите клавишуEnter
; - «Пуск → Все программы → Стандартные → Командная строка»;
- «Пуск → Поиск → Командная строка».
Ввод команд
Команды вводятся посредством ввода с клавиатуры. Простейшая команда help
выводит список всех доступных команд. Также вы можете просмотреть полный перечень команд в статье Список команд Windows ( Windows CMD ).
Для вывода справки по конкретной команде введите help название_команды
, например:
Перечень основных команд и примеры их использования приведены в разделе Основные команды данного руководства.
Bat-файлы
Используя команды можно написать bat файлы,которые позволяют упрощать и автоматизировать выполнение задач. Более подробно работа с bat файлами рассматривается в статьях:
Автодополнение путей файлов
Чтобы не набирать вручную весь путь к файлам используется клавиша Tab
на клавиатуре. Она автодополняет названия директорий и файлов, например, чтобы ввести название папки User
, достаточно ввести первую букву и нажать клавишу Tab
, будет подставлено соответствующее значение.
Если на букву U
начинается несколько директорий или файлов, то при каждом последующем нажатии Tab
будет происходить перебор названий. Чтобы произвести перебор в обратном порядке, нажимайте Tab
c зайжатой клавишей Shift
.
Если папка состоит из нескольких слов, разделенных пробелом или из кириллических символов, то весь путь берется в кавычки, например, cd "C:\Documents and Settings"
Копирование текста в/из командной строки
По умолчанию копирование текста из командной строки отключено. Чтобы его включить необходимо:
- Нажать правой кнопкой мыши на заголовок окна командной строки и выбрать пункт «Свойства»;
- Установить галочки напротив «Выделение мышью» и «Быстрая вставка»;
Для копирования текста из командной строки достаточно выделить текст и щелкнуть правой кнопкой мыши, выделенный текст скопируется в буфер обмена. Для вставки текста в командную строку также используется нажатие правой кнопкой мыши.
Вывод информации в текстовый файл и перенаправление данных
Информацию, выводимую программами в командную строку, можно перенаправить в файл. Делается это с помощью символа >
, например, systeminfo > C:\Users\mazhartsev\Desktop\test.txt
.
Если файл не существует, то он будет создан. Если существует, то он будет перезаписан. Чтобы записать данные в конец файла, необходимо воспользоваться командой >>
, например: systeminfo >> C:\Users\mazhartsev\Desktop\test.txt
Данные команды называются операторами перенаправления.
Описание | Оператор перенаправления |
---|---|
> | Записывает данные на выходе команды вместо командной строки в файл или на устройство, например, на принтер. |
< | Читает поток входных данных команды из файла, а не с клавиатуры. |
>> | Добавляет выходные данные команды в конец файла, не удаляя при этом существующей информации из файла. |
>& | Считывает данные на выходе одного дескриптора как входные данные для другого дескриптора. |
<& | Считывает входные данные одного дескриптора как выходные данные другого дескриптора. |
| | Считывает выходные данные одной команды и записывает их на вход другой команды. Эта процедура известна под названием «канал». |
IF – оператор условного выполнения команд в пакетном файле Windows
Формат командной строки:IF [NOT] ERRORLEVEL число команда
IF [NOT] строка1==строка2 команда
IF [NOT] EXIST имя_файла команда
Параметры:
NOT — Указывает, что Windows должна выполнить эту команду, только если условие является ложным.
ERRORLEVEL число — Условие является истинным, если код возврата последней выполненной программы не меньше указанного числа.
строка1==строка2 — Условие является истинным, если указанные строки совпадают.
EXIST имя_файла — Условие является истинным, если файл с указанным именем существует.
команда — Задает команду, выполняемую при истинности условия. За этой командой может следовать ключевое слово ELSE. В случае, если указанное условие ложно, будет выполнена команда, находящаяся после слова ELSE.
Предложение ELSE должно располагаться в той же строке, что и команда, следующая за ключевым словом IF. Например:
IF EXIST имя_файла. (
del имя_файла.
) ELSE (
echo имя_файла. missing.
)
Следующий пример содержит ОШИБКУ, поскольку команда del должна заканчиваться переходом на новую строку:
IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. Missing
Следующий пример также содержит ОШИБКУ, поскольку команда ELSE должна располагаться в той же строке, что и команда, следующая за IF:
IF EXIST имя_файла. del имя_файла.
ELSE echo имя_файла. missing
Вот правильный пример, где все команды расположены в одной строке:
IF EXIST имя_файла. (del имя_файла.) ELSE echo имя_файла. Missing
Изменение команды IF при включении расширенной обработки команд:
IF [/I] строка1 оператор_сравнения строка2 команда
IF CMDEXTVERSION число команда
IF DEFINED переменная команда
где оператор_сравнения принимает следующие значения:
EQU — равно
NEQ — не равно
LSS — меньше
LEQ — меньше или равно
GTR — больше
GEQ — больше или равно,
а ключ /I, если он указан, задает сравнение текстовых строк без учета регистра. Ключ /I можно также использовать и в форме строка1==строка2 команды IF. Сравнения проводятся по общему типу данных, так что если строки 1 и 2 содержат только цифры, то обе строки преобразуются в числа, после чего выполняется сравнение чисел.
Условие CMDEXTVERSION применяется подобно условию ERRORLEVEL, но значение сравнивается с внутренним номером версии текущей реализации расширенной обработки команд. Первая версия имеет номер 1. Номер версии будет увеличиваться на единицу при каждом добавлении существенных возможностей расширенной обработки команд. Если расширенная обработка команд отключена, условие CMDEXTVERSION никогда не бывает истинно.
Условие DEFINED применяется подобно условию EXIST, но принимает в качестве аргумента имя переменной среды и возвращает истинное значение, если эта переменная определена.
Строка %ERRORLEVEL% будет развернута в строковое представление текущего значения кода ошибки ERRORLEVEL, за исключением ситуации, когда уже имеется переменная среды с именем ERRORLEVEL; в подобном случае подставляется значение этой переменной. Например, с помощью данной строки можно выполнить следующее:
goto answer%ERRORLEVEL%
:answer0
echo Получен код возврата 0
:answer1
echo Получен код возврата 1
Допускается и применение описанных выше операторов числового сравнения:
IF %ERRORLEVEL% LEQ 1 goto okay
Строка %CMDCMDLINE% будет развернута в исходную командную строку, переданную CMD.EXE до любой обработки, за исключением ситуации, когда уже определена переменная среды с именем CMDCMDLINE; в подобном случае подставляется значение этой переменной.
Строка %CMDEXTVERSION% будет развернута в строку, представляющую собой текущее значение CMDEXTVERSION, за исключением ситуации, когда уже имеется переменная среды с именем CMDEXTVERSION; в подобном случае подставляется значение этой переменной.
Примеры использования:
Если параметр командной строки не задан, то пользователю выдается сообщение об ошибке.
@echo off
REM Проверить наличие имени файла, задаваемого в качестве параметра %1
REM Если параметр %1 пустой – переход на метку error
if «%1» EQU «» goto error
REM Если параметр задан, создаем пустой файл, копированием из устройства nul
copy nul «%1»
exit
:error
ECHO File name required ! Must be — %~n0 filename.ext
:exit
Примеры вывода для отвечающего и не отвечающего узлов:
Ответ от 192.168.1.1: число байт=32 время=1мс TTL=64 — если устройство с данным IP-адресом доступно;
Превышен интервал ожидания для запроса. — если устройство не отвечает;
Команда find /I «TTL» возвращает код ERRORLEVEL равный 0, если строка
«TTL» присутствует в результате выполнения ping. Ключ /I имеет смысл использовать,
чтобы результат не зависил от того, строчные или заглавные символы составляют строку «ttl».
Результат работы командного файла записывается в текстовый файл iplist.txt
@ECHO OFF
REM Постоянная часть IP-адреса
set IPTMP=192.168.1.
REM Количество пингуемых узлов
set N=254
rem С какого адреса начать — начальное значение » хвоста » IP- адреса X.X.X.IPMIN
set /A IPMIN=1
ECHO %DATE% Опрос пингом %N% адресов начиная с %IPTMP%%IPMIN% >> iplist.txt
rem M0 — метка для организации цикла
:M0
rem Переменная IPFULL — полное значение текущего IP-адреса
set IPFULL=%IPTMP%%IPMIN%
rem Если » хвост «больше N – перейти к завершению работы
IF %IPMIN% GTR %N% GOTO ENDJOB
ping -n 1 %IPFULL% | find /I «TTL»
if %ERRORLEVEL%==0 Echo %IPFULL% >> iplist.txt
rem Сформируем следующий IP-адрес
set /A IPMIN=%IPMIN% + 1
rem Перейдем на выполнение следующего шага
GOTO M0
rem Завершение работы
:endjob
exit
Существуют некоторые особенности реализации командного интерпретатора CMD.EXE, которые необходимо учитывать при обработке значений переменных внутри циклов IF и FOR. Использование значений переменных внутри скобок, требует изменения стандартного режима интерпретации командного процессора. Разработчиками предусмотрена возможность запуска CMD.EXE с параметром /V:ON, что включает разрешение отложенного расширения переменных среды с применением символа восклицательного знака (!) в качестве разделителя. То есть, параметр /V:ON разрешает использовать !var! в качестве значения переменной var во время выполнения внутри циклов команд FOR и IF. Но на практике чаще используется возможность локального включения данного режима внутри командного файла специальной директивой:
Setlocal EnableDelayedExpansion
После чего, можно обрабатывать принимаемые переменными значения внутри цикла, используя вместо знаков процента восклицательные знаки:
FOR … (
IF !ERRORLEVEL!==0 вместо %ERRORLEVEL%==0
…
)
    В русскоязычной справке команды IF имеется ошибка, которая много лет переходит из версии в версию — вместо оператора EQU — равно, указано EQL — равно
Весь список команд CMD Windows
— выполнение нескольких команд из Windows cmd-скрипта
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
- Реклама Обратитесь к разработчикам и технологам со всего мира
- О компании
.net 2.0 — c # Одновременное выполнение нескольких команд в cmd.exe и запись вывода в текстовый файл
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
- Реклама Обратитесь к разработчикам и технологам со всего мира
- О компании
cmd — командный файл для открытия нескольких командных строк и выполнения одной и той же задачи
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
- Реклама Обратитесь к разработчикам и технологам со всего мира
- О компании
For — Зацикливание команд — Windows CMD
For — Зацикливание команд — Windows CMD — SS64.comУсловно выполнить команду несколько раз.
синтаксис для файлов FOR %% параметр IN ( набор ) DO команда синтаксис-FOR-Files-Rooted at Path ДЛЯ / R [[диск:] путь] %% параметр IN ( установить ) DO команда синтаксис для папок ДЛЯ / D %% параметр IN ( folder_set ) DO команда синтаксис-FOR-список чисел ДЛЯ / L %% параметр IN (начало, шаг, конец) DO команда синтаксис-ДЛЯ-содержимого файла ДЛЯ / F ["параметры"] %% параметр IN (набор файлов) DO команда FOR / F ["опции"] %% параметр IN ("Текстовая строка для обработки") DO команда синтаксис-FOR-Результаты команды FOR / F ["опции"] %% параметр IN ('команда для обработки') DO команда
Действие команды FOR можно описать как…
- Взять набор данных
- Сделайте параметр FOR %% G равным некоторой части этих данных
- Выполнить команду (необязательно, используя параметр как часть команды).
- Повторить для каждого элемента данных
Если вы используете команду FOR в командной строке, а не в пакетной программе, используйте только один знак процента:% G вместо %% G .
ДЛЯ Параметры
Первый параметр должен быть определен с помощью одного символа, например буквы G.
FOR %% G IN …
В каждой итерации цикла FOR оценивается предложение IN (….) и %% G устанавливается на другое значение
Если это предложение приводит к одному значению тогда %% G устанавливается равным этому значению, и команда выполняется.
Если предложение приводит к нескольким значениям, то неявно определяются дополнительные параметры для хранения каждого из них. Они автоматически присваиваются в алфавитном порядке %% H %% I %% J … (неявное определение параметров)
Если параметр относится к файлу, то можно использовать расширенную ссылку на переменную для извлечения имени файла / пути / даты / размера.
Конечно, вы можете выбрать любую букву алфавита, кроме %% G.
%% G — хороший выбор, поскольку он не конфликтует ни с одной из букв формата имени пути (a, d, f, n, p, s, t, x) и обеспечивает самый длинный ряд неконфликтующих букв для использования как неявные параметры.
G> H> I> J> K> L> M
Буквы формата чувствительны к регистру, поэтому использование заглавной буквы также является хорошим способом избежать конфликтов %% A, а не %% a.
Примеры
FOR / F «tokens = 1-5» %% A IN («Это короткое предложение») DO @echo %% A %% B %% D
приведет к выводу: Это короткое
Создайте набор из 26 папок, по одной для каждой буквы алфавита:
FOR %% G IN (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) DO (md C: \ demo \ %% G)
Использование переменных в цикле FOR
Переменные раскрываются в начале цикла FOR и не обновляются до завершения всего раздела DO.
.
В следующем примере подсчитывается количество файлов в текущей папке, но% count% всегда возвращает 1:@ эхо выкл
SET count = 1
FOR / f «tokens = *» %% G IN (‘dir / b’) DO (
эхо% count%: %% G
установить / счетчик + = 1 )Для обновления переменных в каждой итерации цикла мы должны либо использовать EnableDelayedExpansion, либо использовать механизм подпрограммы CALL :, как показано ниже:
@ эхо выкл
SET count = 1
FOR / f «tokens = *» %% G IN (‘dir / b’) DO (вызов : подпрограмма «%% G» )
GOTO: eof: подпрограмма
эхо% количество%:% 1
set / a count + = 1
GOTO: eof
Вложенные команды FOR
Команды FOR могут быть вложенными FOR %% G… DO (для %% U … do …)
при вложении команд выбирайте разные буквы для каждой части. тогда ты можешь обратитесь к обоим параметрам в последней команде DO.Пример выхода из внутреннего цикла двух вложенных циклов FOR см. На странице EXIT.
Если расширения команд отключены, команда FOR будет поддерживает только базовый синтаксис без расширенных переменных:
FOR %% параметр IN (set) Команда DO [команда-параметры]
Уровни ошибок
Команда FOR обычно не устанавливает никаких уровней ошибок, оставляя это для вызываемой команды .
Одно исключение — использование подстановочного знака, если подстановочный знак не соответствует ни одному файлу, тогда FOR вернет% ERRORLEVEL% = 5
FOR сам по себе не устанавливает и не сбрасывает уровень ошибки.
FOR — это внутренняя команда.
«Те, кто не может вспомнить прошлое, обречены на его повторение» — Джордж Сантаяна
Связанный:
FOR — Прокрутите набор файлов в одной папке.
FOR / R — просмотр файлов (рекурсивные подпапки).
FOR / D — просмотреть несколько папок.
FOR / L — Перебирайте диапазон чисел.
FOR / F — Перебирать элементы в текстовом файле.
FOR / F — цикл вывода команды.
Параметры / аргументы% ~ options.
FORFILES — Пакетная обработка нескольких файлов.
GOTO — указание пакетной программе перейти к отмеченной строке.
ЕСЛИ — условно выполнить команду.
Powershell: ForEach-Object — цикл для каждого объекта в конвейере.
Эквивалентная команда bash (Linux): awk или для var в [список]; do — развернуть список и выполнить команды .
Авторские права © 1999-2020 SS64.com
Некоторые права защищены .