Файл ввода определялся дважды cmd что это

Обновлено: 03.07.2024

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

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

Вот мой пример содержимого файла bat:

и вот что появляется в jstack.txt:

"Завершить пакетное задание (Да / Нет)?" обычно появляется, когда вы нажимаете Ctrl-C во время работы вашего .bat. Jstack.txt будет содержать выходные данные jstack и ничего, касающееся вашего пакетного файла, а также вы не сказали, что такое Jstack. Если вы хотите , фиксированные параметры для входа вы лучше использовать , choice чем set /p Пожалуйста, пометьте мой пост как ответ, суть которого заключается в том, что при запуске пакетной программы вы нажимаете Enter, а не вводите идентификатор в приглашении, и поэтому для% id% было задано значение, Enter ID: а не какой-то идентификатор, который вы должны были предоставить клавиатура.

Попробуй это:

Затем вы можете использовать %id% в качестве параметра для другого командного файла, как jstack %id% .

Например:

Есть ли способ передать вывод команды SET в NIL:, чтобы вы могли скрыть ввод? Например, если вы хотите сделать: set /p ID:\r\n set /p pw=Enter Passwd: и не хотите, чтобы текст пароля отображался в окне, не говоря уже о том, чтобы отображаться в буфере команд «DosKey»? Я пробовал несколько разных способов, и не смог найти способ сделать это, кроме написания маленькой C-программы, которая бы взяла ввод и присвоила его EnvVar, но это обман! :) Я хочу, чтобы он работал только с CMD Windows. Обратите внимание на добавленную тонкость пространства в конце "Enter ID: " . Дает небольшой промежуток между подсказкой и ответом пользователя. Delete the internet?No silly против Delete the internet? No silly . Нет необходимости в цитатах. Чего не хватало @Instantsoup, так это «% id%» в строке jstack %id% > jstack.txt

Синтаксис таков: set /p variable=[string]

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

обратите внимание на %VariableName% синтаксис

Пожалуйста, закончите предложение . Вы собираетесь включить другую ссылку? Кроме того, я протестировал все вышеперечисленное в cmd.exe оболочке Windows 7 , и каждый - без исключения - назначает пользовательский ввод для переменной с произвольным именем. Как ваш ответ украшает то, что уже было предоставлено? Зачем нам пространство? Что именно происходит в том, cmd что не позволяет места?

Я не уверен, так ли это для всех версий Windows, однако на машине с XP у меня должно быть следующее:

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

+1 за «различные результаты в зависимости от текста»: у меня была та же проблема. Теперь он печатает цитаты с текстом, но странного поведения больше нет. используйте этот синтаксис, чтобы получить кавычки, но не показывайте их: set /p "var1=Prompt String" Полезно использовать кавычки и включать пробел в конце, поскольку это делает запрос в командной строке приятнее. Наличие кавычек делает очевидным, что в командном файле есть место. set /p Var1="Prompt String " Затем, когда вы запускаете файл и пользователь вводит что-то, что вы получаете Prompt String Yes вместо Prompt StringYes

Пространство после = очень важно.

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

:start это просто маркер . Например, он может также использовать a :end , который вызывает такие вещи, как очистка переменной, или вызов popd , или что-то в этом роде. Кроме того, у вас также есть возможность использовать IF ERRORLEVEL1 GOTO END . или даже a GOTO ERR , и в нем :err есть что-то вроде эха. Произошла ошибка при попытке получить номер файла. goto: end Это, вероятно, вопрос привычки .

Для SETX нет задокументированного параметра / параметра приглашения, как для SET.

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

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

Это работает для меня в Windows 8.1 Pro:

(Кавычки вокруг существующей переменной необходимы.)

Эта процедура позволяет вам использовать временную переменную, созданную SET, во время текущего сеанса и позволит вам повторно использовать переменную, созданную SETX, после перезагрузки компьютера или перезапуска приглашения CMD.

(Отредактировано для правильного форматирования абзацев кода.)

