Методы Write и WriteLine объекта WScript.StdOut

Общие сведения о командном процессоре Windows.

Использование переменных в командных файлах.

Передача параметров командному файлу.

Переходы и метки.

Примеры командных файлов:

– Своя команда для создания новых файлов.

– Присвоение съемному диску одной и той же буквы.

– Создание архива, имя которого содержит дату и время.

– Выполнение только в заданный интервал времени.

– Пример создания архива каталога пользователя.

– Изменение даты и времени для файлов и папок.

– Запуск и остановка служб Windows в командной строке.

– Выдача на экран значения ERRORLEVEL.

– Диалог с пользователем.

– Задержки в командных файлах.

– Определение текущей версии Windows.

– Поиск в локальной сети компьютеров с запущенным приложением.

– Поиск компьютеров с запущенным приложением по списку на основе сетевого окружения.

– Выключение компьютеров по списку, созданному на основе сетевого окружения.

– Поиск в локальной сети включенных компьютеров.

– Работа с дисками, файлами и каталогами.

– Работа с графическими приложениями из командной строки.

– Перекодировка текстовых файлов .

– Часто встречающиеся ошибки при написании командных файлов.

Перенаправление стандартного выводаПеренаправление вывода ошибокПеренаправление стандартного вывода и стандартного вывода ошибок в один файлПеренаправление стандартного вводаКонвейеры

Многие программы выводят в консоль какую-либо информацию. Этот вывод часто делится на два типа:

  • Результаты работы программы, т.е. данные, для получения которых и создавалась эта программа;
  • Сообщения о состоянии или об ошибках.

Например, если посмотреть на вывод программы ls, можно увидеть, что она выводит на экран результаты своей работы и иногда сообщения об ошибках. Согласно центральной идее Unix, что «всё — есть файл», программы, в действительности, выводят свои результаты в специальный файл, который называется стандартным выводом или стандартным потоком вывода (часто обозначается как stdout), а сообщения о состоянии — в специальный файл стандартный вывод ошибок или поток ошибок (stderr). По умолчанию оба эти потока связаны с экраном и не сохраняются на диске.

Кроме того, многие программы принимают ввод из специального файла с названием стандартный ввод или стандартный поток ввода (stdin), который по умолчанию связан с клавиатурой.

Механизм перенаправления ввода/вывода позволяет изменять направление вывода и ввода. Обычно вывод осуществляется на экран, а ввод — с клавиатуры, но механизм перенаправления ввода/вывода позволяет изменить этот порядок.

На нашем Youtube-канале вы можете подробнее ознакомиться с перенаправлением вывода консоли в файл, просмотрев видео Перенаправление в bash, а также найти много другой полезной информации.

Общие сведения о командном процессоре Windows.

Командные файлы (пакетные файлы, скрипты, сценарии, ”батники”) – это обычные текстовые файлы с расширением .bat или .cmd, строки которых представляют собой специальные команды командного процессора (интерпретатора команд ) и/или имена исполняемых файлов с параметрами. Командный процессор – это специальная программа, являющаяся обязательным элементом практически любой операционной системы, главным назначением которой, является предоставление пользователю возможности выполнения определенных программ без их компиляции и создания исполняемых файлов. Для операционных систем DOS и Windows9X в качестве интерпретатора команд использовался командный процессор command.com, для всех остальных ОС семейства Windows ( NT/2k/XP/Vista/7/8/10 и старше) – cmd.exe.

Несмотря на непрерывное совершенствование средств создания и выполнения сценариев с использованием объектно-ориентированных языков, обычная командная строка и простые командные файлы, по-прежнему остаются основным инструментом для выполнения рутинных действий, диагностики сетевых проблем, автоматизации процессов резервного копирования и т.п. При всех недостатках реализации командного процессора в Windows, он был и остается важнейшим инструментом администрирования, диагностики и управления системой.

Современная реализация командного процессора CMD кроме классического применения, позволяет также использовать возможности Инструментария управления Windows (WMI –Windows Management Instrumentation), сценарии Windows Script Host (WSH) и даже оболочки (shell) операционных систем Linux без установки стороннего программного обеспечения, поскольку в современных Windows, начиная с Windows 10, в качестве стандартного компонента системы может применяться Подсистема Windows для Linux (WSL – Windows Subsystem for Linux), что позволяет объединять в командных файлах исходные тексты CMD и, например, – bash.
   
