Символ в командной строке windows

Rob van der Woude's Scripting Pages

All DOS versions interpret certain characters before executing a command.
Some well know examples are the percent sign ( % ), and the redirection symbols ( < | > ).

Windows 95/98 and NT, and OS/2 too, also interpret double quotes ( " ) and ampersands ( & ), as shown in the Conditional Execution page.

In batch files, the percent sign may be «escaped» by using a double percent sign ( %% ).
That way, a single percent sign will be used as literal within the command line, instead of being further interpreted.

In Windows 95/98 and NT, and OS/2 too, redirection symbols may be escaped by placing them between double quotes ( ">" ).
However, the quotes themselves will be passed to the command too, unlike the double percent sign.

Windows NT and OS/2 also allow the use of carets ( ^ ) to escape special characters.
Even linefeeds can be escaped this way, as is shown in the Useless Tips page.

If you intend to «nest» commands with escaped characters, you may need to escape the escape character itself too.
In general, that won’t make it any easier to read or debug your batch files, however.

Since the introduction of delayed variable expansion a new challenge is to escape exclamation marks, the «delayed» version of the percent sign.
Unlike percent signs, that can be escaped by doubling them, exclamation marks cannot be escaped by adding an extra exclamation mark.
Nor does a caret before the exclamation mark work, unless quoted (i.e. ECHO ^! will fail to display an exclamation mark, whereas ECHO "^!" will display a quoted exclamation mark: "!").
Jaime Ramos sent me this link where the solution can be found: use ^^!.
The trick is that a single caret will be used to escape the exclamation mark in the first «pass» of command line interpretation, but delayed variable expansion adds a second «pass» where the exclamation mark will be interpreted.
If you don’t get it, never mind, just remember the double caret before the exclamation mark.

Using FIND to search files or standard output for a string containing doublequotes used to be a pain… I often used FINDSTR instead, in these cases.
Robert Cruz explained to me that in this particular case only you need to escape doublequotes by doublequotes, i.e. a single doublequote must be replaced by 2 doublequotes.
He also sent me this link on the subject.

Summary

Escape Characters
Character to be escaped Escape Sequence Remark
% %%  
^ ^^ May not always be required in doublequoted strings, but it won’t hurt
& ^&
< ^<
> ^>
| ^|
' ^' Required only in the FOR /F «subject» (i.e. between the parenthesis), unless backq is used
` ^` Required only in the FOR /F «subject» (i.e. between the parenthesis), if backq is used
, ^, Required only in the FOR /F «subject» (i.e. between the parenthesis), even in doublequoted strings
; ^;
= ^=
( ^(
) ^)
! ^^! Required only when delayed variable expansion is active
" "" Required only inside the search pattern of FIND
\ \\ Required only inside the regex pattern of FINDSTR
[ \[
] \]
" \"
. \.
* \*
? \?

Unexpected behaviour of CALLs:

Try this demo batch file, it shows some results you may not have expected.
Always test when escaped strings have to be passed on to CALLed commands.

@ECHO OFF
IF "%~1"=="" (
	CLS
	ECHO Demo script showing how CALL adds its own caret escape characters to arguments
	ECHO.
	ECHO Note the loss of the percent sign even when doublequoted
	ECHO Command         : ECHO "%%A^("
	ECHO Expected output : "%%A^("
	ECHO Actual output   : "%A^("
	ECHO.
	ECHO Command         : ECHO %%A^^(
	ECHO Expected output : A^(
	ECHO Actual output   : %A^(
	ECHO.
	ECHO Command: CALL :Subroutine "%%A^("
	CALL :Subroutine "%A^("
	ECHO Command: CALL "%%~f0" "%%A^("
	CALL "%~f0" "%A^("
	ECHO.
) ELSE (
	ECHO.
	ECHO Start of rerun, note the automatically added escape characters and loss of percent signs
	ECHO Command         : ECHO "%%~1"
	ECHO Expected output : "%%A^("
	ECHO Actual output   : "%~1"
	ECHO.
	ECHO Command: ECHO.%%~1
	ECHO Expected output : A(
	ECHO Actual output   : %~1
	ECHO End of rerun
	ECHO.
)
GOTO:EOF

:Subroutine
ECHO.
ECHO Start of Subroutine, note the automatically added escape characters and loss of percent signs
ECHO Command         : ECHO "%%~1"
ECHO Expected output : "%%A^("
ECHO Actual   output : "%~1"
ECHO.
ECHO Command         : ECHO.%%~1
ECHO Expected output : A(
ECHO Actual   output : %~1
ECHO End of Subroutine
ECHO.
GOTO:EOF

The script above will generate the output shown below:

Demo script showing how CALL adds its own caret escape characters to arguments

Note the loss of the percent sign even when doublequoted
Command         : ECHO "%A^("
Expected output : "%A^("
Actual output   : "A^("

Command         : ECHO %A^(
Expected output : A(
Actual output   : A(

Command: CALL :Subroutine "%A^("

Start of Subroutine, note the automatically added escape characters and loss of percent signs
Command         : ECHO "%~1"
Expected output : "%A^("
Actual   output : "A^^("

Command         : ECHO.%~1
Expected output : A(
Actual   output : A^(
End of Subroutine

Command: CALL "%~f0" "%A^("

Start of rerun, note the automatically added escape characters and loss of percent signs
Command         : ECHO "%~1"
Expected output : "%A^("
Actual output   : "A^^("

Command: ECHO.%~1
Expected output : A(
Actual output   : A^(
End of rerun

page last modified: 2019-11-19

Условное выполнение и группировка команд

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

Используя символ амперсанда &, можно разделить несколько утилит в одной командной строке, при этом они будут выполняться друг за другом. Например, если набрать команду DIR & PAUSE & COPY /? и нажать клавишу <Enter>, то вначале на экран будет выведено содержимое текущего каталога, а после нажатия любой клавиши — встроенная справка команды COPY.

Символ ^ позволяет использовать командные символы как текст, то есть при этом происходит игнорирование значения специальных символов. Например, если ввести в командной строке

и нажать клавишу <Enter>, то произойдет выполнение подряд двух команд: 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 на экран выведется содержимое текущего каталога.

Отметим, что условная обработка действует только на ближайшую команду, то есть в строке

TYPE C:\plan.txt && DIR & COPY /?

команда COPY /? запустится в любом случае, независимо от результата выполнения команды TYPE C:\plan.txt.

Несколько утилит можно сгруппировать в командной строке с помощью скобок. Рассмотрим, например, две строки:

TYPE C:\plan.txt && DIR & COPY /?
TYPE C:\plan.txt && (DIR & COPY /?)

В первой из них символ условной обработки && действует только на команду 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» и нажать клавишу <Enter>.

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

Команда CD

Текущий каталог можно изменить с помощью команды

Путь к требуемому каталогу указывается с учетом приведенных выше замечаний. Например, команда CD \ выполняет переход в корневой каталог текущего диска. Если запустить команду CD без параметров, то на экран будут выведены имена текущего диска и каталога.

Команда COPY

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

Синтаксис этой команды:

COPY [/A|/B] источник [/A|/B]  [+ источник [/A|/B] [+ ...]] 
  [результат [/A|/B]] [/V][/Y|/–Y]

Краткое описание параметров и ключей команды COPY приведено в табл. 2.1.

Таблица
2.1.
Параметры и ключи команды COPY

Параметр Описание
источник Имя копируемого файла или файлов
/A Файл является текстовым файлом ASCII, то есть конец файла обозначается символом с кодом ASCII 26 (<Ctrl>+<Z>)
/B Файл является двоичным. Этот ключ указывает на то, что интерпретатор команд должен при копировании считывать из источника число байт, заданное размером в каталоге копируемого файла
результат Каталог для размещения результата копирования и/или имя создаваемого файла
/V Проверка правильности копирования путем сравнения файлов после копирования
/Y Отключение режима запроса подтверждения на замену файлов
/-Y Включение режима запроса подтверждения на замену файлов

Приведем примеры использования команды COPY.

  1. Копирование файла abc.txt из текущего каталога в каталог D:\PROGRAM под тем же именем:
  2. Копирование файла abc.txt из текущего каталога в каталог D:\PROGRAM под новым именем def.txt:
    COPY abc.txt D:\PROGRAM\def.txt
  3. Копирование всех файлов с расширением txt с диска A: в каталог ‘Мои документы’ на диске C:
    COPY A:\*.txt "C:\Мои документы"

Если не задать в команде целевой файл, то команда COPY создаст копию файла-источника с тем же именем, датой и временем создания, что и исходный файл, и поместит новую копию в текущий каталог на текущем диске. Например, для того, чтобы скопировать все файлы из корневого каталога диска A: в текущий каталог, достаточно выполнить такую краткую команду:

В качестве источника или результата при копировании можно указывать имена не только файлов, но и устройств компьютера. Например, для того, чтобы распечатать файл abc.txt на принтере, можно воспользоваться командой копирования этого файла на устройство PRN: COPY abc.txt PRN

Другой интересный пример: создадим новый текстовый файл и запишем в него информацию, без использования текстового редактора. Для этого достаточно ввести команду COPY CON my.txt, которая будет копировать то, что вы набираете на клавиатуре, в файл my.txt (если этот файл существовал, то он перезапишется, иначе — создастся). Для завершения ввода необходимо ввести символ конца файла, то есть нажать клавиши <Ctrl>+<Z>.

Команда 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 источник [результат] [ключи]

Команда XCOPY имеет множество ключей, мы коснемся лишь некоторых из них. Ключ /D[:[дата]] позволяет копировать только файлы, измененные не ранее указанной даты. Если параметр дата не указан, то копирование будет производиться только если источник новее результата. Например, команда

XCOPY "C:\Мои документы\*.*" "D:\BACKUP\Мои документы" /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 — запрос подтверждения на перезапись существующего целевого файла.

Время на прочтение
3 мин

Количество просмотров 326K

Недавно я вырос из лютого эникея в очень большой компании, до скромного сисадмина надзирающего за сетью в 10 ПК. И, как очень ленивый сисадмин, столкнулся с задачами по автоматизации своей деятельности. Полгода назад я еще не знал, что в командной строке Windows есть конвейеры. Это стало первым шокирующим открытием. И я пошел дальше, и выяснилось, что там, где я раньше писал утилитки на C#, Delphi или громоздкие скрипты с вложенными циклами, можно было обойтись парой команд forfiles или robocopy.
Не буду рассказывать о банальностях, типа о перечислении файлов и папок клавишей Tab. Под хабракатом расскажу о том, что может быть полезно начинающим админам и эникеям.

Горячие клавиши

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

F1 — В консоли эта клавиша работает в точности как и стрелка вправо, т.е. выводит по одному символу из последней введенной (либо выбранной в истории) команды.
F2 + <символ> — Выводит последнюю введенную команду до указанного символа. Например, если последняя введенная вами команда выглядела вот так:

ping 192.168.25.1

то после нажатия комбинации клавиш F2 + 5 вы получите:

ping 192.168.2

F3 — Выводит последнюю, и только последнюю, в истории команду целиком.
F5 — Выводит последние введенные команды по порядку, также как и стрелка вверх.
F6 — Вставляет символ EOF на текущую позицию командной строки, что аналогично нажатию комбинации Ctrl + Z.
F7 — Диалоговое окно, содержащее историю команд.
image
Alt + F7 — Очищает историю команд.
<символ(ы)> + F8 — Перебирает команды, которые начинаются с символов уже введенных в командную строку.
Если перед нажатием F8 ничего не вводить, то эта клавиша будет работать как и стрелка вверх, но с небольшим отличием — перебор строк будет осуществляться циклично, т.е. после первой команды из списка будет выведена последняя.
F9 + <число> — Вставляет команду из истории под соответствующим номером. К примеру, в ситуации приведенной на скрине выше при нажатии комбинации F9 + 4 в консоли появится:

ipconfig
Операторы командной строки

Я, давным-давно, когда был маленький, даже не представлял как можно работать в консоли без графического интерфейса. Ведь вывод команд порой занимает десятки страниц, а если надо выбрать оттуда какие-то данные, то и постраничный вывод не спасет. Но однажды я поставил на старый комп FreeBSD, открыл хандбук и просто голова кругом пошла от открывшихся возможностей. Там можно перенаправить вывод команды на вход другой команды и это называется конвейером.

Оператором конвейера в *nix и cmd, является символ вертикальной черты.

|

Например, вывод всех текстовых файлов в текущей папке покажет команда

dir | find ".txt"
Оператор объединения команд

&

Пример: Команда1 & Команда2 – сначала выполнятся Команда1, а уже потом Команда2

Оператор И

&&

Пример: Команда1 && Команда2 — Команда2 будет выполняться только в том случае, если произошло успешное выполнение Команды1

Оператор ИЛИ

||

Пример: Команда1 || Команда2 — Команда2 будет выполняться только в том случае, если Команда1 не смогла выполниться.

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

  • (Команда1 & Команда2) && Команда3 – Если Команды1 и Команды2, выполнятся успешно, произойдет выполнение Команды3.
  • (Команда1 & Команда2) || Команда3 — Если Команды1 и Команды2, не выполнятся, произойдет выполнение Команды3.

Спасибо за внимание! Жду критики и предложений…

UPD1

Для тех, кто не в теме, циркумфлекс(вот этот знак «^») означает нажатие клавиши с Ctrl(^C = Ctrl +C).

^C — Прерывает команду, ну это все знают.
^S — Приостанавливает выполнение команды, а потом запускает.
^I — Аналог Tab, перебирает папки и файлы.
^M — Аналог Enter.
^H — Аналог Backspace.
^G — Написав в пакетном файле команду echo ^G можно пикать системным динамиком(спикером).
(Команды ^I и ^H, получены мной методом «научного тыка», еще есть ^J но не знаю, что она делает)

P.S. Другие тонкости командной строки Windows, уже неоднократно освещались на Хабре. И не вижу смысла копи-пастить.
P.P.S. Ссылки на интересные посты и статьи по другим возможностям командной строки Windows:
Ввод-вывод, циклы, переменные
Работа с массивами
Интереснейший топик по теме

assoc Вывод или изменение ассоциаций с файловыми расширениями attrib Вывод или изменение атрибутов файла или каталога break Установка или отмена расширенной проверки CTRL+C для совместимости с DOS программами bootcfg Настройка параметров boot.ini для управления загрузчиком cacls Вывод или изменение параметров доступа к файлам — ACLs (Access Control Lists) call Вызов одного пакетного файла из другого cd (chdir) Отображение имени или смена текущего каталога chcp Вывод или изменения кодовой страницы chkdsk Проверка диска и вывод информации о его состоянии chkntfs Вывод или изменение проверки NTFS диска при загрузке cls Очистка экрана color Установка цвета текста и фона консоли compact Вывод или изменение сжатия файлов наNTFS диске comp (fc) Сравнение содержимого двух файлов или комплектов файлов convert Конвертация FAT разделовв NTFS, текущий диск конвертировать нельзя copy Копирование файлов в другой каталог date Изменение или отображение текущей даты del (erase) Удаление файлов diskcomp Сравнение содержимого двух дискет diskcopy Копирование содержимого с одной дискеты на другую diskpart Отображение, изменение, создание различных дисковых разделов dir Отображает список подкаталогов и файлов в каталоге doskey Расширение возможностей командной строки driverquery Вывод свойств драйверов и состояния устройств echo Вывод сообщений или установка режима отображения сообщений endlocal Конец изменения настроек локализации окружения в пакетном файле командой setlocal eventquery Вывод содержимого журнала событий по определённым критериям exit Выход из программы cmd.exe (командного процессора) find (findstr) Поиск текстовой строки в одном или нескольких файлах for Выполнение определенной команды для каждого файла в наборе файлов. forcedos Безопасный запуск DOS — приложений format Форматирование диска fsutil Вывод и изменение настроек файловой системы ftype Вывод и изменение ассоциаций с расширениями файлов goto Направляет интерпретатор к помеченной строке пакетного файла. Метка записывается первым элементом строки после : gpresult Вывод информации групповой политики для машины или пользователя graftabl Загрузка в память таблицы дополнительного набора символов для вывода на экран через цветной графический адаптер if Постановка условия выполнения команды в пакетных файлах label Вывод и изменение метки тома дисков md (mkdir) Создание каталога mode Настройка системных устройств more Вывод информации поэкранно net accounts Управление пользователями, паролями и способом входа в систему net computer Добавление компьютера к домену Windows NT Server net config Вывод информации о настройке служб Workstation и Server net continue Восстановление работы службы после применения команды net pause net localgroup Управление локальными группами компьютера net name Вывод и установка имени компьютера для службы Messenger net file Имена открытых совместно используемыз файлов на сервере net group Управление глобальными группами на Windows NT Server net helpmsg Справка о сообщении о сетевой ошибке net pause Приостановка службы или ресурса net print Вывод списка компьютеров сети и их ресурсов net send Отправка сообщения через службу Messenger net session Вывод списка соединений с другими компьютерами net share Назначение совместно используемых ресурсов net statistics Вывод журнала статистики net stop Остановка службы net time Синхронизация системного времени между компьютерами net view Вывод имён серверов или совместно используемых ресурсов сервера net user Управление учётными записями пользователей домена openfiles (net file) Вывод имён совместно используемых файлов, открытых удалёнными пользователями pagefileconfig Вывод и изменение настроек файла подкачки path Вывод или установка путей поиска исполнимых файлов pause Приостанавливает исполнение командного файла в процессе обработки и выводит сообщение print Печать текста popd Возврат к каталогу , сохранённому командой pushd prompt Изменение приглашения командной строки pushd Сохранение текущего каталога для его изменения, возврат- командой popd recover Восстановление восстановимой информации с повреждённого диска ren (rename) Переименование файлов или каталогов rem Игнорируемый коментарий в пакетном файле или в файле config.sys replace Замена одних файлов другими rd (rmdir) Удаление каталогов set Вывод, изменение и удаление переменных окружения setlocal Начало изменения настроек локализации окружения в пакетном файле sc Отображение и настройка служб schtasks Управление планировщиком задач shift Сдвиг параметров запуска в пакетном файле shutdown Локальное или удалённое завершение работы машины sort Сортирует входной поток данных start (cmd) Открывает отдельное окно командной строки subst Ассоциирует путь с буквой диска systeminfo Вывод специфических свойств и настроек компьютера tasklist Вывод всех работающих процессов включая службы taskkill Отключение или остановка работающего процесса или приложения time Изменение или вывод текущего системного времени title Установка заголовка для окна cmd.exe tree Наглядно отображает структуру директории или диска. type Вывод содержимого текстового файла ver Вывод версии Windows verify Проверка правильности записи файлов на диск vol Выводит метку тома и серийный номер диска wmic Вывод и изменение WMI информации xcopy Копирование файлов и дерева каталогов

В одной из своих статей я уже рекомендовал отказаться от пакетных файлов (сценарии оболочки Cmd.exe) и сосредоточиться на изучении PowerShell. Конечно, освоение новых технологий невозможно без усилий, и Windows PowerShell — не исключение.

Если вы согласны со мной, то придется отказаться от некоторых навыков в подготовке пакетных файлов и освоить новые, чтобы перейти к PowerShell. В Cmd.exe используются специальные символы, у многих из которых нет эквивалентов в PowerShell (или они означают что-то иное). В данной статье описаны специальные символы, используемые в Cmd.exe, и их отличия в применении по сравнению с PowerShell.

Символ @

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

Отображение команд полезно при отладке пакетного файла, но большинство авторов пакетных файлов вставляют команду @Echo Off в начале каждого пакетного файла, чтобы не выводить команды на экран (символ @ в начале команды предотвращает отображение самой команды, отключающей вывод на экран). В отличие от Cmd.exe, в PowerShell нет отображения команд, поэтому команда @Echo Off не нужна.

В PowerShell символ @ используется для создания массивов или хэш-таблиц. Cmd.exe не поддерживает массивы и хэш-таблицы, но вы можете прочитать об этих структурах в разделах справки about_Arrays и about_Hash_Tables для PowerShell.

Символ %

У символа % есть несколько особых значений в оболочке Cmd.exe: он задает переменные среды и два вида замены параметров. Рассмотрим их.

Переменные среды. В Cmd.exe символы % окружают имя переменной среды, и интерпретатор развертывает переменную до ее значения. Например, %SystemRoot% расширяется до C:\Windows. В PowerShell такой синтаксис не используется; нужно ввести $Env:SystemRoot (то есть $Env: с последующим именем переменной среды).

Замена параметра команды For. Синтаксис команды For довольно сложен; он обеспечивает последовательную обработку набора элементов (например, строк, файлов, каталогов и т.д.) и выполнение команды для каждого результирующего элемента. Символ %, за которым следует единственная буква от a до z, представляет собой параметр, который Cmd.exe заменяет текущим элементом. Например, в Cmd.exe команда

for %p in (A B) do echo %p

выполняет команду Echo дважды: один раз для буквы A и второй раз для буквы B. Обратите внимание, что необходимо удвоить символ B %, если вы используете команду For в пакетном файле, а не вводите ее в ответ на приглашение Cmd.exe.

Однако в PowerShell предусмотрено несколько способов последовательной обработки наборов элементов. Команда ForEach-Object — ближайший аналог команды For из Cmd.exe. Показанная выше строка в PowerShell примет следующий вид:

«A",»B«| foreach-object { $_ }

$_ — эквивалент %p в команде For из Cmd.exe приведенного выше примера. Это специальная переменная, означающая»текущий объект из конвейера«, который в данном примере заменяется каждым строковым объектом (»A«, затем»B«). Кавычки необходимы на левой стороне вертикальной черты (|), потому что иначе PowerShell не распознает, что имеет дело со строковыми объектами.

В PowerShell символ % используется как псевдоним (подставное имя команды) для команды ForEach-Object, поэтому указанную выше команду PowerShell можно записать следующим образом:

»A«,"B» | % { $_ }

Псевдоним % понятен программистам Perl, но сбивает с толку тех, что привык к другому использованию % в пакетных файлах. Во избежание путаницы рекомендуется вводить имя команды (ForEach-Object).

Подставляемые параметры. В пакетном файле символ %, за которым следует одна цифра от 0 до 9, заменяется на соответствующий параметр командной строки: %0 — имя пакетного файла, %1 — первый параметр в командной строке пакетного файла, %2 — второй параметр и т.д. На экране 1 показан пример пакетного файла, в котором используется подставляемый параметр.

Пример использования параметра подстановки
Экран 1. Пример использования параметра подстановки

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

Символ!

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

Эту особенность иллюстрирует экран 2. Можно было бы ожидать, что в выводе будут присутствовать символы A и B, но их нет. Это объясняется тем, что Cmd.exe развертывает ссылку на переменную среды TEST в пустую строку перед выполнением команды For.

Развертывание переменных среды
Экран 2. Развертывание переменных среды

Чтобы обойти эту особенность, необходимо включить задержку развертывания переменных среды окружения во время исполнения команды. Для этого добавьте ключевое слово Enabledelayedexpansion к команде Setlocal и замените символы %, окружающие имя переменной среды, символами! . На экране 3 показан обновленный пакетный файл и результаты.

Задержка развертывания переменных среды окружения во время исполнения
Экран 3. Задержка развертывания переменных среды окружения во время исполнения

В PowerShell таких странностей нет, поэтому связывание времени выполнения для переменных среды окружения не требуется. Вместо этого символ! в PowerShell используется как оператор «not» (идентично -not). Дополнительные сведения можно найти в разделе справки about_Logical_Operators для PowerShell.

Символы ( и )

В Cmd.exe используются скобки, ( и ), для вложенных последовательностей из многих команд и инструкции Else для команды If. Аналог в PowerShell — фигурные скобки, { и }. Фигурные скобки в PowerShell представляют фрагмент программного кода, именуемый блоком сценария Scriptblock.

Символ |

Вертикальная черта (|) указывает команде с правой стороны на необходимость принять вывод из команды слева от черты. Например, команда

type file.txt | sort

указывает команде Sort на необходимость принять в качестве входных данных вывод команды Type. Этот процесс называется конвейерной обработкой. Выводимые данные в Cmd.exe всегда представляют собой текст.

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

Символы < и >

Символ < указывает Cmd.exe на необходимость прочитать ввод из файла, а > перенаправляет вывод Cmd.exe в файл. Если встречается удвоенный символ >, то Cmd.exe присоединяет вывод к существующему файлу, а не заменяет существующий файл. PowerShell обеспечивает перенаправление вывода (>, >> и т.д.) с использованием такого же синтаксиса, как Cmd.exe. На момент подготовки данной статьи PowerShell не поддерживал перенаправление ввода, но это не ограничивает возможности PowerShell, так как перенаправление ввода можно заменить на конвейерный вывод. Например, команду

sort < file.txt

можно заменить на

type file.txt | sort

Символ ^

Символ ^ (каре) в Cmd.exe служит одновременно символом экранирования специальных символов (escape-символ) и символом продолжения строки. На экране 4 показан пример его применения. Первый символ ^ в пакетном файле не позволяет Cmd.exe интерпретировать > как перенаправление вывода, а второй символ ^ указывает Cmd.exe, что четвертую строку пакетного файла следует интерпретировать как окончание третьей строки.

Два варианта использования символа ^
Экран 4. Два варианта использования символа ^

В PowerShell обратный апостроф (`) используется для избавления от специальных символов и продолжения строки вместо символа ^. Символ ^ не имеет специального значения в PowerShell.

Символ &

Символ & (амперсанд) используется в Cmd.exe в качестве разделителя команд, чтобы разместить несколько команд на одной строке. В PowerShell для этого используется символ; (точка с запятой).

Символ («)

Кавычки (») инкапсулируют параметры в Cmd.exe, то есть синтаксический анализатор командной строки извещается о том, что текст между кавычками является одним параметром, а не несколькими. Например, команда

dir C:\Program Files

Выполняет команду Dir с двумя параметрами: C:\Program и Files. Чтобы явно указать Cmd.exe, что мы намерены использовать один параметр, необходимо поместить путь в кавычки, то есть:

dir «C:\Program Files»

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

Кавычки действуют таким же образом для параметров PowerShell, хотя в PowerShell имеются свои правила для кавычек. Например, в PowerShell предусмотрены кавычки двух типов: двойные («) и одиночные (‘). Одно из различий между двумя типами кавычек заключается в том, что PowerShell развертывает ссылки на переменные в строках с двойными, а не с одиночными кавычками. Подробную информацию об использовании кавычек в PowerShell можно найти в разделе справки about_Quoting_Rules.

Вносим ясность в применение символов

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

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

  • Сеть домена в windows 10 что это
  • Символ apple в тексте windows
  • Си шарп скачать для windows 10
  • Симантек антивирус для windows 7 скачать бесплатно
  • Сз 2102 драйвер windows 11