У меня есть маленький cmd, который я использую при подготовке компьютера к клиентам: он вызывает пользователя для ввода и переименовывает компьютер в него.

Привет еще раз! Этот полезный скрипт используется на ПК с Win10 после начальной настройки :-)

Есть две возможности.

Вы забыли поставить %id% в jstack вызове.

Таким образом, весь правильный пакетный файл должен быть:

И / или 2. Вы поместили его в код (и забыли сообщить нам вопрос), но когда вы запустили пакетный файл, вы нажали клавишу Enter вместо ввода идентификатора (скажем, 1234).

То, что происходит, является результатом этих двух ошибок: jstack предполагается, что он вызывается с идентификатором, который вы ему предоставили.

Но в вашем случае (в соответствии с кодом, который вы указали в вопросе) вы назвали его без какой-либо переменной. Вы написали:

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

Ваша вторая ошибка состоит в том, что вы нажали Enter вместо того значения , когда программа спрашивает вас: Enter ID: . Если бы вы в этот момент ввели идентификатор, скажем, 1234, %id% переменная стала бы этим значением, в нашем случае 1234. Но вы НЕ указали значение и вместо этого нажали Enter. Когда вы не даете переменной никакого значения, и если для этой переменной ранее не было установлено ничего, тогда переменная %id% устанавливается на приглашение set команды !! Так что теперь %id% установлено значение, Enter ID: которое было отображено на вашем экране в соответствии с запросом в командном файле ДО того, как вы вызвали jstack.

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

Запуск командной строки.

Для запуска командной строки можно воспользоваться одним из следующих способов:

Пуск - Выполнить (или клавиши Win+R) введите cmd и нажмите клавишу Enter;

Пуск - Все программы - Стандартные - Командная строка»;

Пуск - Поиск - Командная строка. Также, для запуска командной строки можно использовать заранее подготовленный ярлык, ссылающийся на исполняемый файл %SystemRoot%\system32\cmd.exe ( обычно – C:\Windows\system32\cmd.exe). Выполнение некоторых команд требует повышенных привилегий, поэтому, приложение командной строки должно быть запущено с использованием пункта контекстного меню ”Запуск от имени администратора”, вызываемого правой кнопкой мышки.

Настройка командной строки.

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

Работа в командной строке предполагает ввод данных с клавиатуры, при чем, иногда довольно большого объема. Этот объем можно значительно сократить, используя некоторые приемы:

Использование буфера обмена.

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

Настройки командной строки в Windows 10

В режиме выделения мышью, контекстное меню не используется, а текст выделяется с использованием левой кнопки мышки. Копирование и вставка выполняется при нажатии правой кнопки мышки. При включенном режиме ”Разрешить сочетания клавиш с CONTROL”, можно использовать стандартные сочетания клавиш:

- CTRL+C (CTRL+Insert) – скопировать выделенный текст.

- CTRL+V (Shift+Insert) – вставить выделенный текст.

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

Для вызова ранее введенных команд используются клавиши со стрелками Стрелка Вверх - на одну команду назад и Стрелка Вниз - на одну команду вперед. Кроме того, можно использовать функциональные клавиши:

F1 - посимвольный вызов последней введенной команды. Каждое нажатие F1 приводит к последовательной подстановке в поле ввода одного символа из предыдущей команды.

F3 - вызов предыдущей команды.

F4 - удалить до символа. Выполняется удаление текста от текущей позиции курсора до заданного символа.

F5 и F8 - вызов буфера ранее введенных команд. Вывод по нажатию клавиши F5 прекращается когда будет отображена первая введенная команда текущей сессии.

F7 - отображение ранее введенных команд в отдельном окне в виде списка. Для выполнения нужной команды нужно выбрать ее, используя клавиши со стрелками, и нажать ENTER

F9 - выполнить команду, номер которой запрашивается. Номер команды в списке истории можно получить при использовании F7 .

В Windows 10 / Windows Server 2016 появились возможности, отсутствующие в предыдущих реализациях командной строки:

- Изменение прозрачности окна консоли при нажатии комбинаций CTRL + Shift + - или CTRL + Shift + + .

- Включение / выключение полноэкранного режима при нажатии CTRL+Enter .

- Расширение возможностей выделения текста и редактирования:

Shift+Home – выделить текст от текущего положения курсора до начала строки.

Shift+End – выделить текст от текущего положения курсора до конца строки.

- Быстрое перемещение по буферу экрана и поиск по контексту:

CTRL+Home – перейти в начало буфера экрана

CTRL+End – перейти в конец буфера экрана.

CTRL+Стрелка Вверх - перемещение на 1 строку вверх.

CTRL+Стрелка Вниз - перемещение на 1 строку вниз.

CTRL+F - открыть диалог поиска текста в буфере экрана.

Окно командной строки в Windows 10 можно закрыть с помощию стандартной комбинации клавиш - ALT+F4 .

Для отключения новых возможностей CMD, необходимо в свойствах приложения установить галочку ”Использовать прежнюю версию консоли (требуется перезапуск)”

Автодополнение путей файлов

В командной строке Windows можно выполнять подстановку имен файлов и каталогов при нажатии клавиши Tab . Например, для перехода, в каталог с длинным именем Program Files наберите начальную часть имени каталога

CD Pro и нажмите Tab. В строке ввода должна появиться команда :

CD "Program Files"

Как видим, выполняется подстановка недостающей части имени каталога, а в тех случаях, когда в нем имеется символ пробела, добавляются еще и двойные кавычки.

Если имеется несколько совпадающих начальных частей имен файлов или каталогов, при каждом нажатии клавиши Tab будет подставляться следующее по алфавитному порядку имя. Для возврата на предыдущее - используется комбинация Shift+Tab

Перенаправление данных стандартного ввода /вывода консоли.

Как уже упоминалось, в качестве стандартного устройства ввода командной строки используется клавиатура, а в качестве устройства вывода – дисплей. Однако, существует возможность перенаправления ввода-вывода на другие устройства c использованием операторов перенаправления:

ping –n 5 localhost > nul - выполнить пинг петлевого интерфейса 5 раз с перенаправлением вывода в фиктивное устройство nul . Вывод результатов выполнения команды подавляется. Подобный прием используется для организации задержки в командных файлах, поскольку пинг петлевого интерфейса выполняется почти мгновенно, а интервал между пингами равен одной секунде, время выполнения данной команды определяется значением параметра -n

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

ping -n 100 microsoft.com | find "Превышен интервал" - результат выполнения команды ping -n 100 microsoft.com передается в виде входных данных для команды поиска строк ( find ), содержащих текст "Превышен интервал".

ping -n 100 microsoft.com | find "Превышен интервал" > C:\ping-ya.txt - то же, что и в предыдущем примере, но с перенаправлением выводимых результатов выполнения команды в текстовый файл.

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

0 ( STDIN ) – дескриптор стандартного ввода (ввод с клавиатуры).

1 (STDOUT) – дескриптор стандартного вывода (вывод на экран).

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

Если дескриптор не определен, то по умолчанию оператором перенаправления ввода будет ноль (0), а оператором перенаправления вывода > будет единица.

Объединение нескольких команд в цепочку

В командной строке Windows существует возможность последовательного выполнения нескольких команд в зависимости от результатов их выполнения. Для чего используются символы объединения команд - & (амперсанд) и | (вертикальная черта)

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

&& - условное выполнение второй команды. Она будет выполнена, если код завершения (значение которого передается в стандартную переменную ERRORLEVEL) первой команды равен нулю, т.е. команда выполнена успешно.

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

Двойная вертикальная черта || - условное выполнение второй команды. Если первая команда завершилась с кодом возврата не равным нулю (неуспешно), то выполняется команда, следующая за двойной вертикальной чертой.

команда1 || команда2 - если команда1 выполнена неуспешно, то запускается на выполнение команда2

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

Логика условной обработки команд, реализуемая с помощью конструкций && и || действует только на ближайшую команду, то есть, при вводе команды

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

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

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

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