Как уже упоминалось выше, командный файл – это обычный текстовый файл с набором команд, которые последовательно выполняются командным процессором CMD Windows (cmd.exe). Командный процессор последовательно считывает и выполняет команды, которые представляют собой своеобразную программу, реализующую определенный алгоритм. Естественно, как и в любой другой среде программирования, программирование в командной строке подчиняется определенным правилам и командные файлы должны им полностью соответствовать.

Передача параметров командному файлу.

Очень полезной особенностью работы с командными файлами является
возможность получать значения параметров командной строки и использовать их
в операциях внутри самого командного файла.

params.bat FIRST second “two words”
Параметры командной строки, содержащие пробелы должны заключаться в двойные кавычки.

При обработке входных параметров необходимо знать, были ли они вообще заданы в командной строке. Для проверки наличия каких-либо входных параметров, передаваемых
командному файлу, можно проверить, является ли значение переменной %1
пустым, что можно сделать, заключив ее, например в двойные кавычки, и проверив полученный результат на наличие этих кавычек, следующих подряд:

REM пробел текст
Строки, начинающиеся с REM пробел, считаются комментариями и командным процессором игнорируются.

Перенаправление стандартного ввода

Выше использовалась команда cat listing.txt для вывода содержимого файла на экран терминала. Утилита (cat) может принимать данные как прямым чтением из файла (как в примере), так и считыванием из потока ввода (напрямую с клавиатуры или из перенаправленного потока), а получив данные, утилита cat выводит их в стандартный поток вывода (обычно — это экран).

В качестве примера содержимое файла с листингом будет направлено в поток ввода, для этого выполните следующую команду:

cat < listing.txt

На экране будет показано всё то же содержимое листинга.

Таким способом можно подать на вход программе, читающей данные из потока ввода, информацию из файла.

Команды CMD

Строки командных файлов могут содержать как команды самого
процессора команд CMD, так и имена исполняемых модулей (программ или командных файлов).

– исполняемый файл ping.exe с параметром yandex.ru. Расширение .exe можно не указывать, и данная команда может быть записана так:

Список стандартных команд можно получить, введя команду:

Справочную информацию по конкретной команде можно получить, указав ее название в качестве параметра команды HELP:

HELP Имя команды

В русифицированной версии Windows необходимо учитывать, что в среде командного процессора символы национального алфавита отображаются в DOS-кодировке, в соответствии с кодовой страницей (code page) 866. При необходимости, для переключения между кодовыми страницами Windows и DOS используется команда

CHCP номер страницы
– использовать кодовую страницу 866 (DOS)
– использовать кодовую страницу 1251 (WINDOWS)

Внешний вид окна CMD.EXE (консоли Windows) можно изменить с помощью команды

В качестве аргументов для команды используются 2 шестнадцатеричные цифры, задающие цвет фона и цвет символа.

– символы белого цвета на черном фоне (используется по умолчанию).

– черные символы на белом фоне.

– светло-желтые символы на черном фоне.

– подсказка для команды COLOR.

Примеры командных файлов.

Использование утилит командной строки и командных файлов нередко позволяют
решить многие проблемы связанные с повседневной эксплуатацией компьютерной
техники. Большинство системных администраторов и грамотных пользователей
продолжают ими пользоваться, несмотря на то, что в Windows проявилось новое,
более мощное и современное средство управления системой – WMI
(Windows Management Instrumentation) и многофункциональная оболочка пользователя Power Shell. Очевидно, не в последнюю очередь, это
обусловлено простотой реализации и достаточной
эффективностью командной строки для решения повседневных задач обслуживания системы.

Ниже приведены простые
примеры с комментариями, которые демонстрируют некоторые возможности и
способы применения .cmd и .bat

Комбинирование команд с операторами перенаправления

Комбинируя команды-фильтры с другими командами и именами файлов, можно создавать команды на
заказ. Например, для сохранения имен файлов, содержащих строку «LOG», используется следующая
команда:

:/>  Не найден gpedit msc в Windows 10: что делать

Выход команды dir отсылается в команду-фильтр find. Имена файлов, содержащие
строку «LOG», хранятся в файле Loglist.txt в виде списка (например, NetshConfig.log,
Logdat.svd и Mylog.bat).

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать
раздел форума
этого сайта (требуется регистрация).

Перенаправление ввода команд (<)

