Справочник команд bat cmd файлов

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

batch file command

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

Команды пакетного файла

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

Список команд командного файла

Примечание:
Команды пакетного файла не чувствительны к регистру

АССОЦ


Пакетная команда ASSOC
связывает расширение файла с типом файла или перечисляет все ассоциации.

 @echo OFF
ASSOC | find ".txt"
pause 
  .txt = текстовый файл  

Как показано в выводе выше, он отображает ассоциацию файлов для  .txt
расширение.

Если бы только ASSOC
написан и выполнен, он будет отображать все ассоциации файлов для каждого расширения, а не только .txt
расширение.

АТТРИБ


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

Теперь предположим, что у нас есть файл note.txt
в нашем рабочем каталоге. Мы отобразим его атрибуты файла, а затем сделаем его скрытым и доступным только для чтения, добавив 'ah'
и 'r'
атрибуты к нему. И, наконец, мы также удалим некоторые атрибуты, которые мы добавили.

 @echo OFF
:: To display attribute of note.txt
ATTRIB note.txt
:: To make it read only by adding 'r'
ATTRIB +r note.txt
ATTRIB note.txt
:: To make it hidden by adding 'ah'
ATTRIB +ah note.txt
ATTRIB note.txt
:: To remove attribute read only
ATTRIB -r note.txt
ATTRIB note.txt 
  Примечание.txt
A R note.txt
A R AH note.txt
Примечание AH.txt  

Здесь, в этом выводе, A означает В архиве
, R означает Только чтение
и AH означает Скрытый
файл.

КД


Пакетная команда CD
помогает в навигации по различным каталогам и изменении каталогов или отображении текущего каталога.

 @echo OFF
:: CD without any parameters displays the current working directory
CD
:: Changing to the parent directory one level up
CD..
CD
:: Changing the path to Programs
CD\Programs
CD
pause 
  C:\Users\abc
C:\Пользователи
C:\Программы  

ЧКДСК


Пакетная команда CHKDSK
используется для проверки ошибок на диске.

 @echo OFF
CHKDSK 

ВЫБОР


 @echo OFF
ECHO You want coffee?
ECHO Enter Y for yes
ECHO Enter N for no
CHOICE /c YN /m "Yes or No" 
  Хочешь кофе?
Введите Y для да
Введите N, если нет
Да или Нет [Д,Н]?  

Теперь консоль ожидает вашего ввода, и как только вы введете свой ответ, она прекратит работу.

ЦЛС


Пакетная команда CLS
очищает экран.

 @echo OFF
CLS
pause 

Эта команда просто очищает все журналы на экране командной строки.

ЦМД


Пакетная команда CMD
вызывает новое окно командной строки.

 @echo OFF
CMD 

КОМП


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

 @echo OFF
COMP C:\abc.txt C:\xyz.txt 

КОНВЕРТ


Пакетная команда CONVERTS
тома или диски из одного формата в другой, то есть из FAT в NTFS.

 @echo OFF
CONVERT D:\ 

КОПИРОВАТЬ


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

 @echo OFF
:: For copying from one drive to another -xyz.txt from D:\ to E:\
COPY D:\xyz.txt E:\
:: If file has whitepace between name - use double quote
COPY "D:\my file.txt" E:\ 

ДАТА


Пакетная команда DATE
отображает текущую дату в системе.

 @echo OFF
echo %DATE% 
  Пт 07.07.2017  

Эта команда DATE отображает системную дату в командной строке, как показано выше.

ДЕЛ


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

 @echo OFF
:: To delete a single file xyz.txt
DEL D:\xyz.txt
:: To delete all the files of .txt extensions and ask for confirmation before deleting
DEL /p/s D:\*.txt
:: Remove \p to delete without confirmation
DEL /s D:\*.txt 

Примечание:
Команда DEL удаляет только файлы, а не каталоги.

ДИР


Пакетная команда DIR
перечисляет все содержимое каталогов.

 @echo OFF
:: To list all the contents of current directory
DIR
:: To list all the hidden files of working directory
DIR /ah
:: To list all files with .php extensions
DIR *.php 

ДИСКЧАСТЬ


Пакетная команда DISKPART
показывает свойства раздела диска.

 @echo OFF
DISKPART 

batch command diskpart

ЗАПРОС ВОДИТЕЛЯ


Пакетная команда DRIVERQUERY
отображает все установленные драйверы и их свойства.

 @echo OFF
DRIVERQUERY 

batch file commands - driverquery

Этот вывод показывает часть списка драйверов с их свойствами и датой установки. DRIVERQUERY
Команда показывает весь список драйверов, который огромен.

ЭХО


 @echo OFF
echo Hello 
  Привет  
  C:\> эхо Привет
Привет  

ВЫХОД


Пакетная команда EXIT
завершается и выходит из консоли.

 @echo OFF
echo HI
EXIT 

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