В первой из них символ условной обработки && действует только на команду DIR, во второй — одновременно на две команды: DIR и COPY. В качестве наглядного эксперимента, попробуйте выполнить вторую команду при условиях наличия и отсутствия файла C:\plan.txt . Для создания пустого файла можно воспользоваться копированием из фиктивного устройства nul :

copy nul C:\plan.txt

Для удаления файла используется команда erase c:\plan.txt или del C:\plan.txt

Командные файлы

Командные файлы (сценарии, скрипты) – это обычные текстовые файлы с заранее подготовленным набором команд для их выполнения командным процессором cmd.exe . Стандартно, такие файлы имеют расширение .bat или .cmd . Строки командных файлов могут содержать специфические команды самого процессора команд, например - FOR, ECHO, REM и т.п. или имена исполняемых модулей – reg.exe, sc.exe, auditpol.exe., которые можно использовать без расширения – reg, sc, auditpol. Пример простого командного файла:

REM Создается текстовый файл со списком каталога Windows
dir C:\Windows > %TEMP%\winlist.txt
REM выполняется задержка на 5 секунд
ping -n 5 localhost > nul
REM Файл открывается в редакторе WordPad
write %TEMP%\winlist.txt
REM После завершения работы Wordpad, текстовый файл удаляется.
erase C:\winlist.txt

Строки, начинающиеся с REM являются комментариями. В качестве примера, используются команды для работы с файловой системой и выполняется запуск приложения графической среды – текстового редактора Wordpad (write.exe) с передачей ему параметра командной строки (имя файла). Язык командных файлов довольно примитивен и не в полной мере соответствует требованиям сегодняшнего дня, однако, он является самым простым средством автоматизации рутинных действий и используется большинством системных администраторов и грамотных пользователей. Работа с командными файлами – это отдельная тема, более подробно изложенная на странице Командные файлы

Прочие материалы для освоения работы в командной строке Windows:

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

В разделе перечислены базовые приемы работы в командной строке Windows.

Запуск командной строки¶

Для запуска командной строки воспользуйтесь одним из следующих способов:

  • «Пуск → Выполнить» (или клавиши Win+R ) введите cmd и нажмите клавишу Enter ;
  • «Пуск → Все программы → Стандартные → Командная строка»;
  • «Пуск → Поиск → Командная строка».

Ввод команд¶

Команды вводятся посредством ввода с клавиатуры. Простейшая команда help выводит список всех доступных команд. Также вы можете просмотреть полный перечень команд в статье Список команд Windows ( Windows CMD ).

Для вывода справки по конкретной команде введите help название_команды , например:

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

Bat-файлы¶

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

Автодополнение путей файлов¶

Чтобы не набирать вручную весь путь к файлам используется клавиша Tab на клавиатуре. Она автодополняет названия директорий и файлов, например, чтобы ввести название папки User , достаточно ввести первую букву и нажать клавишу Tab , будет подставлено соответствующее значение.

Если на букву U начинается несколько директорий или файлов, то при каждом последующем нажатии Tab будет происходить перебор названий. Чтобы произвести перебор в обратном порядке, нажимайте Tab c зайжатой клавишей Shift .

Если папка состоит из нескольких слов, разделенных пробелом или из кириллических символов, то весь путь берется в кавычки, например, cd "C:\Documents and Settings"

Копирование текста в/из командной строки¶

По умолчанию копирование текста из командной строки отключено. Чтобы его включить необходимо:

  1. Нажать правой кнопкой мыши на заголовок окна командной строки и выбрать пункт «Свойства»;
  2. Установить галочки напротив «Выделение мышью» и «Быстрая вставка»;

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

В этой статье мы рассмотрим базовые операторы cmd командной строки ввода-вывода данных, математические выражении, а также операторы, которые позволяют объединить несколько команд.