Для перенаправления ввода команд с цифровой клавиатуры на файл или на устройство используйте
оператор «<». Например, для ввода команды sort из файла List.txt введите:

Содержимое файла File.txt появится в командной строке в виде списка в алфавитном порядке.

Оператор «<» открывает заданное имя файла с доступом только для чтения. Поэтому с его
помощью нельзя записывать в файл. Например, при запуске программы с оператором <&2 все
попытки прочитать дескриптор 0 ни к чему не приведут, так как изначально он был открыт с
доступом только для записи.

Параметры

Включение или отключения режима отображения на экране информации о работе команд.

Задание текста для вывода на экран.

Отображение справки в командной строке.

Конвейеры

Для демонстрации этого механизма понадобится несколько команд. Например, необходимо получить листинг всего содержимого папки /etc, включая все подкаталоги, и вывести на экран только имена с расширением .conf. Для выбора строк по заданному шаблону применяется утилита grep, которая, как и cat, может принимать данные как из файла, так и из потока ввода. Перенаправьте вывод команды ls -R на ввод команде grep “.conf”:

Если данный вывод необходимо сохранить в файл для дальнейшей работы, то операторы перенаправления и конвейеры можно сочетать в одной комбинированной команде. Например:

Важно отметить, что можно сочетать несколько конвейеров в одной составной команде. Такие команды часто называют фильтрами.

Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.

Метод Echo объекта WScript

Если же этот сценарий выполнялся с помощью wscript.exe, то строки по очереди выводятся в диалоговые окна с единственной кнопкой OK (рис. 2.2).

Часто бывает необходимо выводить в диалоговое окно не по одной строке текста, а сразу несколько таких строк (рис. 2.3). Для этого нужно формировать строки, содержащие символы перевода строки: escape-последовательность “n” для JScript и предопределенная именованная константа vbCrLf для VBScript (соответствующие примеры сценариев приведены в листингах 2.3 и 2.4).

Методы Write и WriteLine объекта WScript.StdOut

Методы Write и WriteLine объекта WScript.StdOut

Методы Write и WriteLine объекта WScript.StdOut

Методы Write и WriteLine объекта WScript.StdOut

Рис. 2.3. Диалоговое окно с несколькими строками текста

Листинг 2. Вывод в диалоговое окно нескольких строк (JScript)

При перенаправлении вывода в файл и задании существующего имени файла интерпретатор команд
Cmd.exe открывает файл с доступом только для записи и переписывает его содержимое. Если
дескриптор задан, интерпретатор команд Cmd.exe дублирует файл в существующий дескриптор.

Для дублирования определенного пользователем дескриптора 3 в дескриптор 1 введите:

Для перенаправления всех выходных данных, включая выходные данные дескриптора 2 (STDERR),
команды ipconfig в дескриптор 1 (STDOUT) и последующего перенаправления выходных
данных в Output.log введите:

Следующий пример представляет собой пакетный файл, выводящий сообщение из трех строк на
экран с пустыми строками до и после него:

Если вывод необходимо сделать в файл, то следует использовать
операторы перенаправления команд.
В рамках этого проекта можно ознакомиться с этим на странице
Использование операторов перенаправления команд.

При выводе русских букв необходимо помнить о кодировке.
Текст сообщения должен быть в DOS (866) кодировке.
Многие текстовые редакторы его поддерживают.
Если необходимо, что бы текст сообщений был в WIN (1251)
кодировке и был виден из любого редактора, то можно
использовать следующий прием.

Такие сообщения для удобства можно выделить в отдельный блок.

Если такой блок неудобно располагать в начале файла, то можно
образовать из него процедуру, разместить в конце bat файла,
а на исполнение вызвать эту процедуру командой call в начале bat файла.
Из примера все должно стать понятнее))

Если сообщение одиночное, то можно
поступить следующим образом:

Дублирование дескрипторов

Оператор перенаправления «&» дублирует выходные или входные данные с одного заданного
дескриптора на другой заданный дескриптор. Например, для отправки выводных данных команды
dir в файл File.txt и отправки ошибки вывода в файл File.txt введите:

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

Использование переменных окружения в командных файлах.

При работе с командными файлами невозможно обойтись без переменных окружения (environments) – переменных, значения которых определяют среду, в которой выполняются команда или пакетный файл. Часто их называют переменными среды. Значения, принимаемые этими переменными формируются при
загрузке Windows, регистрации пользователя в системе, старте или завершении
некоторых приложений, и, кроме того, могут быть заданы с помощью специальной
команды
SET переменная = значение