РАСШИРИТЬ


Пакетная команда EXPAND
извлекает содержимое .cab
файл.

 @echo OFF
EXPAND xyz.cab 

Этот скрипт извлечет все содержимое xyz.cab
файл в то же место, где xyz.cab
расположен.

ФК


Пакетная команда FC
находит разницу между двумя файлами и отображает их на консоли.

 @echo OFF
FC D:\a.txt D:\b.txt 

Этот скрипт найдет разницу в содержимом обоих файлов и перечислит их все.

НАЙТИ


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

 @echo OFF
FIND "find me" example.txt 

Этот скрипт будет искать строку «найди меня» в файле example.txt и, если она существует в example.txt, отобразит соответствующую строку в консоли.

ФОРМАТ


Пакетная команда FORMAT
используется для форматирования диска формата FAT 16/32 или NTFS в Windows.

 @echo OFF
FORMAT E:\ 

Этот сценарий отформатирует диск E и перезапишет предыдущее содержимое.

ПОМОЩЬ


Это может быть одна из самых важных команд пакетного файла, потому что с этим HELP
command мы можем знать обо всех других командах, используемых в пакетном файле или командной строке.

 @echo OFF
HELP 

Теперь в консоли будут отображаться все доступные команды с их функциями.

batch file command help

Так как список команд намного больше, мы нарезали список и показали здесь несколько.

 @echo OFF
:: Just type help and the command you want to know about
HELP copy 

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

batch file command help copy

Как видите, это HELP COPY
отображает все подробности о COPY
команда.

IPCONFIG


Пакетная команда IPCONFIG
отображает IP-конфигурацию Windows.

 @echo OFF
IPCONFIG 

batch file command ipconfig

P. S: Мы скрыли адрес iPV6 в выводе выше.

ЭТИКЕТКА


Пакетная команда LABEL
отображает метку диска или тома, а также используется для добавления, установки или удаления метки диска.

 @echo OFF
LABEL 

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

batch file command label

МД


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

 @echo OFF
MD abc 

Эта программа создаст новый каталог abc в текущем рабочем месте.

ЕЩЕ


Пакетная команда MORE
отображает содержимое файла один за другим.

 @echo OFF
MORE D:\example.txt 

Эта программа будет отображать содержимое файла example.txt построчно, по одному за раз.

ПЕРЕЕЗД


Эта пакетная команда перемещает файлы из одного каталога в другой, переименовывает каталоги и также перемещает каталоги.

 @echo OFF
:: To move xyz.txt from dir1 to dir2
MOVE C:\dir1\xyz.txt C:\dir2
:: To rename directory dir1 to dir2
MOVE C:\Program\dir1 C:\Program\dir2
:: To move directory dir1 from D:\ to D:\music
MOVE D:\dir1 D:\music\ 

Таким образом, MOVE
Команда может использоваться для перемещения файлов, каталогов и переименования каталогов.

НЕТТО


Пакетная команда NET
используется для многих сетевых функций в зависимости от используемых команд.

 @echo OFF
NET users 

batch command net

ПУТЬ


Пакетная команда PATH
отображает переменную пути или может использоваться для установки переменной пути.

 @echo OFF
ECHO %PATH% 

Эта программа покажет путь к текущему рабочему каталогу.

ПАУЗА


 @echo OFF
ECHO hi
pause 

ПИНГ


Пакетная команда PING
используется для отправки пакетов ICMP/IP на указанный адрес по сети.

 @echo OFF
PING 127.0.1.1 
  Пинг 127.0.1.1 с 32 байтами данных:
Ответ от 127.0.1.1: байт = 32 время <1 мс TTL = 128
Ответ от 127.0.1.1: байт = 32 время <1 мс TTL = 128
Статистика пинга для 127.0.1.1:
Пакеты: отправлено = 2, получено = 2, потеряно = 0 (0% потерь),
Приблизительное время прохождения туда и обратно в миллисекундах:
Минимум = 0 мс, Максимум = 0 мс, Среднее значение = 0 мс  

РД


:/>  Как открыть порт вин 7 и как настроить его

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

 @echo OFF
:: To remove directory xyz from C:\>
RD C:\xyz
:: To remove multiple directories from working location
RD dir1 dir2 

БРМ


Пакетная команда REM
означает комментарии в пакетном сценарии.

 @echo OFF
REM This is a comment 

Все, что написано после REM
интерпретируется как комментарий и не выполняется в пакетных программах.

РЕН


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

 @echo OFF
:: To rename x.php to y.php
REN C:\x.php C:\y.php 

СЕТ


Пакетная команда SET
отображает список переменных окружения системы.

 @echo OFF
SET 

ВЫКЛЮЧЕНИЕ


Пакетная команда SHUTDOWN
при вызове выключает компьютер.

 @echo OFF
SHUTDOWN 

СОРТИРОВКА


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

 @echo OFF