Урок второй по комаедной строке

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

  • Команда1 | команда2 – результат, полученный после выполнения команды1 будет служить как входной параметр для команды2.
  • Команда<[путь] имя файла – Тут команда принимает содержимое файла как входной параметр.
  • Команда>[путь] имя файла – Результат выполнения команды будет выведен не на экран консоли, а во внешний файл. Если указанного внешнего файл нет, то он будет создан, если файл существует – произойдет его перезапись.
  • Команда>>[путь] имя файла – Аналог предыдущей команды, но тут, если файл существует, до данные допишутся в конец уже имеющихся в нем данных.
  • Команда<[путь] имя файла> [путь] имя файла – в данном примере, данные, из внешнего файла передаются команде как параметры, а вывод результата будет направляться в другой внешний документ.

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

Как вы уже заметили, перенаправление данных осуществляется с помощью четырех операторов (cmd) командной строки: вывод (>, >>) и ввод (< ,<<), при чем, если стрелочка используется в комбинации с файлом один раз, то произойдет его полная перезапись, если дважды – то произойдет дописывание данных. Если не указывать полный путь, а просто прописать имя файла, то он создастся в той папке, из которой происходит запуск команды.

Теперь давайте обратим внимание на оператор конвейеризации (“|”), он довольно удобен, так как позволяет передавать результат выполнения из одной команды сразу в другую, а из той в третью и так далее.

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