SETX переменная = значение

Первая присваивает значение переменной, действующее до завершения текущей сессии командной строки. Вторая – значение, действующее постоянно.

Как уже упоминалось выше, значение, присвоенное какой-либо переменной, доступно для обработки в командной строке или в командном файле с использованием ее имени, заключенного в знаки процента – % . Системные переменные позволяют получить сведения об аппаратной и программной среде, в которой выполняется командный файл, что позволяет реализовать его исполнение на разных компьютерах, независимо от их конкретной конфигурации и пользовательских настроек. Например, в командном файле используется вывод содержимого системного каталога C:Windows :

DIR C:Windows

Алгоритм, реализуемый данным командным файлом, будет прекрасно выполняться до тех пор пока не встретится компьютер с Windows установленной не на диск C:, а например, на D:. Чтобы этого не происходило, желательно использовать системную переменную WINDIR, принимающую значение пути системного каталога:

На практике, с помощью команды SET обычно задается и модифицируется путь поиска исполняемых программ
– переменная окружения PATH.

SET PATH=C:Windows; C:windowssystem32
Данная команда определяет, что поиск исполняемых файлов будет выполняться в
каталоге C:Windows и, если результат неуспешен, в
C:windowssystem32

При необходимости выполнить программу, например, myedit.exe, размещенную в
каталоге C:NewProgs необходимо либо указать полный путь исполняемого файла, либо сделать текущим каталогом каталог с программой и использовать только его имя. Если в командной строке не задан полный путь, а только имя
исполняемого файла – myedit.exe

то сначала будет выполняться поиск файла myedit.exe в текущем каталоге, и если
он не будет найден – в каталогах, список которых определяется значением переменной
PATH. Символ ; является разделителем элементов в списке путей поиска.
Если в приведенном примере, текущим каталогом не является
C:NewProgs, и в остальных каталогах, заданных значением переменной
PATH, нет исполняемого файла myedit.exe, то попытка его запуска
завершится ошибкой. Однако, если модифицировать значение переменной PATH, добавив в нее требующийся каталог, то указание полного пути исполняемого файла становится необязательным.
Команда

изменит текущее значение PATH,
добавив каталог C:NewProgs в начало списка. Для добавления каталога в конец списка используется несколько иная конструкция:

SET PATH=%path%; C:NewProgs

Выполнение команды SET без параметров позволяет получить текущие
значения переменных окружения:

NUMBER_OF_PROCESSORS=1 – количество процессоров

OS=Windows_NT- тип ОС

Path=C:WINDOWSsystem32; C:WINDOWS;C:Program FilesFar – путь поиска исполняемых файлов.

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE; .JS;.JSE;.WSF;.WSH – расширения для исполняемых файлов.

PROCESSOR_ARCHITECTURE=x86 – архитектура процессора.

PROCESSOR_IDENTIFIER=x86 Family 6 Model 8 Stepping 1, AuthenticAMD – идентификатор процессора.

PROCESSOR_LEVEL=6 – уровень (номер модели) процессора.

PROCESSOR_REVISION =0801 – версия процессора.

ProgramFiles=C:Program Files – путь к папке “Program Files”

SystemDrive=C: – буква системного диска.

SystemRoot= C:WINDOWS – каталог ОС Windows.

Значения некоторых переменных по команде SET не отображаются, хотя и присутствуют в системе. В основном, это переменные, принимаемые значения которых динамически изменяются:

:/>  Лицензионные ключи для активации Windows 10

%CD% – Принимает значение строки текущего каталога.

%DATE% – Принимает значение текущей даты.

%TIME% – Принимает значение текущего времени.

%RANDOM% – Принимает значение случайного десятичного числа в диапазоне 1 -32767.

%ERRORLEVEL% – Принимает текущее значение кода завершения задачи ERRORLEVEL

%CMDEXTVERSION% – Принимает значение версии командного процессора CMD.EXE для расширенной обработки команд.

%CMDCMDLINE% – Принимает значение строки, которая вызвала
командный процессор.

Значения, принимаемые переменными окружения, могут быть расширены с помощью
специального признака – символа ” ~ “, что позволяет получить их частичное
значение, или изменить его подменой какой-либо части. Практические примеры использования расширений переменных будут рассмотрены ниже.

Подробное описание команд с примерами их использования имеется в разделе Список команд CMD Windows.

Присвоение съемному диску одной и той же буквы.

Задача заключается в том, чтобы съемный USB диск (флэш диск) был доступен
всегда под одной и той же буквой, независимо от того, на каком компьютере он
используется и каким образом он был подключен. Для ее решения воспользуемся уже упоминаемой выше командой SUBST, но реализуем присвоение новой буквы диску с
помощью подстановочного значения переменной %0, создаваемой
системой при каждом запуске командного файла.

Выберем для съемного диска желаемую букву, например – X.

Некоторые из переменных окружения, в том числе и переменная %0,
принимающая значение пути и имени выполняющегося командного файла, позволяют
при определенной модификации с использованием специального признака –
символа ” ~ “, получить ее частичное значение (расширение переменной).
Например, не полный путь
файла, а только его имя, или каталог расположения, или букву диска, с
которого он был запущен или еще около десятка различных элементов, связанных
с подстановочными значениями переменной %0.

Дополнительное представление о подстановочных значениях
переменной %0 можно получить из командного файла следующего
содержания:

Переходы и метки.

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

Исходные данные: имеется 2 съемных диска, один из которых должен быть виден в проводнике как диск X: , а второй – как диск Y: независимо от того, в какой порт USB они подключены и какие буквы присвоены им операционной системой. Для назначения букв дискам можно воспользоваться командой SUBST.
Будем считать, что реальные диски могут быть подключены как F: или G:
Опознавание дисков будем выполнять по наличию файла с определенным именем
(лучше всего такой файл сделать скрытым в корневом каталоге съемного диска и назвать его как-нибудь необычно):

Flashd1.let – на первом диске

Flashd2.let – на втором

Таким образом, задача командного файла заключается в том, чтобы проверить
наличие на сменных дисках F: и G: файлов Flashd1.let
или Flashd2.let и, в зависимости от того, какой из них присутствует,
присвоить диску букву X: или Y:

Для поиска файла на диске воспользуемся командой :

IF EXIST имя_файла команда

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

SUBST X: C: – – создать виртуальный диск
X:, содержимым которого будет корневой каталог диска C:

Для решения поставленной задачи, создаем командный файл, например с именем setletter.bat, следующего содержания:

В качестве метки используется строка символов, начинающаяся
с двоеточия. Сделаем изменения в нашем командном файле, чтобы не возникало
сообщений об ошибке:

При выполнении измененного таким образом командного файла, сообщение об
ошибке при выполнении SUBST исчезнет.

Конечно, данный пример очень примитивен, но главная его цель заключается не в написание оптимального командного сценария, а в демонстрации принципов использования меток и переходов. Во всех последующих примерах, насколько это возможно, используется именно такой подход – важна не оптимальность исходного текста, а его максимальная простота для понимания.

Одним из важнейших приемов при написании сложных командных файлов
является анализ успешности выполнения конкретной команды или программы.
Признаки ошибок при выполнении команд можно отслеживать, анализируя
специальную переменную ,
значение которой формируется при завершении работы большинства программ.
Обычно ERRORLEVEL равно нулю, если программа завершилась без ошибок и
единице – при возникновении ошибки. Могут быть и другие значения, если они
предусмотрены в выполняемой программе.

В качестве команды в строке командного файла можно использовать также
командный файл. Причем, для передачи с возвратом обратно к точке выполнения
вызывающего командного файла используется
команда CALL. Попробуйте создать командный файл test.bat, следующего содержания:

– приостановить выполнение командного файла до
нажатия любой клавиши.

Если же в файле test.bat убрать CALL, оставив “1.bat”, то , выполнится командный файл 1.bat, и возврат в test.bat выполняться не будет.

Вызываемый командный файл может создавать переменные и присваивать им
определенные значения, которые будут доступны для обработки в вызывающем
файле. Попробуйте изменить файл test.bat следующим образом:

Переменные вызываемого файла будут доступны в вызывающем файле.

Кстати, используя передачу управления командному файлу, можно организовать
его зацикливание. Попробуйте добавить в конец файла test.bat строку:

Выйти из зацикливания командного файла можно по нажатию комбинации
CTRL+Break.

Команда CALL может использоваться не только для вызова другого командного файла, но и для вызова внутренней подпрограммы. В этом случае в качестве аргумента используется не имя внешнего файла, а метка:

Создание архива, имя которого содержит дату и время.

Решим следующую задачу – нужно создать архив файлов, находящихся в каталоге
C:Program FilesFAR. Имя архивного файла должно состоять из текущего времени
(часы.минуты.секунды – ЧЧ.ММ.СС.rar), и помещен он должен в новый каталог, имя которого должно состоять из текущей даты
(день.месяц.год – ДД.ММ.ГГГГ). Для архивирования будем использовать архиватор RAR.
Формат запуска для создания архива:

a – команда создания архива.
-r – ключ, определяющий архивирование подкаталогов (т.к. в исходной папке есть подкаталоги).

Таким образом, для решения задачи нужно правильно создать имена и пути для RAR. Для чего
воспользуемся следующими исходными данными:

Специальные символы CMD

Работа с командным процессором предполагает использование двух стандартных устройств – устройства ввода (клавиатура) и устройства вывода (дисплей). Однако, имеется возможность изменить стандартно используемые устройства ввода-вывода с помощью специальных символов – символов перенаправления

– перенаправление вывода
– перенаправление ввода

Для вывода справки не на экран а, например, в файл с именем help.txt, можно использовать следующую команду:

Простейший пример перенаправления ввода:

cmd.exe < commands.txt – командный процессор не будет ожидать ввода команд с клавиатуры, а считает их из файла commands.txt. Фактически, указанный текстовый файл в данном случае является командным файлом.

При запуске командного процессора можно указать конкретную команду в качестве аргумента командной строки:

cmd.exe /C HELP FOR – выполнить команду HELP FOR и завершиться (параметр командной строки или ключ /C)

cmd.exe /K HELP FOR – выполнить команду HELP FOR и перейти в режим ожидания дальнейшего ввода команд (ключ /K)

Подробную справку по использованию cmd.exe можно получить, введя в качестве аргумента ключ /?

& – одиночный амперсанд используется для разделения нескольких команд в одной командной строке.

команда1 & команда2 – выполняется первая команда, затем вторая команда.

&& – удвоенный амперсанд между двумя командами, означающий условное выполнение второй команды. Она будет выполнена, если код завершения (или код возврата) первой команды равен нулю, т.е. команда выполнена успешно. Успешность
выполнения команды определяется значением специальной переменной среды ERRORLEVEL.

команда1 && команда2 – выполняется команда1, а команда2 выполняется, только если первая была выполнена успешно.

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

:/>  Работа в Windows 8 — часть 1

cmd.exe /C “HELP IF” & ”HELP IF”

Завершится выполнением первой команды и сообщением об ошибке для второй:

“”HELP” не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Как и в любом другом языке программирования, в сценариях CMD невозможно обойтись без переменных. Для получения их значения применяется специальный символ – знак процента % . Строка, заключенная в знаки процента интерпретируется как значение переменной, например:

Символ ^ , являющийся последним символом строки, используется как признак продолжения предыдущей. Это относится как к тексту, так и к командам.

Использование операторов перенаправления команд

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

В следующей таблице описаны операторы перенаправления потоков ввода и вывода команд.

По умолчанию, входные данные команды (дескриптор STDIN) отсылаются с клавиатуры
интерпретатору команд Cmd.exe, далее Cmd.exe отправляет выходные данные команды (дескриптор
STDOUT) в окно командной строки.

В следующей таблице представлены доступные дескрипторы.

Для задания перенаправления в существующие дескрипторы используется амперсанд (&), затем
номер требуемого дескриптора (например, &номер_дескриптора). Например, для
перенаправления дескриптора 2 (STDERR) в дескриптор 1 (STDOUT) введите:

Использование оператора «<&» для перенаправления ввода и дублирования

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

Например, для считывания файла File.txt на вход в дескриптор 0 (STDIN) введите:

Для открытия файла File.txt, сортировки его содержимого и последующей отправки в окно
командной строки (STDOUT) введите:

Для того чтобы найти файл File.txt и перенаправить дескриптор 1 (STDOUT) и дескриптор 2
(STDERR) в Search.txt введите:

Для дублирования определенного пользователем дескриптора 3 в качестве входной информации для
дескриптора 0 (STDIN) введите:

Своя команда для создания новых файлов.

В составе операционной системы Windows нет специальной команды для создания нового файла, но без нее можно легко обойтись несколькими способами:

Копирование с клавиатуры в файл

COPY CON myfile.txt

При выполнении этой команды данные с клавиатуры (стандартное устройство CON – консоль) будут заноситься в файл myfile.txt текущего каталога. Нажатие клавиши F6 или комбинации CTRL-Z завершит вывод.

Комбинация перенаправления ввода и перенаправления вывода:

При выполнении этой команды, как и в первом случае, используется копирование
с консоли в файл, но вместо ручного ввода данных с клавиатуры используется ввод с
несуществующего файла (устройства) xyz. Система выдаст сообщение, о том, что такого
устройства или файла
не существует, но пустой файл myfile.txt будет успешно создан.

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

COPY NUL myfile.txt

При работе в командной строке часто приходится создавать новые пустые
файлы, поэтому, стоит подготовить свой командный файл (например, с
именем nf.bat),

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

Для удобства использования, можно поместить этот командный файл в системный каталог
(например, в C:windowssystem32) или любой другой, существующий в путях
поиска, задаваемых значением переменной PATH). Теперь, в командной строке, находясь в любом каталоге можно одной командой создавать пустые файлы.

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

Расширение командного файла (.bat) можно не набирать и команда еще больше упрощается:

В тексте командного файла присутствует проверка, задано ли имя
создаваемого файла в командной строке (if “%1%” EQU “” goto error), и если не
задано – выводится сообщение об ошибке и командный файл завершает
свою работу.

В плане совершенствования функционала, можно добавить в этот командный файл проверку
на существование файла с именем, указанным в командной строке и предупреждением пользователя о его возможной перезаписи.

Использование оператора канала (|)

Для перенаправления всего вывода в один файл необходимо поток ошибок направить в поток вывода, а его, в свою очередь, перенаправить в файл. Например:

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

Если порядок перенаправления изменить, как показано ниже, стандартный вывод ошибок будет перенаправлен на экран:

Версия bash, имеющаяся в РЕД ОС, поддерживает и другой, более короткий способ написания данного перенаправления:

Между символами в операторе перенаправления не должно быть пробелов!

Иногда случаются ситуации, когда вывод программы совсем не нужен, его желательно не просто перенаправить в файл, а перенаправить в никуда. Для этого достаточно указать в качестве целевого файла для перенаправления вывода специальный файл /dev/null. Этот файл представляет системное устройство, называемое битоприёмником (bit bucket), которое принимает любой ввод и ничего с ним не делает. Например:

Перенаправление вывода ошибок

При попытке перенаправить вывод с указанием имени несуществующего каталога командой:

На экран будет выведено следующее сообщение:

ls: невозможно получить доступ к ‘/folder’: Нет такого файла или каталога

Однако сообщение об ошибке выведено в терминал, а не в файл. Дело в том, что обычно программы не выводят сообщения об ошибках в стандартный вывод — они выводят сообщения об ошибках в поток ошибок.

Поскольку перенаправлен только стандартный вывод, а стандартный вывод ошибок — нет, сообщение об ошибке появилось на экране терминала.

Перенаправление стандартного вывода ошибок осуществляется не так просто, как стандартного вывода. Чтобы перенаправить поток ошибок, нужно указать его дескриптор файла.

Первые три потока (иными словами — стандартных файла) были уже упомянуты как стандартный ввод, вывод и вывод ошибок. К ним можно обратиться по их уникальным цифровым идентификаторам, которые и называются файловыми дескрипторами:

Командная оболочка ссылается на стандартные потоки как на файлы по их дескрипторам (иногда говорят, «номерам потока»). Так как стандартному потоку ошибок соответствует файловый дескриптор 2, можно перенаправить его, например, таким образом:

Номер файлового дескриптора помещается непосредственно перед оператором перенаправления, без пробела!

Теперь на экран не выводится сообщение об ошибке.

Просмотрев содержимое файла (например, командной cat listing.txt), можно увидеть ту же информацию, как если бы вывод осуществлялся непосредственно в консоль.

Теперь попробуйте выполнить предыдущую команду, но для другого каталога, например:

Если понадобится очистить какой-нибудь файл (или создать новый, пустой файл), это можно сделать с помощью команды:

Простой оператор перенаправления, без предшествующей ему команды, очистит существующий файл или создаст новый, пустой файл.

Перенаправление вывода команд (>)

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

Если файл Dirlist.txt не существует, интерпретатор команд Cmd.exe создаст его. Если файл
существует, Cmd.exe заменит информацию в файле на данные, полученные от команды dir.

Оставьте комментарий