SORT D:\example.txt 

Этот сценарий сортирует содержимое файла example.txt в алфавитном порядке по возрастанию или по убыванию.

СТАРТ


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

 @echo OFF
START paint.exe 

Эта программа запустит приложение Paint, если оно находится в рабочем месте, иначе вам также придется явно указать путь к этой программе.

СИСТЕМНАЯ ИНФОРМАЦИЯ


Пакетная команда SYSTEMINFO
отображает всю конфигурацию компьютера и операционной системы.

 @echo OFF
SYSTEMINFO 

batch command systeminfo

Конечно, деталей будет гораздо больше, но, пожалуйста, попробуйте посмотреть на своем компьютере.

TASKKILL


Пакетная команда  TASKKILL is used to terminate a running task

 @echo OFF
TASKKILL /im notepad.exe 

СПИСОК ЗАДАЧ


Пакетная команда TASKLIST
перечисляет все запущенные задачи в консоли.

 @echo OFF
TASKLIST 

ВРЕМЯ


Пакетная команда TIME
используется для отображения или установки системного времени.

 @echo OFF
ECHO %TIME% 
  18:01:22:06  

Текущее время отображается в консоли.

НАЗВАНИЕ


Пакетная команда TITLE
устанавливает новый заголовок для консоли вывода.

 @echo OFF
TITLE New Console 

Этот скрипт установит заголовок выходной консоли на «Новая консоль». Таким образом, консоль вывода будет выглядеть так:

batch command title

ДЕРЕВО


Пакетная команда TREE
отображает древовидную диаграмму подкаталогов до последнего уровня.

У меня есть папка с фильмами. Т О, если бы я побежал TREE
в этой папке фильмов он создаст дерево фильмов внутри этой папки, а также подкаталоги, в которых есть файл фильма и файл субтитров.

 @echo OFF
TREE D:\movies 

batch command tree

ТИП


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

 @echo OFF
TYPE C:\notes.txt
pause 

Эта программа отобразит все содержимое notes.txt
к консоли.

ВЕР


Пакетная команда VER
отображает версию Windows или MS-DOS.

 @echo OFF
VER
pause 
  Microsoft Windows [Version 10.0.14393]  

VOL


The batch command VOL
displays the current volume label of Windows.

 @echo OFF
VOL 
  Microsoft Windows [Version 10.0.14393]  

XCOPY


The batch command XCOPY
is similar to COPY
command but COPY
command copies single file whereas XCOPY
command copies entire directories including subdirectories.

 @echo OFF
XCOPY D:\test.txt to E:\ 

This script will copy test.txt from D drive to E drive.

So, these are the batch file commands along with examples.

We hope you find these batch file commands easy to learn. We will discuss more advanced concepts in next tutorials.



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Общие сведения о командном процессоре 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). Командный процессор последовательно считывает и выполняет команды, которые представляют собой своеобразную программу, реализующую определенный алгоритм. Естественно, как и в любой другой среде программирования, программирование в командной строке подчиняется определенным правилам и командные файлы должны им полностью соответствовать.

Команды 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.

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

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

:/>  Как управлять принтером в системе Windows 10


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


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

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

HELP > help.txt

При выполнении данной команды, в текущем каталоге будет создан файл с именем help.txt
, содержимым которого будет результат вывода команды HELP. Если файл help.txt
существовал на момент выполнения команды, его содержимое будет перезаписано. Для того, чтобы дописать данные в конец существующего файла, используют удвоение символа перенаправления вывода – “>>”

HELP GOTO > myhelp.txt

– в файл myhelp.txt
будет выдана справка по использованию команды GOTO

HELP COLOR >> myhelp.txt

– в конец файла myhelp.txt будет дописана справка по использованию команды COLOR

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

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
выполняется, только если первая была выполнена успешно.

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

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

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


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

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

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

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

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

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

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

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

DIR C:\Windows

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

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

SET PATH=C:\Windows; C:\windows\system32

Данная команда определяет, что поиск исполняемых файлов будет выполняться в
каталоге C:\Windows
и, если результат неуспешен, в
C:\windows\system32

При необходимости выполнить программу, например, 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:\WINDOWS\system32; C:\WINDOWS;C:\Program Files\Far – путь поиска исполняемых файлов.

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”

PROMPT=$P$G – формат приглашения командной строки $P – путь для текущего каталога $G – знак “>”.

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

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

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



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

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

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

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

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

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

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

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

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

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

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


params.bat FIRST second “two words”

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

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

REM пробел текст

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

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

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

Исходные данные: имеется 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
, следующего содержания:

setletter.bat


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

COPY CON myfile.txt

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

При выполнении этой команды будет создан файл myfile.txt, содержащий символ “1”

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

COPY CON > myfile.txt < xyz

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

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

COPY NUL myfile.txt

   

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

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

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

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

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

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

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

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

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

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

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

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