В данном случае утилита dir возвращает список файлов и папок в текущем каталоге, данный список передается как входной параметр утилите find (сотрите статью "Утилита 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.

Как видим, операторы командной строки (cmd), приведенные выше позволяют значительно сэкономить программный код и в некоторых случаях заменить условный оператор if и даже цикл.

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

Сперва покажется, что в файл log.txt должно вывестись содержимое текущего каталога, настройки сети и имя компьютера, но это не так! Файл будет содержать только результат выполнения команды hostname. Что бы все сработало правильно, нужно все три команды заключить в круглые скобки:

Хорошо теперь давайте рассмотри математические операторы cmd (командной строки). Как и в зыках программирования vbscript и jscript сервера Windows Script Host, в сценариях cmd присутствуют следующие математические выражения:

  • арифметические операторы – выполнение рядовых математических операций (+ (сложение), - (вычитание), * (умножение), /(деление), % (модуль));
  • операторы присваивания – знак равенства без или с арифметическими операциями.
  • операторы сравнения – отвечают за сравнение между собой двух операндов, как правило, используются в условном операторе if.
  • побитовые операторы – работа с двоичными данными.

Что бы произвести математическое вычисление, нужно использовать ключевое слово set с ключом /А (арифметика). Это связано с тем, что любое значении, которое присваивается переменной будет типа “строка”, а ключ /А говорит системе, что мы хотим работать с цифрами. Откройте редактор и пропишите в нем следующий код, далее сохраните как test.bat:

Что бы вам не приходилось делать дополнительные переходы, а вы могли запустить сценарий из любой директории в окне командной строки, просто пропишите:

Тут <путь> - путь к каталогу, в котором вы храните свой сценарий.

Вернемся к примеру, в данному примере с помощью ключевого слова set мы объявляем переменную var1, которая будет хранить сумму чисел 100 и 25, после происходит вывод результата на экран. Далее мы используем остальные математические операции с подальшим выводом результата.

Диапазон поддерживаемых цифр от -2 в 32 степени до 2 в 32 степени, при выходе за эту границу, возникнет ошибка с кодом -2. Можно проводить вычисления не только с цифрами, но и со значениями переменных:

В данном случае мы сначала объявляем две переменные, var2 со значением 100 и var3 со значением 200, потом в переменной var1 происходит сложении значений двух переменных, и деление результата на два с подальшим его выводом на экран.

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

  • += (сложение и присваивание)
  • -= (вычитание и присваивание)
  • *= (умножение и присваивание)
  • /= (деление и присваивание)
  • %= (деление по модулю и присваивание)

операторы cmd

Подобные операторы применяются и в языке jscript и позволяют вместо такой строки:

И так, в этой статье мы рассмотрели базовые cmd операторы командной строки.

Спасибо за внимание. Автор блога Владимир Баталий

Перевод документации Microsoft TechNet, где описаны основные принципы работы с командной строкой.

Имеется возможность использовать командную оболочку для создания и редактирования пакетных файлов (также называемых сценариями, обычно пишутся на Basic, расширение файла vbs), что позволит автоматизировать выполнение обычных задач. Например, сценарии можно использовать для автоматизации управления учетными записями пользователей и ежедневной архивацией в нерабочие часы. Также можно использовать вариант сервера сценариев Windows, запускаемый из командной строки — CScript.exe (или GUI-версия wscript.exe), чтобы выполнить в командной оболочке более сложные сценарии.

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

Имеется возможность настроить окно командной строки для облегчения просмотра и для увеличения контроля за выполнением программ (системное меню консоли командной строки, Свойства).

1. Запуск командной строки - Пуск\Выполнить. \cmd
2. Выход из командной строки - exit.
3. Если набрать в командной строке cmd и нажать Enter, то запускается вложенный интерпретатор cmd, т. е. теперь для выхода надо дважды набрать команду exit.
4. Можно использовать операторы перенаправления команд (см. далее).

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

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

Номера от 0 до 9 представляют первые 10 дескрипторов. Для запуска программы и перенаправления любого из 10 дескрипторов используется интерпретатор команд Cmd.exe. Для задания требуемого дескриптора перед оператором перенаправления введите его номер. Если дескриптор не определен, то по умолчанию оператором перенаправления ввода «<» будет ноль (0), а оператором перенаправления вывода «>» будет единица (1). После ввода оператора «<» или «>» необходимо определить, откуда нужно читать или куда нужно записывать данные. Можно задать имя файла или любой из существующих дескрипторов.

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

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

Примечание: 0 это дескриптор по умолчанию для оператора перенаправления ввода <.

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

Для запуска команды netsh routing dump и отправки результатов ее работы в файл Route.cfg введите:

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

Примечание: 1 является дескриптором по умолчанию для оператора перенаправления вывода >.

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

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

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

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

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

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

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

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

Использование оператора >> для добавления вывода. Для добавления вывода в файл без потери содержащихся в нем данных используется двойной символ «больше» (то есть >>). Например, следующая команда добавляет список каталогов, созданный командой dir, в файл dirlist.txt:

Для добавления выходных данных команды netstat в конец файла tcpinfo.txt введите:

Использование оператора канала (|) - pipe. Оператор канала "вертикальная линия" (|) забирает выходные данные одной команды (по умолчанию STDOUT) и направляет их на вход другой команды (по умолчанию STDIN). Например, следующая команда сортирует каталог:

В данном примере обе команды запускаются одновременно, но команда sort приостанавливает работу до получения выходных данных команды dir. Команда sort использует выходные данные команды dir в качестве своих входных данных, а затем свои выходные данные отправляет в дескриптор 1 (STDOUT).

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

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

При использовании более одного фильтра в одной команде их необходимо отделять с помощью канала (|). Например, следующая команда ищет в каждом каталоге диска C файлы, в названии которых присутствует строка «Log», и выводит их постранично на экран:

5. Для командной строки возможно использование фильтров, что позволяет управлять выводом информации. Всего есть 3 команды-фильтра:

More Отображает содержимое файла или вывода команды в одном окне командной строки за раз.
Find Поиск указанных символов в файлах и выходе команды.
Sort Сортировка файлов и выхода команды по алфавиту.

6. Использование нескольких команд и символов условной обработки.

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

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

• Амперсанд (&), вертикальная черта (|) и скобки ( ) являются специальными символами, которым должен предшествовать управляющий символ (^) или кавычки, если эти символы передаются в качестве аргументов.
• Если команда завершает операцию успешно, возвращается нулевой (0) код ошибки или не возвращается никакого кода. Дополнительные сведения о кодах завершения см. в разделе Использование пакетов Windows Deployment Kit и Windows Resource Kit.

Читайте также: