- Оболочка командной строки Windows. Интерпретатор Cmd.exe
- Условное выполнение и группировка команд
- Примеры команд для работы с файловой системой
- Основные возможности командной строки (CMD) Windows
- Основы
- Описание
- Запуск
- Помощь
- Утилита echo и вывод команд
- Режим отображения команд на экране.
- Операторы командной строки
- Математические выражения.
- Комментарии
- Работа с переменными
- Команда set
- Версия Windows и архитектура системы
- Примеры
- Копирование новых файлов из одной папки в другую
Оболочка командной строки Windows. Интерпретатор Cmd.exe
Условное выполнение и группировка команд
В командной строке Windows NT/2000/XP можно использовать специальные символы, которые позволяют вводить несколько команд одновременно и управлять работой команд в зависимости от результатов их выполнения. С помощью таких символов условной обработки можно содержание небольшого пакетного файла записать в одной строке и выполнить полученную составную команду.
Используя символ амперсанда & , можно разделить несколько утилит в одной командной строке, при этом они будут выполняться друг за другом. Например, если набрать команду DIR & PAUSE & COPY / ? и нажать клавишу , то вначале на экран будет выведено содержимое текущего каталога, а после нажатия любой клавиши — встроенная справка команды COPY .
Символ ^ позволяет использовать командные символы как текст, то есть при этом происходит игнорирование значения специальных символов. Например, если ввести в командной строке
и нажать клавишу , то произойдет выполнение подряд двух команд: ECHO Абв и COPY / ? (команда ECHO выводит на экран символы, указанные в командной строке после нее). Если же выполнить команду
то на экран будет выведено
В этом случае просто выполняется одна команда ECHO с соответствующими параметрами.
Условная обработка команд в Windows осуществляется с помощью символов && и || следующим образом. Двойной амперсанд && запускает команду, стоящую за ним в командной строке, только в том случае, если команда, стоящая перед амперсандами была выполнена успешно. Например, если в корневом каталоге диска C: есть файл plan.txt, то выполнение строки TYPE C:\plan.txt && DIR приведет к выводу на экран этого файла и содержимого текущего каталога. Если же файл C:\plan.txt не существует, то команда DIR выполняться не будет.
Два символа || осуществляют в командной строке обратное действие, т.е. запускают команду, стоящую за этими символами, только в том случае, если команда, идущая перед ними, не была успешно выполнена. Таким образом, если в предыдущем примере файл C:\plan.txt будет отсутствовать, то в результате выполнения строки TYPE C:\plan.txt || DIR на экран выведется содержимое текущего каталога.
Отметим, что условная обработка действует только на ближайшую команду, то есть в строке
команда COPY / ? запустится в любом случае, независимо от результата выполнения команды TYPE C:\plan.txt .
Несколько утилит можно сгруппировать в командной строке с помощью скобок. Рассмотрим, например, две строки:
В первой из них символ условной обработки && действует только на команду DIR , во второй — одновременно на две команды: DIR и COPY .
Примеры команд для работы с файловой системой
Рассмотрим некоторые наиболее часто используемые команды для работы с файловой системой. Отметим сначала несколько особенностей определения путей к файлам в Windows.
Пути к объектам файловой системы
Напомним, что файловая система логически имеет древовидную структуру и имена файлов задаются в формате [диск:][путь\]имя_файла , то есть обязательным параметром является только имя файла. При этом, если путь начинается с символа «\» , то маршрут вычисляется от корневого каталога, иначе — от текущего каталога. Например, имя C:123.txt задает файл 123.txt в текущем каталоге на диске C:, имя C:\123.txt — файл 123.txt в корневом каталоге на диске C:, имя ABC\123.txt — файл 123.txt в подкаталоге ABC текущего каталога.
Существуют особые обозначения для текущего каталога и родительского каталогов. Текущий каталог обозначается символом . (точка), его родительский каталог — символами .. (две точки). Например, если текущим каталогом является C:\WINDOWS, то путь к файлу autoexec.bat в корневом каталоге диска C: может быть записан в виде ..\autoexec.bat.
В именах файлов (но не дисков или каталогов) можно применять так называемые групповые символы или шаблоны: ? (вопросительный знак) и * (звездочка). Символ * в имени файла означает произвольное количество любых допустимых символов, символ ? — один произвольный символ или его отсутствие. Скажем, под шаблон text??1.txt подходят, например, имена text121.txt и text911.txt, под шаблон text*.txt — имена text.txt, textab12.txt, а под шаблон text.* — все файлы с именем text и произвольным расширением.
Для того, чтобы использовать длинные имена файлов при работе с командной строкой, их нужно заключать в двойные кавычки. Например, чтобы запустить файл с именем ‘Мое приложение.exe’ из каталога ‘Мои документы’, нужно в командной строке набрать «C:\Мои документы\Мое приложение.exe» и нажать клавишу .
Перейдем теперь непосредственно к командам для работы с файловой системой.
Команда CD
Текущий каталог можно изменить с помощью команды
Путь к требуемому каталогу указывается с учетом приведенных выше замечаний. Например, команда CD \ выполняет переход в корневой каталог текущего диска. Если запустить команду CD без параметров, то на экран будут выведены имена текущего диска и каталога.
Команда COPY
Одной из наиболее часто повторяющихся задач при работе на компьютере является копирование и перемещение файлов из одного места в другое. Для копирования одного или нескольких файлов используется команда COPY .
Синтаксис этой команды:
Краткое описание параметров и ключей команды COPY приведено в табл. 2.1.
Параметр | Описание |
---|---|
источник | Имя копируемого файла или файлов |
/A | Файл является текстовым файлом ASCII, то есть конец файла обозначается символом с кодом ASCII 26 ( + ) |
/B | Файл является двоичным. Этот ключ указывает на то, что интерпретатор команд должен при копировании считывать из источника число байт, заданное размером в каталоге копируемого файла |
результат | Каталог для размещения результата копирования и/или имя создаваемого файла |
/V | Проверка правильности копирования путем сравнения файлов после копирования |
/Y | Отключение режима запроса подтверждения на замену файлов |
/-Y | Включение режима запроса подтверждения на замену файлов |
Приведем примеры использования команды COPY .
- Копирование файла abc.txt из текущего каталога в каталог D:\PROGRAM под тем же именем:
Если не задать в команде целевой файл, то команда COPY создаст копию файла-источника с тем же именем, датой и временем создания, что и исходный файл, и поместит новую копию в текущий каталог на текущем диске. Например, для того, чтобы скопировать все файлы из корневого каталога диска A: в текущий каталог, достаточно выполнить такую краткую команду:
В качестве источника или результата при копировании можно указывать имена не только файлов, но и устройств компьютера. Например, для того, чтобы распечатать файл abc.txt на принтере, можно воспользоваться командой копирования этого файла на устройство PRN : COPY abc.txt PRN
Другой интересный пример: создадим новый текстовый файл и запишем в него информацию, без использования текстового редактора. Для этого достаточно ввести команду COPY CON my.txt , которая будет копировать то, что вы набираете на клавиатуре, в файл my.txt (если этот файл существовал, то он перезапишется, иначе — создастся). Для завершения ввода необходимо ввести символ конца файла, то есть нажать клавиши + .
Команда COPY может также объединять (склеивать) несколько файлов в один. Для этого необходимо указать единственный результирующий файл и несколько исходных. Это достигается путем использования групповых знаков (? и *) или формата файл1 + файл2 + файл3. Например, для объединения файлов 1.txt и 2.txt в файл 3.txt можно задать следующую команду:
Объединение всех файлов с расширением dat из текущего каталога в один файл all.dat может быть произведено так:
Ключ /B здесь используется для предотвращения усечения соединяемых файлов, так как при комбинировании файлов команда COPY по умолчанию считает файлы текстовыми.
Если имя целевого файла совпадает с именем одного из копируемых файлов (кроме первого), то исходное содержимое целевого файла теряется. Если имя целевого файла опущено, то в его качестве используется первый файл из списка. Например, команда COPY 1.txt+2.txt добавит к содержимому файла 1.txt содержимое файла 2.txt. Командой COPY можно воспользоваться и для присвоения какому-либо файлу текущей даты и времени без модификации его содержимого. Для этого нужно ввести команду типа
Здесь запятые указывают на пропуск параметра приемника, что и приводит к требуемому результату.
Команда COPY имеет и свои недостатки. Например, с ее помощью нельзя копировать скрытые и системные файлы, файлы нулевой длины, файлы из подкаталогов. Кроме того, если при копировании группы файлов COPY встретит файл, который в данный момент нельзя скопировать (например, он занят другим приложением), то процесс копирования полностью прервется, и остальные файлы не будут скопированы.
Команда XCOPY
Указанные при описании команды COPY проблемы можно решить с помощью команды XCOPY , которая предоставляет намного больше возможностей при копировании. Необходимо отметить, правда, что XCOPY может работать только с файлами и каталогами, но не с устройствами.
Синтаксис этой команды:
Команда XCOPY имеет множество ключей, мы коснемся лишь некоторых из них. Ключ /D[:[дата]] позволяет копировать только файлы, измененные не ранее указанной даты. Если параметр дата не указан, то копирование будет производиться только если источник новее результата. Например, команда
скопирует в каталог ‘D:\BACKUP\Мои документы’ только те файлы из каталога ‘C:\Мои документы’, которые были изменены со времени последнего подобного копирования или которых вообще не было в ‘D:\BACKUP\Мои документы’.
Ключ /S позволяет копировать все непустые подкаталоги в каталоге-источнике. С помощью же ключа /E можно копировать вообще все подкаталоги, включая и пустые.
Если указан ключ /C , то копирование будет продолжаться даже в случае возникновения ошибок. Это бывает очень полезным при операциях копирования, производимых над группами файлов, например, при резервном копировании данных.
Ключ /I важен для случая, когда копируются несколько файлов, а файл назначения отсутствует. При задании этого ключа команда XCOPY считает, что файл назначения должен быть каталогом. Например, если задать ключ /I в команде копирования всех файлов с расширением txt из текущего каталога в несуществующий еще подкаталог TEXT,
то подкаталог TEXT будет создан без дополнительных запросов.
Ключи /Q , /F и /L отвечают за режим отображения при копировании. При задании ключа /Q имена файлов при копировании не отображаются, ключа /F — отображаются полные пути источника и результата. Ключ /L обозначает, что отображаются только файлы, которые должны быть скопированы (при этом само копирование не производится).
С помощью ключа /H можно копировать скрытые и системные файлы, а с помощью ключа /R — заменять файлы с атрибутом «Только для чтения». Например, для копирования всех файлов из корневого каталога диска C: (включая системные и скрытые) в каталог SYS на диске D:, нужно ввести следующую команду:
Ключ /T позволяет применять XCOPY для копирования только структуры каталогов источника, без дублирования находящихся в этих каталогах файлов, причем пустые каталоги и подкаталоги не включаются. Для того, чтобы все же включить пустые каталоги и подкаталоги, нужно использовать комбинацию ключей /T /E .
Используя XCOPY можно при копировании обновлять только уже существующие файлы (новые файлы при этом не записываются). Для этого применяется ключ /U . Например, если в каталоге C:\2 находились файлы a.txt и b.txt, а в каталоге C:\1 — файлы a.txt, b.txt, c.txt и d.txt, то после выполнения команды
в каталоге C:\2 по-прежнему останутся лишь два файла a.txt и b.txt, содержимое которых будет заменено содержимым соответствующих файлов из каталога C:\1.Если с помощью XCOPY копировался файл с атрибутом «Только для чтения», то по умолчанию у файла-копии этот атрибут снимется. Для того, чтобы копировать не только данные, но и полностью атрибуты файла, необходимо использовать ключ /K .
Ключи /Y и /-Y определяют, нужно ли запрашивать подтверждение перед заменой файлов при копировании. /Y — подавление запроса подтверждения на перезапись существующего целевого файла, /-Y — запрос подтверждения на перезапись существующего целевого файла.
Основные возможности командной строки (CMD) Windows
В этой статье описаны основные возможности командной оболочки Windows. Это полезно знать и использовать для написания скриптов.
Основы
Описание
CMD — это командная оболочка операционных систем Windows. Она работает в двух режимах: интерактивном (используется взаимодействие с пользователем) и пакетном (для написания сценариев и программ).
- содержится во всех ОС Windows по умолчанию, поэтому никакого дополнительного ПО не требуется устанавливать для ее использования
- написан пакетный файл в 90% случаев заработает на любой ОС Windows
- есть системные скрипты используемых операционная система в своей работе и зная основы CMD вы сможете легко их понимать и редактировать под свои нужды
- научившись использовать командную оболочку для написания скриптов вы сможете с таким же успехом использовать ее в интерактивном режиме, для работы и обслуживания ОС Windows
- удобно писать небольшие сценарии и программы для обслуживания операционной системы
- в интернете материалов и примеров использования этой оболочки достаточно для того, чтобы изучить основы работы и тонкости использования этого программного обеспечения
- возможности CMD довольно ограничены и написать серьезный проект будет трудно
Запуск
Для запуска командной оболочки нужно открыть Пуск\Все программы\Стандартные\Командная строка или нажать Пуск и в поиске ввести команду cmd . После запуска откроется окно командной строки.
Помощь
Для помощи существует команда help . Набрав ее вы получите список команд и их краткое описание. Для детального описания команды интересующей вас нужно ввести help , или /?
Утилита echo и вывод команд
Утилита echo выводит сообщение на экран и переключает режим отображения команд на экране. Результатом команды
1echo Hello world
будет вывод на экран
Для вставки пустой строки используется команда
Режим отображения команд на экране.
При включении данного режима на экран выводятся не только результаты команд но и сами команды. При написаны скриптов этот режим используется для их отладки. команда
без параметров показывает статус режима вывода команд на экран (включен или выключен).
По умолчанию режим вывода команд на экран включен. Для того чтобы его выключить введите следующую команду
Для включения режима вывода команд на экран введите
Этот режим можно включать и выключать как для целого скрипта так и его частей, вставляя эти команды в соответствующие места кода.
Для включения этого режима для одной команды перед ней нужно вставить символ @.
Для того, чтобы в скрипте выключить режим отображения команд на экран поместите следующую команду на начало сценария
Операторы командной строки
Результаты выполнения команды можно передать другой команде, или записать в файл. Рассмотрим операторы командной строки.
команда1 | команда2 — результат получен после выполнения команды1 служить входным параметром для команди2, удобно использовать для передачи данных между командами
Операторы перенаправления результатов выполнения > >> :
[путь] имя файла — команда принимает содержимое файла как входной параметр
[путь] имя файла — результат выполнения команды будет записано в файл, если файл не существует он будет создан, если файл существует он будет перезаписан
> [путь] имя файла — результат выполнения команды будет записано в файл, если файл не существует он будет создан, если файл существует результат допишеться в конец файла
[путь] имя файла> [путь] имя файла — данные с первого файла передадутся команде как параметр, а результат выполнения команды будет записан во второй файл
команда1 & команда2 — последовательное выполнение команд, сначала выполнится команда1, а затем команда2
команда1 && команда2 — команда2 исполнится только в случае успешного выполнения команды1
команда1 || команда2 — команда2 исполнится только в случае, если команда1 завершилась с ошибкой
(команда1 & команда2) && команда3 — группировка команд, команда3 исполнится только в случае, если команда1 и команда2 выполнятся успешно
Математические выражения.
+ — добавление
— — вычитание
/ — деления
* — умножение
% — модуль
+= — увеличение и присвоения на соответствующее число
-= — уменьшение и присвоения на соответствующее число
*= — умножение и присвоения на соответствующее число
/= — деление и присвоение на соответствующее число
== — равно
EQL — ровное
NEQ — не равно
LSS — меньше
LEQ — меньше или равно
GTR — более
GEQ — больше, или равно
Побитовые операторы (работа с двоичными данными).
Комментарии
Для того чтобы оставить комментарий в коде сценария используется команда rem
Работа с переменными
Описание работы с переменными в командной строке.
Команда set
За работу со сменными отвечает команда set .
Для просмотра всех созданных переменных нужно ввести команду set без параметров.
Для просмотра значения конкретной переменной нужно ввести команду
Для просмотра всех переменных которые начинаются test (например переменные test1, test2 и т.д.) нужно ввести команду
Версия Windows и архитектура системы
ver — команда выводит версию операционной системы.
Версія ОСОС 1.04Windows 1.02.11Windows 2.03Windows 3.04.0.950Windows 954.00.1111Windows 95 OSR24.00.1381Windows NT 4.04.10.1998Windows 984.10.2222Windows 98 SE4.90.3000Windows ME5.00.2195Windows 20005.1.2600Windows XP5.2.3790Windows XP Professional x64 EditionWindows Home ServerWindows Server 2003 5.2.3790.1180Windows Server 2003, Service Pack 15.2.3790.12186.0.6000.16386 Windows Vista, RTM (Release to Manufacturing)6.0.6000Windows VistaWindows Server 20086.0.6001Windows Vista SP1Windows Server 2008 SP16.0.6002Windows Vista SP2Windows Server 2008 SP26.1.7600.16385Windows 7, RTM (Release to Manufacturing)Windows Server 2008 R2, RTM (Release to Manufacturing)6.1.7600Windows 7Windows Server 2008 R26.1.7601Windows 7 SP1Windows Server 2008 R2 SP16.2.9200.16384Windows 8, RTM (Release to Manufacturing)6.2.9200Windows 8Windows Server 20126.3.9600Windows 8.1Windows Server 2012 R2
Для определения архитектуры компьютера существует переменная PROCESSOR_ARCHITECTURE , для ее вывода введите команду
x86 — 32-битная версия Windows
AMD64 — 64-битная версия Windows
Примеры
Копирование новых файлов из одной папки в другую
Задача следующая. Есть локальная папка в которую Медок делает резервные копии баз данных раз в определенный период (через планировщик Медка настроено в пн-пт в обед 13:10), из этой папки нужно копировать новые файлы в сетевую папку на случай выхода из строя локального компьютера » колонки для компьютера. Основное условие, это копирование только новых файлов, которые появились в локальной папке с бэкапа.
Для этой задачи есть команда replace которую нужно использовать с ключом /A .
Вот пример скрипта который копирует новые файлы из локальной папки в сетевую
123456789101112131415161718192021222324252627@echo offrem Путь к локальной папкеset localbackupdir=pathtolocaldirrem Путь к сетевой папкеset remotebackupdir=pathtoremotedir�ь к робочей папкеset workdir=pathtoworkdirrem Путь к папке с логамиset logdir=pathtologdirrem Название лога который содержит дату созданияset logname=log-%date:
3,2%.txt rem Запуск проверокrem Проверка существует ли папка с локальними бекапамиif exist «%localbackupdir%» (echo verification 1 is complited > «%logdir%\%logname%») else (mkdir «%localbackupdir%»)rem Проверка существует ли папка для логовif exist «%logdir%» (echo verification 2 is complited >> «%logdir%\%logname%») else (mkdir «%logdir%»)rem Проверка существует ли сетевая папкаif exist «%remotebackupdir%» (echo verification 3 is complited >> «%logdir%\%logname%») else (echo error 10: remote backup directory «%remotebackupdir%» is not exist >> «%logdir%\%logname%» & exit 10) rem Запуск копированияcd /d «%workdir%» || (echo error 11: problem is workdir «%workdir%» >> «%logdir%\%logname%» & exit 11)replace «%localbackupdir%\*» «%remotebackupdir%» /A >> «%logdir%\%logname%»if errorlevel 1 (echo error 13: replays is over whith error %errorlevel% >> «%logdir%\%logname%» & exit 13) echo replays is complited >> «%logdir%\%logname%»exit 0