Урок bat-аники
Урок bat-аникиАвтор: Алексей Александров
Источник: RSDN Magazine #2-2005
Опубликовано: 11.07.2005
Исправлено: 10.12.2016
Версия текста: 1.0
Введение
Мы все любим писать серьезные вещи на серьезных языках. Шаблоны, C++, Reflection, Perl и многое другое – вот то, что мы любим, то, чему посвящаем длинные сообщения в форумах, то, что снится нам по ночам.
Однако в нашей повседневной деятельности встречаются и вещи, которые не так интересны и интеллектуальны. Мы не очень любим говорить об этом, делаем вид, что Это – грязно, нечистоплотно и недостойно нашего внимания. Однако, приходит день, приходит час и перст Судьбы находит нас – нам надо написать еще один батничек… Иногда это запускалка для построения проекта, которая должна при ошибке компиляции скопировать логи на сетевой диск, иногда – запуск обновления исходных текстов из SVN. Иногда – что-нибудь еще.
К чему я это все? А к тому, что поговорим мы о полезных хитростях при написании файлов сценариев на встроенном командном языке Windows. К счастью, это занятие не является доминирующим в профессиональной деятельности автора, так что я не обязуюсь заполнить абсолютно все пробелы в данной области. Кроме того, рожденный ползать летать не может, и из cmd.exe, увы, не получится ни /usr/bin/perl, ни даже /bin/sh. Так что, все нижеприведенное – просто некоторые интересные факты из жизни файлов с расширением bat, на которые автор обратил внимание во время решения различных практических задач автоматизации.
Наш урок будет построен по сугубо практическому принципу, известному в народе как Cookbook. Иными словами, я не буду вдаваться в синтаксические и семантические дебри командного языка Windows, а лишь продемонстрирую его возможности (хотел написать «мощь», но все-таки передумал). Именно поэтому большинство следующих заголовков будет начинаться со слова «Как». Впрочем, для полноты по ходу развития событий будут даваться подробные комментарии, в том числе и по языковым конструкциям.
ПРЕДУПРЕЖДЕНИЕ Практически все описанные здесь рецепты подойдут только для Windows 2000 и старше. Bat-язык Windows 9x, к счастью, можно считать почившим, так что здесь он не рассматривается. Более того, диалекты cmd.exe операционных систем Windows 2000, Windows XP и Windows Server 2003 также немного различаются. Все приведенное ниже создано и проверено на компьютере под управлением операционной системы Windows XP. За подробной информацией по различиям в реализации той или иной команды обращайтесь к [1]. |
Как экранировать символ?
В командном языке Windows существует некоторый набор символов с высоким приоритетом, которые всегда трактуются как спецсимволы. К ним, в частности, относятся:
- Операторы перенаправления ввода-вывода <, >, >>.
- Оператор конвейера |.
- Операторы объединения команд ||, & и &&.
- Оператор разыменования переменной %…%.
В случае если символ, относящийся к одному из таких операторов, должен быть включен в вашу команду в его литеральном смысле, вас ждут определенные неожиданности. Например, при выполнении вот такой строки
echo The ratio should be up to 10%. |
символ процента будет «съеден» интерпретатором, который решит, что это попытка вывода значения какой-то переменной. В случае со знаком процента решение довольно хорошо известно и состоит в удвоении этого символа:
echo The ratio should be up to 10%%. |
после чего все заработает так, как надо. Однако в других случаях все менее очевидно. Рассмотрим командный сценарий, который генерирует незатейливый HTML-файл:
@echo off set OUTPUTFILE=%1 echo<html> >%OUTPUTFILE% echo<head> >>%OUTPUTFILE% echo<title>This is a greeting page</title> >>%OUTPUTFILE% echo</head> >>%OUTPUTFILE% echo<body> >>%OUTPUTFILE% echoHello World! >>%OUTPUTFILE% echo</body> >>%OUTPUTFILE% echo</html> >>%OUTPUTFILE% |
К сожалению, при попытке запуска этого «чуда инженерного разума» нас постигнет неудача в виде сообщения об ошибке
> was unexpected at this time. --deliver-target=ftp://ftp.site.com |
Помните лишь, что чудо-символ должен быть последним в строке – скажите «Нет!» концевым пробелам.
Как определить имя каталога, в котором находится запущенный командный файл?
Иногда сценарию надо знать полный путь к себе самому и/или к каталогу, в котором он находится. Это может понадобиться по разным причинам. Например, он должен достать из системы контроля версий исходники в каталог <script-dir>/src рядом с собой. Или, запускаются тесты из каталога <script-dir>/tests, и перед их запуском надо добавить каталог <script-dir>/bin в переменную PATH.
Можно, конечно, рассчитывать на то, что командный файл был вызван из того же каталога, где он находится, и тогда в качестве вышеупомянутого <script-dir> можно использовать переменную окружения %CD% — полный путь к текущему каталогу. Однако любые допущения в нашем деле недопустимы (хороший каламбур, однако!). Поэтому приведу более надежное решение.
Прежде всего, вспоминаем, что переменная %0 в bat-файле соответствует нулевому аргументу командной строки, т.е. имени самого файла. После этого читаем скудную документацию для команды call:
и обнаруживаем, что при использовании нумерованных переменных %0-%9 можно использовать некоторые модификаторы:
%~1 - разворачивает %1, удаляя кавычки (") %~f1 - разворачивает %1 в полный квалифицированный путь %~d1 - разворачивает %1 в букву диска %~p1 - разворачивает %1 в путь %~n1 - разворачивает %1 в имя файла %~x1 - разворачивает %1 в расширение файла %~s1 - развернутый путь будет содержать только короткие имена %~a1 - разворачивает %1 в атрибуты файла %~t1 - разворачивает %1 в дату/время создания файла %~z1 - разворачивает %1 в размер файла %~$PATH:1 - Ищет в каталогах, перечисленных в переменной среды PATH, и разворачивает %1 в полное квалифицированное имя первого совпадения. Если имя перменной среды не определено, или если файл не найден, этот модификатор вернет пустую строку |
и, более того:
Модификаторы можно объединять для получения сложных результатов: %~dp1 - разворачивает %1 в букву диска и путь %~nx1 - разворачивает %1 в имя файла с расширением %~dp$PATH:1 – ищет %1 в каталогах, перечисленных в переменной среды PATH, и разворачивает в букву диска и путь к первому найденному файлу. %~ftza1 - разворачивает %1 в строку, подобную DIR |
Таким образом, правильным будет использовать в качестве тега <script-dir> сочетание %~dp0, которое будет раскрыто в полный путь к каталогу, где находится сценарий. Например,
"%~dp0\packagebin. --deliver-target=ftp://ftp.site.com --deliver-source="%~dp0\bin" |
Обратите внимание на использование кавычек – потенциально каталог может иметь в своем пути пробел. Кавычки избавят от проблем в этом случае.
ПРЕДУПРЕЖДЕНИЕ Опасайтесь бездумного применения команды cd %~dp0 без проверки результата выполнения. Теоретически, эта команда должна сменить текущий каталог на каталог, в котором расположен командный файл. Как правило, это работает. Однако возможны неожиданности. Однажды был написан простой командный сценарий, задача которого была просто удалить все каталоги рядом с собой. В «свою» директорию он переходил как раз через cd %~dp0. Все было проверено на локальной машине – работало замечательно. После этого сценарий был помещен на файл-сервер, где ему и полагалось быть. Я зашел с помощью Far в сетевой каталог, и для контрольной проверки решил запустить файл еще раз. Дальнейшее словно в тумане. cmd.exe правильно определил местонахождение bat-файла: \\servername\sharename\directory. Однако при попытке сделать туда cd, он сказал, что UNC-пути в качестве текущих каталогов не поддерживаются и лучше он сменит текущий каталог на C:\WINDOWS… Это было действительно мудрое решение… Часть сценария, отвечавшая за удаление всех каталогов, сработала отлично – хорошо, что я успел вовремя остановить это безумие. В тот день я узнал, что такое System Restore… |
Как получить короткое (8.3) имя файла?
«А зачем? – спросите вы – Ведь мы живем в мире Интернета, Web-сервисов и NTFS с длинными именами файлов». Это действительно так, но иногда встречаются программы, которые отчаянно сопротивляются прогрессу, и в частности, не любят имен файлов и полных путей с пробелами. Одной из таких программ, кстати, является утилита build.exe из Windows DDK… В таких ситуациях спасает использование короткого, «беспробельного» DOS-имени для файла.
ПРЕДУПРЕЖДЕНИЕ Доступ к файлу по короткому имени может быть не всегда возможен. На файловой системе NTFS создание коротких псевдонимов для файлов может быть отключено путем установки в единицу значения «NtfsDisable8dot3NameCreation» в ключе реестра «HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem». |
Итак, все же (в предположении, что надругательства над NTFS не было) – как? Внимательный читатель должен был заметить в предыдущем разделе, что при обращении к переменным %0 — %9 можно использовать префикс
%~s1 - expanded path contains short names only |
который нам как раз мог бы помочь. Но есть засада – все эти полезные префиксы нельзя использовать с произвольной переменной окружения, а присваивание переменным %0 — %9 не поддерживается. К счастью, описываемые префиксы можно еще использовать с переменными цикла for, и это дает нам способ достичь требуемого результата.> «%PROGRAMFILESSHORT%»
Этот и другие модификаторы можно использовать и с любой другой формой цикла for, подробнее о которых можно узнать из:
Как перенаправить стандартный вывод в файл?
Плоха та короткая программа, которая не стремится стать большой. К сожалению, это правило применимо и к командным файлам Windows тоже – иногда bat-файлы вырастают до довольно больших размеров. Если при этом результат выполняемых команд должен журналироваться, то все становится совсем плохо – почти каждая строка имеет хвостик типа
echo Cleaning up the target directory >>%LOGFILE% ... echoThe target directory has been cleaned >>%LOGFILE% |
Гораздо проще было бы перенаправить стандартный вывод в файл, чтобы все команды echo и вообще, все, что выводится на экран, автоматически попадали в журнальный файл.>
Здесь делается то же, что и раньше, но с перенаправлением стандартного вывода в файл out.html. Делается это простым способом – перезапуском сценарием самого себя. Сначала проверяется, не установлена ли переменная окружения STDOUT_REDIRECTED. Если она установлена, значит, сценарий уже перезапущен с перенаправленным выводом и можно просто продолжить работу. Если же переменная не установлена, то мы ее устанавливаем и перезапускаем скрипт (cmd.exe /c %0) с таким же набором параметров, что и исходная команда (%*) и перенаправленным в файл стандартным выводом (>%OUTPUT%). После завершения выполнения «перенаправленной» команды выходим.
Такое «единовременное» перенаправление имеет и еще один неочевидный плюс: файл открывается и закрывается только один раз, и всем командам и дочерним процессам передается дескриптор уже открытого файла. Во-первых, это чуть-чуть улучшит производительность (жизнь удалась – сроду бы не подумал, что буду когда-нибудь писать о производительности в bat-файлах). Во-вторых, это поможет избежать проблемы с невозможностью открыть файл для записи. Такое может случиться, если после выполнения одной из команд останется «висеть» какой-нибудь процесс. Он будет держать дескриптор интересующего нас файла и перенаправление вывода в этот файл для всех последующих команд провалится. Проблема может показаться надуманной, но однажды она украла у меня 2 часа жизни…
Как сложить два числа?
Краткий ответ – смотри:
Длинный ответ таков. В bat-файлах можно производить довольно-таки продвинутые вычисления – продвинутые не в сравнении с другими языками, а в сравнении с отсутствием возможности что-либо вычислить вообще. Вычисление осуществляется командой set, если она выполняется с ключом /a. Поддерживается практически полный набор операторов языка C, включая шестнадцатеричный модификатор 0x. Переменные окружения в выражении не обязательно заключать в знаки процента – все, что не является числом, считается переменной. Подробнее – все-таки в man set, тьфу, то есть в set /?. А здесь напоследок – просто несколько примеров.
@echo off set ARG=1 remset /a RESULT=ARG + 2 echo%RESULT% remremset /a RESULT="ARG << 2" echo%RESULT% remset /a RESULT=0x1234 + 0x6786 echo%RESULT% rem |
А можно создать в bat-файле функцию?
Да, можно. Более того, иногда даже нужно. Правда, функциями это можно назвать условно. Есть особый синтаксис команды call, который позволяет перейти на метку в этом же bat-файле с запоминанием места, откуда был произведен этот вызов:
call :метка аргументы |
Возврат из функции производится командой:
exit /b [опциональный код возврата] |
Ключ /b здесь очень важен: без него будет произведен выход не из функции, а из сценария вообще.
За подробностями обращайтесь к:
Что интересно, команда call с таким синтаксисом поддерживает рекурсивные вызовы с автоматическим созданием нового фрейма для переменных аргументов %0-%9. Иногда это может быть полезным. Вот классический пример рекурсивного подсчета факториала на командном языке:
@echo off call :factorial %1 echo %RESULT% exit remremremremrem:factorial if %1 == 0 ( set RESULT=1 exit /b ) if %1 == 1 ( set RESULT=1 exit /b ) set /a PARAM=%1 - 1 call :factorial %PARAM% set /a RESULT=%1 * %RESULT% exit /b |
Пример работы:
> factorial.bat 10 3628800 |
Как можно избежать использования goto?
Любой хоть сколько-то осмысленный *.bat-файл длиной больше 50 строк является ярким лозунгом в поддержку работы Дейкстры «О вреде оператора goto». Мешанина из переходов вперед и назад действительно является кодом «только для записи». Можно ли что-то предпринять по этому поводу?
На самом деле можно. Как правило, большинство меток и переходов используются для организации ветвлений при проверке условий, т.е. банальных if-then-else блоков. В оригинале, bat-язык поддерживал только одну команду в блоке then, что автоматически приводило к идиомам вида:
if condition goto :THEN remremgoto IF_END :THEN remrem:IF_END |
Но к счастью, командный интерпретатор cmd.exe современных ОС Windows 2000 и старше поддерживает блоки команд в конструкциях ветвления, что устраняет необходимость применения меток. Блоки команд заключаются в круглые скобки. Выглядит это так (имитируя C/C++ indentation style):
if condition ( remrem) else ( remrem) |
Конкретный пример использования:
@echo off set BUILDMODE=%1 if "%BUILDMODE%" == "" ( echoFAIL: Аргумент является обязательным ^(--debug, --release^)exit /b 1 ) remset BUILDMODE=%BUILDMODE:-=% if "%BUILDMODE%" == "debug" ( echoINFO: Устанавливаем debug-режим окруженияset CCFLAGS=/Od /MDd /Z7 ) else ( echoINFO: Устанавливаем release-режим окруженияset CCFLAGS=/O2 /MD ) |
На мой взгляд, с этим уже вполне можно жить. Но, как всегда, жизнь не так проста, как кажется. Есть одна проблема. Переменные, использующиеся в блоках then и else, раскрываются перед началом выполнения этих блоков, а не в процессе выполнения. В приведенном примере это не вызывает никаких проблем, однако в следующем вызовет:
if "%BUILDMODE%" == "debug" ( echoINFO: Устанавливаем debug-режим окружения set OPTFLAGS=/Od set CCFLAGS=%OPTFLAGS% /MDd /Z7 ) else ( echoINFO: Устанавливаем release-режим окружения set OPTFLAGS=/O2 set CCFLAGS=%OPTFLAGS% /MD ) |
Загвоздка в том, что в обоих блоках подстановка переменной OPTFLAGS произойдет до того, как она будет изменена в процессе выполнения этого блока. Соответственно, в CCFLAGS будет подставлено то значение, которое OPTFLAGS имела на момент начала выполнения данного if-блока.
Решается эта проблема путем использования отложенного раскрытия переменных. Переменные, заключенные в !…! вместо %…%, будут раскрыты в их значения только в момент непосредственного использования. Данный режим по умолчанию отключен. Включить его можно либо использованием ключа /V:ON при вызове cmd.exe, либо использованием команды
setlocal enabledelayedexpansion |
в тексте самого bat-файла. Второй способ мне представляется более удобным – не очень здорово требовать от кого-то запуска твоего сценария с определенным параметром.
С учетом сказанного предыдущий «неправильный» пример может быть исправлен так:
setlocal enabledelayedexpansion remif "%BUILDMODE%" == "debug" ( echoINFO: Setting up debug mode environment set OPTFLAGS=/Od set CCFLAGS=!OPTFLAGS! /MDd /Z7 ) else ( echoINFO: Setting up release mode environment set OPTFLAGS=/O2 set CCFLAGS=!OPTFLAGS! /MD ) |
Вот теперь это почти полноценный if-then-else блок., иначе синтаксический анализатор путается…
Но в любом случае, это гораздо лучше безумного количества меток и переходов.
Как обработать текстовый файл?
Иногда в командном файле необходимо получить доступ к содержимому некоторого текстового файла и некоторым образом это содержимое обработать. Например, прочитать файл настроек программы.
Для привнесения еще большей конкретики в процесс изучения зададимся целью прочитать файл с настройками следующего содержания:
buildmode=release compiler=cl.exe arch=x86 |
Ничего сверхъестественного – простой key=value формат с возможностью вставки Unix-style комментариев. Помочь в чтении и обработке этого файла нам сможет команда for. Ее дополнительные опции позволяют задать и разделители, и символ начала комментария, и кое-что еще. Вот командный файл, который выполняет поставленную задачу:
@echo off remremremcall :read_settings %~dp0\settings.txt || exit /b 1 remechoBuild mode : %BUILDMODE%echoCompiler : %COMPILER% echoArchitecture: %ARCH% remexit /b 0 remremremrem:read_settings set SETTINGSFILE=%1 remif not exist %SETTINGSFILE% ( echoFAIL: Файл с настройками отсутствуетexit /b 1 ) remremremremremremremremremremfor /f "eol=# delims== tokens=1,2" %%i in (%SETTINGSFILE%) do ( remremremset %%i=%%j ) exit /b 0 |
Обильные комментарии должны помочь легко разобраться, что к чему. За подробностями, как обычно, отошлю к:
Кстати, возможности команды for не ограничиваются чтением из файла. Возможно также чтение вывода другой команды. Например, так:
@echo off for /f "tokens=* usebackq" %%i in (`cmd.exe /c ver`) do ( set VERSION=%%i ) echo%VERSION% |
Особенно меня умиляет наличие опции “usebackq”, которая делает синтаксис отдаленно похожим на юниксовый. И в стенах царства Билла есть граждане, скучающие по /bin/sh и пытающиеся хоть как-то скрасить существование свое и окружающих. Следующий совет это также косвенно подтверждает.
Что это за упомянутые ранее операторы объединения команд?
Это операторы &, && и ||. Они практически совсем не освещены в документации, но полезны в повседневности. Они позволяют объединять несколько команд в одну, т.е. примерно так:
command1 & command2 command1 && command2 command1 || command2 |
Форма этих операторов весьма соответствует их содержанию. В случае, пожалуй, наименее полезного оператора & вторая команда будет просто выполнена после первой, т.е. это равносильно простой записи:
Оператор && гарантирует, что вторая команда будет выполнена только, если первая была выполнена успешно, т.е. с нулевым кодом возврата (он же %errorlevel%). Такие конструкции очень популярны в мире shell-сценариев Unix. Например:
Я был приятно удивлен, узнав, что cmd.exe тоже умеет выполнять такие конструкции. Это безопаснее и правильнее, нежели простое последовательное выполнение этих команд, и короче и проще, чем строгая проверка и обработка кодов возврата. Очень удобно при написании на скорую руку. Не менее полезен иногда и оператор ||. Суть его тоже логична – выполнить вторую команду, если первая дала сбой. Часто встречается в таких идиомах:
Если перейти в каталог sources не удастся, то будет произведен выход с кодом ошибки 1. Если же первая команда отработает нормально, то вторая выполнена не будет. Например, такая простейшая защита помогла бы в случае с cd по UNC-адресу, описанному ранее.
Можно ли написать на bat-языке серьезную программу?
Пожалуй, нет. Серьезная программа должна все-таки выглядеть серьезно. А все написанное на командном языке Windows таковым назвать можно лишь с о-о-о-чень большой натяжкой. Так что для решения более сложных задач автоматизации лучше все-таки взять что-нибудь более функциональное:
- Perl
- Python
- Ruby
- JScript / VBScript
Последние, кстати, присутствуют в Windows 2000/XP по умолчанию (с некоторыми функциональными различиями) и в целом могут считаться заменой *.bat языку. Однако сдается мне, что *.bat-файлы проживут еще очень долго.
Дай Бог, чтобы я ошибся…
Материалы по теме
- Windows Batch Files – Commands Reference.
- Windows 2000. Команды: Карманный справочник. Э. Фриш. – М.: Мир, 2003.
Эта статья опубликована в журнале RSDN Magazine #2-2005. Информацию о журнале можно найти здесь
Команды, используемые в bat файлах — Информатика, информационные технологии
Руководство по написанию пакетных файлов
Материал из Admin Wiki
Перейти к: навигация, поиск
Примеры пакетных файлов.
Содержание[убрать]
|
Править] Введение
В связи с тем, что постоянно возникают вопросы по bat файлам, решено было создать тему следующего содержания. Пакетные или batch файлы — это обычные текстовые файлы, содержащие наборы команд интерпритатора и имеющие расширение bat или cmd (cmd работают только в ОС семейства NT). Редактировать такие файлы можно при помощи блокнота или любого другого текстового редактора. В этом FAQ собраны рекомендации, которые были протестированы на Windows 2000. Некоторые команды и переменные, использованные при написании примеров, отсутствуют в 9х.
Править] Советы
Править] Как создать batch файл?
Откройте блокнот и наберите две следующих строки:
@echo This batch [email protected]
Выберите Файл — Сохранить как, выберите Тип файла — Все файлы, в поле Имя файла введите 1.bat и сохраните его в корне диска С, например. Теперь откройте диск С и запустите файл 1.bat. На экран будет выведено две строки.
This batch fileНажмите любую клавишу для продолжения…
После нажатия любой клавиши окно закроется, т.к. bat-файл выполнен. Обратите внимание, что символ собаки перед каждой командой в bat-файле указывает на то, что саму команду выводить на экран не надо, а нужно вывести только результат ее работы. Чтобы поэкспериментировать удалите символ собаки из начала каждой строки, сохраните и запустите полученный bat файл.
править] Команды, используемые в bat файлах
Список команд, которые можно использовать в bat файлах, можно просмотреть, введя в командной строке (Пуск — Выполнить — cmd для Windows семейтва NT или Пуск — Выполнить — command для линейки 9х) команду
help
Результат работы help — список доступных команд с краткими пояснениями к ним. Чтобы получить более подробную информацию по интересующей команде введите в командной строке help имя_команды. Например, чтобы получить подробную справку по ключам команды AT выполните следующую команду:
help AT
В результате, на экран будет выведен список ключей для запуска команды AT из bat файла. Если bat файл исполняется под управлением Windows (не в чистом DOS-е), то из него можно запускать любые приложения или открывать файлы. Например, нужно автоматически открыть лог-файл работы bat файла по завершении его работы. Для этого достаточно включить в bat файл последней строкой следующую команду:
start имя_файла.txt
Результатом выполнения этой команды станет открытие файла имя_файла.txt, а сам bat файл завершит свою работу. Такой способ хорош, если лог-файл небольшого размера, иначе Блокнот откажется его открывать, предложив использовать WordPad. Но эта проблема так же решаема, что и будет показано в дальнейших примерах.
Статьи к прочтению:
Самые главные и нужные команды дляBAT и CMD
Похожие статьи:
-
Вывод сообщений в bat файлах
Понятие пакетного файла Пакетный файл (англ. batch file) — текстовый файл в MS-DOS или Windows, содержащий последовательность команд, предназначенных для…
-
Получение справки о командах dos
Дополнительные устройства. К системному блоку ПК можно подключить различные устройства ввода-вывода информации и расширить его функциональные…
BATCH — сохранить вывод команды в переменную
Команда FOR с параметром /F
и команда или командная строка, указанная как установленная (строка в круглых скобках), дополнительно заключенная в, '
могут использоваться для обработки вывода команды или командной строки с несколькими командами в одной строке.| %SystemRoot%\System32\find.exe /I /C «%_process%»‘) DO SET «_count=%%I»
IF /I «%_process%» == «cmd.exe» SET /A _count-=1
IF %_count% LSS 2 (
ECHO action 1
) ELSE (
ECHO action 2
)
Команда FOR запускается в фоновом режиме без видимого окна консоли cmd.exe /C
с командной строкой:
C:\Windows\System32\tasklist.exe /FI "IMAGENAME eq cmd.exe" | C:\Windows\System32\find.exe /I /C "cmd.exe"
TaskList опция /FI "IMAGENAME eq cmd.exe"
фильтрует вывод TaskList уже к процессам с именем изображения (= имя исполняемого файла) cmd.exe
. Это ускоряет дальнейшую обработку и позволяет избежать того, что запущенный процесс с именем файла totalcmd.exe
считается так же, cmd.exe
как и рассматриваемая командная строка.
Вывод TASKLIST, записанный для обработки STDOUT , перенаправляется для обработки STDIN команды FIND, которая обрабатывает строки и подсчитывает строки, содержащиеся в cmd.
в командной строке FOR, чтобы он интерпретировался как буквальный символ, когда интерпретатор команд Windows обрабатывает эту командную строку перед выполнением команды FOR, которая выполняет встроенную командную строку в отдельном командном процессе, запущенном в фоновом режиме.
FOR with option /F
фиксирует все, что написано для обработки STDOUT выполняемого командного процесса, и обрабатывает каждую строку. В этом случае FOR захватывает только одну строку, содержащую только число. Поэтому никаких дополнительных параметров не требуется для присвоения номера, присвоенного переменной цикла с I
помощью FOR, переменной среды _count
с помощью команды SET .
Целью этого командного файла является подсчет количества cmd.exe
уже запущенных процессов. Поскольку командная строка с TASKLIST и FIND выполняется FOR в фоновом режиме с использованием еще одного cmd.exe
процесса, необходимо вычесть счет на единицу, чтобы получить правильный результат, используя арифметическое выражение, вычисленное с помощью SET /A _count-=1
. Это уменьшение на единицу нужно только для правильного подсчета количества cmd.exe
процессов. Для любого другого процесса в этом нет необходимости.
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните в нем следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.
echo /?
find /?
for /?
if /?
set /?
tasklist /?
Справка по командам и параметрам bat-файла. for
Введение
Мы все любим писать серьезные вещи на серьезных языках. Шаблоны, C++, Reflection, Perl и многое другое – вот то, что мы любим, то, чему посвящаем длинные сообщения в форумах, то, что снится нам по ночам.
Однако в нашей повседневной деятельности встречаются и вещи, которые не так интересны и интеллектуальны. Мы не очень любим говорить об этом, делаем вид, что Это – грязно, нечистоплотно и недостойно нашего внимания. Однако, приходит день, приходит час и перст Судьбы находит нас – нам надо написать еще один батничек… Иногда это запускалка для построения проекта, которая должна при ошибке компиляции скопировать логи на сетевой диск, иногда – запуск обновления исходных текстов из SVN. Иногда – что-нибудь еще.
К чему я это все? А к тому, что поговорим мы о полезных хитростях при написании файлов сценариев на встроенном командном языке Windows. К счастью, это занятие не является доминирующим в профессиональной деятельности автора, так что я не обязуюсь заполнить абсолютно все пробелы в данной области. Кроме того, рожденный ползать летать не может, и из cmd.exe, увы, не получится ни /usr/bin/perl, ни даже /bin/sh
Так что, все нижеприведенное – просто некоторые интересные факты из жизни файлов с расширением bat, на которые автор обратил внимание во время решения различных практических задач автоматизации
Наш урок будет построен по сугубо практическому принципу, известному в народе как Cookbook. Иными словами, я не буду вдаваться в синтаксические и семантические дебри командного языка Windows, а лишь продемонстрирую его возможности (хотел написать «мощь», но все-таки передумал). Именно поэтому большинство следующих заголовков будет начинаться со слова «Как». Впрочем, для полноты по ходу развития событий будут даваться подробные комментарии, в том числе и по языковым конструкциям.
ПРЕДУПРЕЖДЕНИЕ
Практически все описанные здесь рецепты подойдут только для Windows 2000 и старше. Bat-язык Windows 9x, к счастью, можно считать почившим, так что здесь он не рассматривается. Более того, диалекты cmd.exe операционных систем Windows 2000, Windows XP и Windows Server 2003 также немного различаются. Все приведенное ниже создано и проверено на компьютере под управлением операционной системы Windows XP. За подробной информацией по различиям в реализации той или иной команды обращайтесь к . |
Как обработать текстовый файл?
Иногда в командном файле необходимо получить доступ к содержимому некоторого текстового файла и некоторым образом это содержимое обработать. Например, прочитать файл настроек программы.
Для привнесения еще большей конкретики в процесс изучения зададимся целью прочитать файл с настройками следующего содержания:
# Это простой файл с настройками # Режим сборки buildmode=release # Компилятор compiler=cl.exe # Архитектура arch=x86 |
Ничего сверхъестественного – простой key=value формат с возможностью вставки Unix-style комментариев. Помочь в чтении и обработке этого файла нам сможет команда for. Ее дополнительные опции позволяют задать и разделители, и символ начала комментария, и кое-что еще. Вот командный файл, который выполняет поставленную задачу:
@echo off rem Читаем настройки из файла settings.txt, который должен располагаться в rem том же каталоге, что и bat-файл. Если не удалось распарсить настройки - rem выходим с ненулевым кодом возврата. call :read_settings %~dp0\settings.txt || exit /b 1 rem Прочитанные настройки: echoBuild mode : %BUILDMODE%echoCompiler : %COMPILER% echoArchitecture: %ARCH% rem Выход из сценария. Дальше - только функции. exit /b 0 remrem Функция для чтения настроек из файла. rem Вход: rem %1 - Имя файла с настройками :read_settings set SETTINGSFILE=%1 rem Проверка существования файла if not exist %SETTINGSFILE% ( echoFAIL: Файл с настройками отсутствуетexit /b 1 ) rem Обработка файла c настройками rem Здесь: rem eol=# указывает на то, что содержимое строки начиная с символа # rem и до ее конца может быть пропущено как комментарий. remrem delims== указывает, что разделителем значений является символ = remrem tokens=1,2 приводит к тому, что в переменную %%i будет занесен первый rem токен, а в %%j - второй. remfor /f "eol=# delims== tokens=1,2" %%i in (%SETTINGSFILE%) do ( rem В переменной i - ключ rem В переменной j - значение rem Мы транслируем это в переменные окружения set %%i=%%j ) exit /b 0 |
Обильные комментарии должны помочь легко разобраться, что к чему. За подробностями, как обычно, отошлю к:
Кстати, возможности команды for не ограничиваются чтением из файла. Возможно также чтение вывода другой команды. Например, так:
@echo off for /f "tokens=* usebackq" %%i in (`cmd.exe /c ver`) do ( set VERSION=%%i ) echo%VERSION% |
Особенно меня умиляет наличие опции “usebackq”, которая делает синтаксис отдаленно похожим на юниксовый. И в стенах царства Билла есть граждане, скучающие по /bin/sh и пытающиеся хоть как-то скрасить существование свое и окружающих. Следующий совет это также косвенно подтверждает.
Встроенные команды
1. @echo – это команда bat-файлов, которая позволит увидеть работу скрипта в командной строке. Она используется для просмотра хода выполнения рабочего кода. Если у пакетного файла возникают какие-либо проблемы, то данная команда позволит быстро локализировать проблемы. Добавление off дает возможность быстро завершить выполнение кода, избегая вывода ненужной информации на экран.
2. Title предоставляет те же возможности, что и тег в HTML, т. е. создает заголовок для пакетного скрипта в окне командной строки.
3. Call вызывает один bat-файл из другого или подпрограмму внутри одного сценария. Например, функция power вычисляет степень %2 числа %1:
if %counter% gtr 1 (
endlocal & set result=%prod%
4. Cls очищает командную строку. Используется для того, чтобы предыдущий вывод постороннего кода на помешал просмотру хода выполнения текущего скрипта.
5. Color задает цвет шрифта и фона. Например, команда color f9 задает белые буквы на синем фоне. Команда без параметра восстанавливает установки по умолчанию.
6. Echo служит для вывода информации, а также включения (echo on) или выключения (echo off) такого вывода. Например, команда echo. выводит новую строку без точки, а echo . – точку. Без параметров команда выводит на экран информацию о своем текущем статусе – echo on или echo off.
7. Rem обеспечивает ту же функциональность, что и тег > (сдвиг вправо). Логическим оператором отрицания является ! (восклицательный знак). Он изменяет 0 в 1 и ненулевое значение в 0.=, >>=, >, >=; ,
Литералы можно вводить в виде десятичных, шестнадцатеричных (с ведущими 0x) и восьмеричных чисел (с ведущим нулем). Например, set /a n1=0xffff присваивает n1 шестнадцатеричное значение.
Как создать «батник» в операционной системе Windows 7
Сделать этот файлик может любой пользователь на компьютере, который имеет достаточно прав для создания и сохранения файлов. На счет выполнения немного сложнее — выполнение «батника» должно быть разрешено как и отдельно взятому пользователю, так и операционной системе в целом (запрет иногда накладывается в целях безопасности, ведь исполняемые файлы не всегда создаются для благих дел).
Способ 1: использование расширенного текстового редактора Notepad++
Программа Notepad++ является аналогом стандартного Блокнота в операционной системе Windows, значительно превосходя его в количестве и тонкости настроек.
- Файл можно создать на любом диске или в папке. Для примера будет использован рабочий стол. На свободном месте нажмите правую кнопку мыши, наведите курсор на надпись «Создать», в выпавшем сбоку окошке щелчком левой кнопки мыши выберите «Текстовый документ»
На рабочем столе появится текстовый файл, который желательно назвать так, как в итоге будет называться наш батник. После того, как имя для него определено, нажмите на документе левой кнопкой мыши, и в контекстном меню выберите пункт «Edit with Notepad++». Созданный нами файл откроется в расширенном редакторе.
Очень важна роль кодировки, в которой будет исполнена команда. По умолчанию используется кодировка ANSI, которую нужно заменить на OEM 866. В шапке программы нажимаем на кнопку «Кодировки», нажимаем на аналогичную кнопку в выпавшем меню, затем выбираем пункт «Кириллица» и нажимаем на «OEM 866». Как подтверждение смены кодировки справа внизу в окне появится соответствующая запись.
Тот код, который вы уже нашли в интернете или написали сами для выполнения определенной задачи, необходимо просто скопировать и вставить в сам документ. На примере ниже будет использована элементарная команда:
После запуска этот батник перезагрузит компьютер. Сама команда означает запуск перезагрузки, а цифры 00 — задержку ее выполнения в секундах (в данном случае она отсутствует, то есть перезапуск выполнится незамедлительно).
Когда команда будет записана в поле, наступает самый важный момент — превращение обычного документа с текстом в исполняемый. Для этого в окошке Notepad++ слева вверху выберите пункт «Файл», затем нажмите на «Сохранить как».
Появится стандартное окно Проводника, позволяющее задать два основных параметра для сохранения — место и имя самого файла. Если с местом мы уже определились (по умолчанию будет предложен Рабочий стол), то именно в названии заключается последний шаг. Из выпадающего меню выберите пункт «Batch file».
К уже заданному ранее слову или фразе без пробела допишется «.BAT», и получится так, как на скриншоте ниже.
После нажатия на кнопку «OK» в предыдущем окне, на рабочем столе появится новый файл, который будет выглядеть как белый прямоугольник с двумя шестеренками.
Способ 2: использование стандартного текстового редактора Блокнот
Он обладает элементарными настройками, которых вполне хватает для создания самых простых «батников». Инструкция абсолютно аналогична предыдущему способу, программы лишь немного отличаются в интерфейсе.
- На рабочем столе двойным щелчком откройте ранее созданный текстовый документ — от откроется в стандартном редакторе.
Команду, которую использовали ранее, скопируйте и вставьте в пустое поле редактора.
В окошке редактора слева вверху нажмите на кнопку «Файл» — «Сохранить как…». Откроется окно Проводника, в котором необходимо указать место сохранения конечно файла. Здесь отсутствует способ задания необходимого расширения с помощью пункта в выпадающем меню, поэтому просто нужно дописать к названию «.BAT» без кавычек, чтобы получилось так, как на скриншоте ниже.
Оба редактора отлично справляются с созданием батников. Стандартный блокнот больше подходит для простых кодов, в которых используются несложные одноуровневые команды. Для более серьезной автоматизации процессов на компьютере необходимы продвинутые батники, которые с легкостью создаются расширенным редактором Notepad++.
Рекомендуется запускать файл .BAT от имени администратора, чтобы не возникало проблем с уровнями доступа к определенным операциям или документам. Количество задаваемых параметров зависит от сложности и назначения задачи, которую необходимо автоматизировать.
Опишите, что у вас не получилось.
Наши специалисты постараются ответить максимально быстро.
Как создать пакетный файл BAT для выполнения в командной строке CMD
Batch (.bat) файл — это инструмент, который сэкономит вам не один десяток часов рабочего времени. Узнайте сейчас как использовать пакетный файл на практике.
Пакетный (BAT, batch) файл представляет собой инструмент, с которым сталкивался практически каждый пользователь Windows. Документ помогает выполнить ряд действий буквально парой кликов, а их список ограничивается лишь силой воображения и кодовым функционалом. Давайте разберем инструмент подробнее.
Что такое BAT файл?
Вы, должно быть, уже в курсе о существовании такой утилиты как “Командная строка” Windows, или CMD.
Она работает путем ввода команд в качестве входных данных и обрабатывает их, проводя нужные операции с компьютером.
Тем не менее, несмотря на всю полезность инструмента, командная строка устраивает далеко не всех. Сложность утилиты и высокий порог вхождения делают ее “последним средством спасения Windows”.
Доступные форматы BAT файла:
Вне зависимости от того какой формат выбран при создании документа, функции от этого не изменятся.
В чем польза bat файла?
Автоматизация. Если раньше вам приходилось долго и нудно “вбивать” сложные коды в окно командной строки, пришло время расслабиться! BAT файл экономит время пользователя не только при работе с CMD, но и при взаимодействии с другими системами ПК.
Например, вы можете запланировать выключение компьютера через определенный промежуток времени. Этот способ применения пакетного файла хорошо подойдет геймерам, ставящим установку игру на ночь.
Запланируйте отключение системы к моменту завершения установки и не опасайтесь за перерасход электроэнергии.
Если же вы разработчик программного обеспечения, обратите внимание на возможность автоматизации при установке вашего приложения. Таким образом повысится не только удобство для конечного пользователя, но популярность вашего софта
При создании BAT файла используется петля (for), условный оператор (if) и оператор управления (goto). Документ запускается либо с помощью командной строки, либо с помощью другого пакетного файла при использовании команды CALL.
Режимы BAT файла
Несмотря на то, что пакетный файл по умолчанию выполняет работу автоматически, вы можете настроить его так, что при выполнении конкретной операции он будет запрашивать подтверждение. Например, при вводе команды на отключение службы Windows, BAT файл спросит вас, уверены ли вы в своем решении. Этот режим называется интерактивным (interactive).
Другой режим называется пакетным (batch mode). Он работает в классическом стиле и самостоятельно выполняет запрограммированные функции.
Режимы пакетного файла:
- Интерактивный.Полуавтоматический режим. Программа может запрашивать подтверждение операций.
- Пакетный.Полная автоматизация работы.
Используйте разные режимы в зависимости от ситуации.
Как запустить BAT файл в Windows 10?
Основной способ запуска пакетного файла — двойной щелчок по его иконке. Тем не менее, вы можете его и открыть и другим методом — с помощью командной строки.
Чтобы открыть BAT файл с помощью командной строки, выполните следующее:
- Откройте директорию в которой лежит пакетный файл.
- Определите название файла.
- Откройте командную строку.
- Введите название документа с его расширением.Например: HelloWorld.bat
Способ запуска через командную строку приобретает ценность с ростом количества пакетных файлов. Если вы помните название и расширение нужного документа, вы откроете его даже когда забыли точную директорию.
Как создать BAT файл?
Эта тема разбита на 2 раздела, каждый из которых — ключевой при создании пакетного документа. Не зная основ и команд, нужных для формирования структуры, автоматизировать процесс работы невозможно.
Основы создания BAT файловВы не сможете создать пакетный файл без изучения базовых команд. Каким бы он не был полезным и не помогал автоматизировать работу на ПК, непонимание основ станет серьезным препятствием. В этом разделе мы рассмотрим 5 базовых команд, которые вас в курс дела.
Базовые команды:
titleИспользуется для создания заголовка. Отображается в верхней части окна командной строки.
echoРежим вывода команд на экран. При включении, командная строка выведет на экран сообщение о совершенном действии. При отключении, соответственно, сообщения пропадут
Обратите внимание, что вам придется контролировать статус echo. Если команда активирована на строке 2 и вы решили отключить ее на строке 22, 20 промежуточных строк будут содержать включенный режим вывода команд.
pauseИспользуется для остановки процесса.
exitПозволяет закрыть командную строку.
clsИспользуется для очистки окна командной строки.
::
Цикл в командной строке for /l
Всем привет. Подскажите, как можно сделать цикл что бы передавал по очередно файлы для aerender.exe ? Вот тут примеры есть https://helpx.adobe.com/ru/after-effects/using/automated-rendering-network-rendering.html
Пытаюсь написать вот так
Но ничего не запускается даже. Командная строка открыта в директории c:Program FilesAdobeAdobe After Effects CC 2021Support Files и два файла проекта лежат там же 1.aep и 2.aep . Если так вообще можно сделать, позже хотел бы сделать. что бы файлы проекта искал не там же а в другой директории? И хотел бы написать батник что бы не лазить постоянно в директорию с aerender.exe, что то типо Вот такого
Да, я понимаю, что это не правильно, подскажите как правильно написать ?
Разделители полей
Причина вышеописанной особенности заключается в специальной переменной окружения, которая называется
(Internal Field Separator) и позволяет указывать разделители полей. По умолчанию оболочка bash считает разделителями полей следующие символы:
- Пробел
- Знак табуляции
- Знак перевода строки
Если bash встречает в данных любой из этих символов, он считает, что перед ним — следующее самостоятельное значение списка.
Для того, чтобы решить проблему, можно временно изменить переменную среды IFS. Вот как это сделать в bash-скрипте, если исходить из предположения, что в качестве разделителя полей нужен только перевод строки:
После добавления этой команды в bash-скрипт, он будет работать как надо, игнорируя пробелы и знаки табуляции, считая разделителями полей лишь символы перевода строки.
Массовая обработка файлов. Команда for
Команда for позволяет организовать выполнение повторяющихся однотипных действий. Можно
использовать ее для того, чтобы вывести на экран числа от одного до десяти, как показано на
следующем листинге.
for /l %%i in (1,1,10) do echo %%i
Переменная i называется счетчиком цикла. В силу своеобразия синтаксиса
команды for, имя счетчика цикла должно состоять из одной буквы. Причем, если
мы пишем командный файл, то перед именем счетчика цикла надо поставить сдвоенный знак
процента, если же мы просто набираем команду в командной строке, то одиночный.
Логика работы этой команды такова. После слова in указан диапазон изменения
счетчика цикла. В данном варианте команды это тройка чисел: начальное значение счетчика, шаг
счета, предельное значение счетчика. При выполнении команды командный процессор сначала
присвоит переменной i значение 1, а потом на каждом шаге
цикла будет увеличивать его на 1, пока оно не превысит 10.
Очевидно, таких шагов получится десять. Если бы в качестве шага счета мы указали число
2, то цикл выполнился бы пять раз. На каждом шаге цикла выполняется тело
цикла, написанное после слова do. В приведенном примере это команда echo,
которая выводит на экран текущее значение счетчика цикла.
Наверно можно придумать ситуацию, когда что-то подобное на самом деле требуется, но обычно
команда for используется для перебора и обработки файлов. Надо сказать, что в
достаточно простых случаях массовая обработка файлов выполняется с помощью подстановочных
символов. Если, мы хотим всем файлам в текущем каталоге заменить расширение
.htm на .html, мы вводим команду ren *.htm
*.html. Но если то же самое надо сделать не в одном каталоге, а в дереве каталогов,
то без команды for не обойтись. Приведенный ниже командный файл выполняет эту операцию для
всех htm-файлов в подкаталоге website текущего каталога. Точнее, во всем дереве каталогов,
которое находится внутри website.
for /r website %%i in (*.htm) do ren %%i %%~ni.html
Ключ /r указывает на необходимость обхода каталога website и
всех его внутренностей. Если его не указать (но тогда и каталог указывать не разрешается), то
обработаны будут только файлы в текущем каталоге. Диапазоном значений счетчика цикла в данном
варианте команды является множество всех файлов с расширением .htm,
находящихся внутри каталога (точнее, дерева) website. Странная на первый
взгляд запись ~ni означает, что из значения переменной i
требуется выделить только имя файла. В языке команд MS-DOS предусмотрено несколько таких
модификаторов, например, запись ~хi обозначает расширение файла. Все
модификаторы описаны в справке по команде for.
Тело цикла может состоять из нескольких команд, заключенных в скобки.
@echo off for /r website %%i in (*.htm) do ( rem Выводим имя файла echo %%i rem Переименовываем файл ren %%i %%~ni.html )
Параметры
- {%переменная|%%переменная}
-
Обязательный параметр. Замещаемый параметр. Используйте %переменная для
выполнения команды for из командной строки. Используйте %%переменная
для выполнения команды for в пакетном файле. Переменные учитывают регистр и могут
быть представлены со значением альфа, например, %A, %B или %C. - (множество)
-
Обязательный параметр. Задает один или несколько файлов, каталогов, диапазон значений или
текстовых строк, подлежащих обработке заданной командой. Скобки являются обязательными. - команда
-
Обязательный параметр. Задает команду, которая будет выполнена для каждого файла, каталога
диапазона значений или текстовой строки, включенной в указанный параметр
(множество). - ПараметрыКоманднойСтроки
- Задает параметры командной строки, которые используются с указанной командой.
- /?
- Отображение справки в командной строке.
Урок 6 по cmd — обзор цикла for командной строки |
В этой статье мы рассмотрим использование цикла for в командной строке, который, в отличии от аналогичных конструкций в других языках программирования, тут носит немного другой характер. Сперва, немного лирики…
В былые времена программирование носило совсем другие цели нежели теперь. Это теперь царит разнообразие различных языков: хочешь, пиши на php, хочешь, постигай вершины Delphi, в общем, все в изобилии и на любой вкус. Столь стремительный рост возможностей и средств для программирования затронул структуру и характер новых языков. Так, когда я еще проходил в школе на уроках информатики язык Pascal, то цикл использовался в основном для выполнения групповых математических задач: нахождение суммы чисел n-количества и групповое умножение. Теперь, ситуация немного другая, ведь помимо простой математики приходится работать с файлами, папками, объектами и коллекциями. И тут рождаются новые разновидности цикла:
В командной строке цикл един, но с помощью ключей можно менять структуру его применения: работа с файлами, с каталогами, банальный перебор значений или текстовых строк.
В этой статье мы рассмотрим общую структуру цикла командной строки, так сказать – сделаем краткий обзор. По ходу материала я буду давать ссылки на остальные статьи с описанием, уже узких примеров применения, и так, начнем…
Основной синтаксис применения следующий:
for итератор do (оператор)
Итератор – отвечает за ход выполнения. Тут определяется и условия и количество выполнения заданных операторов. Тут могут находиться как одна, так и несколько команд, которые можно объединить в одну цепочку, конвейер или группу (внутри скобок). Как и в стальных языках программировать, итератор содержит переменную инициализации (начальное значение), или же набор различных элементов – диапазон значений, группа файлов или папок.
На переменные инициализации распространяются следующие правила:
- Они существуют только в теле цикла командной строки
- В качестве имени нельзя использовать слово, например, myVar, а только латинские буквы в диапазоне от а до z или от А до Z, например %%А, %%В или %%С. Если вы используете цикл не в сценарии, а в окне консоли, то ставится только один символ %.
- Названия переменных итератора чувствительны к регистру символов, то есть, %%a и %%A будут отличаться.
Как я уже сказал, цикл в командной строке может изменять логику работы с помощью ключей, а именно:
for/D %%имя_переменной in (набор_каталогов) do оператор – как вы уже догадались, данный синтаксис применяется для групповой работы с каталогами. Об этом свидетельствует ключ /D (directory). Как и в случае с файлами, тут можно указывать шаблонный формат или список.
for /R %%имя_переменной in (набор_файлов) do оператор – данный синтаксис используется для групповой работы с подкаталоги, о чем говорит параметр /R. С его помощью можно задать путь к папке, а потом задать список и шаблон для файлов, в результате, мы можем обработать все документы заданного типа в заданном диске или папке.
Примеры работы с корневыми и вложенными папками рассмотрены в статье «Урок 8 по CMD«
for /L %%имя_переменной in (начало, шаг, конец) do оператор – отвечает за перебор значений. Параметры в круглых скобках задают начальное значение, шаг (может быть как положительным, так и отрицательным) и конечное значение.
for /F %%имя_переменной in (источник) do оператор – анализ текстовых файлов, строк и вывод команд. Данный синтаксис позволяет анализировать как содержимое файла, так и заданный текст. Плюс, можно задать параметры для анализа, например, число обрабатываемых строк, разделители и комментарии.
Примеры обработки текстовых строк рассмотрены в статье «Урок 9 по CMD«
for %%имя_переменной in (набор_файлов) do оператор – данный синтаксис применяется для групповой работы с файлами. Тут %%имя_переменной является переменной инициализации, которой будет присваиваться значение, заданное в “набор_файлов”, например, путь к заданному файлу. Так, набор_файлов может быть одной строкой определяющей группу документов по шаблону, или списком строк, разделенных пробелами.
Примеры работы с файлами и данными рассмотрены в статье «Урок 7 по CMD«
Спасибо за внимание. Автор блога
5- Переменные среды Windows
Windows позволяет вам создать переменные среды, данные переменные будут глобальными переменными, которые можно использовать в любых файлах batch.
В Windows выберите:
Здесь вы можете создать переменную среды для текущего user, или переменную среды системы (system environment variable), который можно использовать любым user.
Например, я создаю переменную среды с названием MY_ENVIRONMENT_VARIABLE и значением “My Environment Variable Value!”.
И можно использовать только что созданную переменную среду в файле batch.
testEnvVariable.bat
@echo off
echo %MY_ENVIRONMENT_VARIABLE%
pause
Операторы перехода
Командный файл может содержать метки и команды GOTO перехода к этим меткам. Любая строка, начинающаяся с двоеточия :, воспринимается при обработке командного файла как метка. Имя метки задается набором символов, следующих за двоеточием до первого пробела или конца строки. Приведем пример.
Пусть имеется командный файл следующего содержания:
После того, как в этом файле мы доходим до команды
его выполнение продолжается со строки
В команде перехода внутри файла GOTO можно задавать в качестве метки перехода строку :EOF, которая передает управление в конец текущего пакетного файла (это позволяет легко выйти из пакетного файла без определения каких-либо меток в самом его конце).
Также для перехода к метке внутри текущего командного файла кроме команды GOTO можно использовать и рассмотренную выше команду CALL:
При вызове такой команды создается новый контекст текущего пакетного файла с заданными аргументами, и управление передается на инструкцию, расположенную сразу после метки. Для выхода из такого пакетного файла необходимо два раза достичь его конца. Первый выход возвращает управление на инструкцию, расположенную сразу после строки CALL, а второй выход завершает выполнение пакетного файла. Например, если запустить с параметром «Копия-1» командный файл следующего содержания:
то на экран выведутся три строки:
Таким образом, подобное использование команды CALL очень похоже на обычный вызов подпрограмм (процедур) в алгоритмических языках программирования.
Как экранировать символ?
В командном языке Windows существует некоторый набор символов с высоким приоритетом, которые всегда трактуются как спецсимволы. К ним, в частности, относятся:
- Операторы перенаправления ввода-вывода <, >, >>.
- Оператор конвейера |.
- Операторы объединения команд ||, & и &&.
- Оператор разыменования переменной %…%.
В случае если символ, относящийся к одному из таких операторов, должен быть включен в вашу команду в его литеральном смысле, вас ждут определенные неожиданности. Например, при выполнении вот такой строки
echo The ratio should be up to 10%. |
символ процента будет «съеден» интерпретатором, который решит, что это попытка вывода значения какой-то переменной. В случае со знаком процента решение довольно хорошо известно и состоит в удвоении этого символа:
echo The ratio should be up to 10%%. |
после чего все заработает так, как надо. Однако в других случаях все менее очевидно. Рассмотрим командный сценарий, который генерирует незатейливый HTML-файл:
@echo off set OUTPUTFILE=%1 echo<html> >%OUTPUTFILE% echo<head> >>%OUTPUTFILE% echo<title>This is a greeting page</title> >>%OUTPUTFILE% echo</head> >>%OUTPUTFILE% echo<body> >>%OUTPUTFILE% echoHello World! >>%OUTPUTFILE% echo</body> >>%OUTPUTFILE% echo</html> >>%OUTPUTFILE% |
К сожалению, при попытке запуска этого «чуда инженерного разума» нас постигнет неудача в виде сообщения об ошибке
> was unexpected at this time.. Не очень эстетично, зато дешево и практично. Слово «надежно» я пропустил умышленно…
Итак, все же (в предположении, что надругательства над NTFS не было) – как? Внимательный читатель должен был заметить в предыдущем разделе, что при обращении к переменным %0 — %9 можно использовать префикс
который нам как раз мог бы помочь.> "%PROGRAMFILESSHORT%" |
Этот и другие модификаторы можно использовать и с любой другой формой цикла for, подробнее о которых можно узнать из:
Как создать BAT файл в Windows 7, 10
Этой записью мы продолжаем серию материалов о командной строке. В данной записи вы узнаете о том, как создать BAT файлик и как его использовать.
Что представляет из себя BAT файл
BAT файл (также известный как пакетный файл или батник) это текстовый документ с расширением . BAT в котором записаны команды, которые надо выполнить при помощи командной строки. При запуске такого файла запускается программа CMD, которая считывает команды с этого файла и последовательно выполняет их.
При помощи BAT файлов можно автоматизировать многие процессы. К примеру, при помощи BAT файла можно выполнять запуск прог, резервное копирование файлов, архивацию данных и многое другое.
Создание BAT файла
Создать BAT файлик очень просто. Для этого достаточно запустить любой простой текстовый редактор, к примеру «Блокнот», ввести команды и сохранить с расширением BAT.
Все после этого в папке, которую мы указали при сохранении файла, появится BAT файл. Чтобы запустить его достаточно дважды кликнуть по нему мышью.
Обращаю ваше внимание, что при сохранении bat файла в поле Тип файла следует указать «все файлы». А то может сохраниться как обычный текстовый документ.
Ещё вы можете запустить выполнение BAT файлик из командной строки. Для этого достаточно ввести его адрес.
Если вы хотите продолжить редактирования BAT файла, к примеру, добавить в него новые команды, для этого надо снова открыть BAT файлик при помощи текстового редактора. Это удобно делать при помощи контекстного меню.
Щёлкните правой клавишей мышки по BAT файлу и выберите пункт «Изменить». После чего запустится редактор Блокнот, в котором вы сможете отредактировать ваш BAT файл.
Видео о том, как создать файл с расширением bat
Команда Batch | Результат | Версии Windows, | ||||||||||
доц | Показывает или изменяет Расширение файла (например, .txt или .jpg) | XP | Vista | 7, 8, 10 | ||||||||
AT | . Запускает программу команды или в определенное время; Затем вступил в «Запланированные задачи» | XP | Vista | 7 | ||||||||
Атриб | Отображения или атрибуты файла изменений (e..грамм. Размер модификации, дата модификации, местоположение хранилища) | XP | Vista | 7, 8, 10 | ||||||||
CACLS | Отображения или изменения Acls (Access REMSISS) для файлов | или изменения Acls (доступ к файлам | или изменения (доступ к файлам | или изменения (доступ к файлам | или изменения (доступ к файлам | или изменяют. | XP | Виста | 7, 8, 10 | |||
вызова | извлекает пакетный файл в другой | XP | Виста | 7 , 8, 10 | ||||||||
кд | Переключение в другой каталог или другую папку | XP | Виста | 7, 8, 10 | ||||||||
CHCP | Отображает или изменяет текущую кодовую страницу, таблицу символов или карту символов | XP | 900 04 7, 8, 10 | |||||||||
ChDir | Изменяет каталог или отображение его имени | XP | Виста | 7, 8, 10 | ||||||||
CHKDSK | Проверяет носитель данных на наличие ошибок | XP | Виста | 7, 8, 10 | ||||||||
Chkntfs | Отображает или изменяет проверку передачи данных при запуске системы | XP | Vista | 7, 8, 10 | ||||||||
| . Возможны диалоги выбора C/D, включая возвращаемое значение | шифр | дает возможность кодировать каталоги (в разделах NTFS-типа) или для отображения, лежащие в основе кодирующего | XP | Vista, | 7, 8, 10 | ||||||
ЦБС | Удаляет все содержимое экрана | XP | Виста | 7, 8, 10 | ||||||||
CMD | Запускает подсказка | XP | Виста | 7, 8, 10 | ||||||||
cmstp | позволяет устанавливать профили в менеджере соединений | XP | Vista, | 7, 8 , 10 | ||||||||
цвет | Изменение цвета фона текущей панели 90 008 | XP | Виста | 7, 8, 10 | ||||||||
комп | Сравнивает содержимое двух или более файлов | XP | Виста | 7, 8, 10 | ||||||||
компактные | Отображает или изменяет сжатие файлов в разделах NTFS типа | XP | Виста | 7, 8, 10 | ||||||||
конвертировано | приводы Преобразует FAT в NTFS | XP | Виста | 7, 8, 10 | ||||||||
скопировать | дает возможность копирования файлы | XP | Vista | 7, 8, 10 | ||||||||
90 005 Cscript | Запускает интерпретатор VBScript / JScript | XP | Виста | 7, 8, 10 | ||||||||
даты | Дисплеи и адаптирует системную дату / время | XP | Вист | 7, 8, 10 | ||||||||
дефрагментация | позволяет дефрагментировать диски | XP | Вист | 7, 8, 10 | ||||||||
дель | Удаляет отдельные файлы | XP | Виста | 7, 8, 10 | ||||||||
реж | Отображает все содержимое каталога | XP | Vista | 90 005 7, 8, 10 | ||||||||
DISKCOMP | Сравнивает содержимое двух разных дисков | XP | Виста | 7, 8, 10 | ||||||||
DiskPart | позволяет администрировать операторов данных непосредственно на панели | XP | Vista | 7, 8, 10 | ||||||||
Dement | ||||||||||||
Dempor | ||||||||||||
| ||||||||||||
9000 | ||||||||||||
пакеты образов Windows могут быть перечислены, установлены, удалены, настроены или обновлены. |
|
| 7, 8, 10 | |||||||||
DOSKEY | Создает макросы, напоминает команды, введенные ранее, и редактирует ввод команды | XP | Виста | 7, 8, 10 | ||||||||
driverquery | Показывает драйвер для устройств, установленных на компьютере | XP | Виста | 7, 8, 10 | ||||||||
эхо | Отображает уведомления внутри панели, а также поворачивать дисплей команды включения и выключения | XP | Виста | 7, 8, 10 | ||||||||
endlocal | Завершает сеанс, начатый setlocal | X P | Виста | 7, 8, 10 | ||||||||
Стирание | Удаляет один или несколько файлов | XP | Виста | 7, 8, 10 | ||||||||
ERRORLEVEL | Показывает ли команда успешно или нет (0 означает, что да, не 1 ни в коем случае) | XP | Виста | 7, 8, 10 | ||||||||
EventCreate | Входит в журнал событий | XP | VISTA | 7, 8, 10 | ||||||||
XP |
|
| ||||||||||
Eventtriggers | Основной или конфигурации | 000 0009 . существует |
| |||||||||
сУЩЕСТВУЕТ | Проверяет, является ли файл | XP | Vista, | 7, 8, 10 | ||||||||
выход | Закрывает пакетный файл или быстрое | XP | Виста | 7, 8, 10 | ||||||||
расширить | распаковывает сжатые файлы и папки | XP | Виста | 7, 8, 10 | ||||||||
Сравняет различные данные и отображает различия | XP | Vista | 7, 8, 10 | |||||||||
| ||||||||||||
. Вводя символы | XP | Vista | 7, 8, 10, | |||||||||
Findstr | Поиск строк в пределах файла, т. Д.грамм. В имени файла или в текстовом тексте | XP | Vista | 7, 8, 10 | ||||||||
для | Создает для () петля, которая для повторных заправочных команд. Внутри кронштейнов | XP | Vista | 7, 8, 10 | ||||||||
Формат |
| 8999999999999999009 . Виста 7, 8, 10 | ||||||||||
Fsutil | Отображает и конфигурирует свойства файловой системы | XP | Виста | 7, 8, 10 | ||||||||
ftp | Позволяет загружать и скачивать файлы через FTP (протокол передачи файлов), например.грамм. на сервер | XP | Vista | 7, 8, 10 | ||||||||
FTYPE | Дисплей | 999999999999999999 7, 8, 10 | ||||||||||
Getmac | Отображает MAC -адреса (идентификатор устройства) для сетевых адаптеров (локальный или дистанционный | 7, 8, 10 | ||||||||||
GOTO | позволяет прыгать до определенной точки в рамках пакетного файла |
| Vista | 9000 7, Vista 9000 | 9000 7, Vista | 9000 7, 10 |||||||
gpresult | Отображает рекомендации группы, которые используются на компьютере или для конкретного пользователя | XP | Виста | 7, 8, 10 | ||||||||
Gpupdate | позволяет руководящим принципам группы обновлений | XP | Виста | 7, 8, 10 | ||||||||
GRAFTABL | Отображение специальных символов в графическом режиме | XP | Виста | 7, 8, 10 | ||||||||
помощь | Отображение всех команд CMD внутри панели | XP | Виста | 7, 8, 10 | ||||||||
имя хоста | Показывает имя компьютера | XP | Vista | 7, 8, 10 | ||||||||
ic ACLS | позволяет отображать, изменять, защищать или получить ACLS и контроль доступа для файлов и каталогов |
|
| 7, 8, 10 0008 | ||||||||
If , 8, 10 0008 | ||||||||||||
If , 8, 10 0008 | ||||||||||||
If , 8, 10 0008 | ||||||||||||
. | позволяет интегрировать условия внутри пакетных файлов, так же, как с JavaScript, например | XP | Vista, | 7, 8, 10 | ||||||||
IPCONFIG | Настройки настройки IP сети | XP | Vista | 7, 8, 10 | ||||||||
IRFTP | . Vista | 7, 8, 10 | ||||||||||
этикетка | 900 05 Меняет обозначение носителя данных | XP | Виста | 7, 8, 10 | ||||||||
лесоруб | администрирует сервис «Журналы и оповещения производительности» | XP | Виста | 7, 8, 10 | ||||||||
LPR | позволяет отправлять задания на печать на принтер в сети | XP |
|
| ||||||||
MkDir | создает каталог | XP | Vista, | 7, 8, 10 | ||||||||
ММС | извлекает панель управления | XP | Vista | 7, 8, 10 | ||||||||
Режим | Конфигурирование системных интерфейсов и устройств | XP | Vista |
| XP
| Виста 7, 8, 10 | ||||||
| Mountvol Создает, удаляет или перечисляется точку монтирования для носителя данных | XP | Виста | 7, 8, 10 | ||||||||
двигаться | переименовывает или перемещает файлы или каталоги | XP | Виста | 7, 8 , 10 | ||||||||
openfiles | Позволяет отображать или разделять файлы или директорию IES, которые были открыты |
|
| 7, 8, 10 | ||||||||
MSIEXEC | Установки.MSI-пакеты (MSI-файлы также называют установщика Windows файлы пакета) | XP | Виста | 7, 8, 10 | ||||||||
нетто | администрирует и отображает сетевые услуги | XP | Виста | 7, 8, 10 | ||||||||
Netsh | Управление и настройка компонентов сети с помощью подсказки | XP | Виста | 7, 8, 10 | ||||||||
NetStat | соединений Отображение TCP-IP, и их статус | XP | Виста | 7, 8, 10 | ||||||||
nslookup | Запрашивает DNS-сервер | XP |
|
| ||||||||
NTBackup | Запуск NTBackup через CommandLine / начинается Бесшумный | XP |
|
| ||||||||
путь | Отображает или устанавливает Путь поиска для программы выбран | XP | Vista | 7, 8, 10 | ||||||||
| Проверка подключения к выбранному IP -адресу | . | Виста | 7, 8, 10 | ||||||||
пауза | пакетный файл в настоящее время запуска останавливается и панель обеспечивает сообщение «Нажмите любую клавишу» | XP | Виста | 7, 8, 10 | ||||||||
Запускает монитор производительности для Windows | XP | Vista | 7, 8, 10 | |||||||||
Ping | 9009 ||||||||||||
Ping | с этим XP | Виста | 7, 8, 10 | |||||||||
печать | печатает текст на основе файла | XP | Виста | 7, 8, 10 | ||||||||
prncnfg | После запуска CScript, информация о конфигурации для принтера могут быть отображены или изменены | XP |
|
| ||||||||
prndrvr | После запуска cscript драйверы принтера могут быть удалены Айед, добавлены или удалены | XP |
|
| ||||||||
prnjobs | После запуска CScript задания на печать в очереди могут отображаться, остановить или повторен | XP |
|
| ||||||||
PRNMNGR | После начала CSCRICT, принтеры или принтеры могут быть добавлены или стандартный принтер. | |||||||||||
prnport | После запуска cscript можно создавать, удалять или перечислять порты принтеров. | XP |
|
| ||||||||
проворная | Изменяет подсказку (например, «Доброе утро!» Вместо «Нажмите любую клавишу») | XP | Виста | 7, 8, 10 | ||||||||
-й | удаляет каталог |
|
| 8, 10 | ||||||||
восстановить | позволяет извлекать читаемые файлы из поврежденного оператора данных | XP | Vista | 7, 8, 10 | ||||||||
Рег | XP | Vista | 7, 8, 10 900 08 | |||||||||
regsvr32 | .Файлы DLL и .ocx и библиотеки программ могут быть зарегистрированы в реестре | XP | Vista | 7, 8, 10 | ||||||||
Rem | XP | Vista | 7, 8, 10 | |||||||||
rename | . Виста | 7, 8, 10 | ||||||||||
заменить | файлы могут быть заменены или переписаны с этой командой | XP | Vista, | 7, 8, 10 | ||||||||
сброс сеанса | Сеансы можно разделить с помощью сброса | XP | Виста | 7, 8, 10 | ||||||||
RmDir | Удаляет каталог | XP | Виста | 7, 8, 10 | ||||||||
| -й удаляет каталог |
| XP
| Виста 7, 8, 10 | ||||||||
| RSM Съемные носители (е.грамм. CD-ROMS) можно администрировать или управлять | XP |
|
| ||||||||
Schtasks | Запланированные TASKS на текущем или резиновом компьютере. | XP | Vista | 7, 8, 10 | ||||||||
Secedit | . XP | Виста | 7, 8, 10 | |||||||||
набор | позволяет читать и удалять переменные внутри оперативного | XP | Виста | 7, 8, 10 | ||||||||
выключение | Компьютер может быть зарегистрирован Ed Out, перезапущенный или отключен | XP | Vista | 7, 8, 10 | ||||||||
Сорт | Сортирует ток с током. | XP | Vista | 7, 8, 10 | ||||||||
СТАРЬ | Некоторые Window | 7, 8, 10 | ||||||||||
subst | С помощью этой команды можно указать путь к метке диска (т.грамм. «C:») | XP | Vista | 7, 8, 10 | ||||||||
SystemInfo | Информация о системе конфигурации компьютера. XP | Виста | 7, 8, 10 | |||||||||
Taskkill | Используется немедленно закрыть активные процессы | XP | Виста | 7, 8, 10 | ||||||||
TaskList | извлекает все активные задачи и процессы | XP | Виста | 7, 8, 10 | ||||||||
tcmsetup | телефон клиент может быть установлен с этим | XP | Vista | 900 04 |||||||||
телнета | Telnet соединение может быть установлено с этим | XP |
|
| ||||||||
TFTP | С TFTP, файлы на сервере TFTP могут быть переданы | XP |
|
| ||||||||
время в | Устанавливает или отображает систему | XP | Виста | 7, 8, 10 | ||||||||
Тайм -аут | Выбранный период времени может быть установлен, в котором ничего не произойдет | Vista | 70009 | Vista | 9000 7, Vista 9000 9000 4000 7, | . | ||||||
заголовок | Заголовок окна подсказки может быть blished с этим | XP | Виста | 7, 8, 10 | ||||||||
дерево | Графическое отображение структуры файла | XP | Виста | 7, 8, 10 | ||||||||
Тип | содержание текстовых файлов могут отображаться с этим | XP | Виста | 7, 8, 10 | ||||||||
вер | текущая версия операционной системы могут быть отображены | XP | Vista, | 7, 8, 10 | ||||||||
проверить | Проверяет правильно ли файлы записаны на носитель данных | XP | Vista 9000 8 | 7, 8, 10 | ||||||||
VOL | Метка и серийный номер носителя данных могут быть отображены с этим | XP | Vista | 70008
| 9999999 70008
|
|
|
|
| 9 |
|
| 8, 10
команда /? | Команда людей | Показывает помощь для команды | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| bitsadmin Wget или завитка | Загрузок удаленного файла | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Certutil -hashfile имя_файл MD5 | md5sum имя_файла | Возвращает контрольную сумму MD5 имя_файла | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
кд | PWD | Отображение текущего каталога | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
каталог CD | каталог CD | Изменения текущий каталог на указанный один | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ЦБС | четкие | очищает экран | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
копия | сП | Копирует файл или файлы из исходного пути к цели путь | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
дата | Дата | Отображает дату или устанавливает ее на основе ввода пользователя | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DEL | RM | Удаление файла или файл | 974764747474747474764764764764764764764764764764764764764764764764764764764764764764764764764764769н. отображает список файлов и каталогов в текущем каталоге | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
эхо | эхо | отображает текст на экране | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
выхода | возврата | Выход из сценария или подпрограммы | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
выход | выход | закрывает в командной строке или терминал | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FC | дифференциала | Сравнивает содержимое двух файлов | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
находка "строка" имя_файла | grep "строка" имя_файла | Поиски 926 55 file_name для строки | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Findstr "String" file_name | GREP "Строка" file_name | Поиск File_Nam *) сделать что-нибудь | для элемента в наборе файлов*; делать; что-нибудь; done | Сделать что-то для каждого файла в наборе файлов | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
for /F %A in ('command') сделать что-то | `command` | Возвращает вывод команды 90 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
для /L %A in (first,increment,last) сделайте что-нибудь | для элемента в `seq first increment last`; делать; что-нибудь; Готово | запускается в первой и отсчет на . Приращение , пока он не достигнет Последний | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FORFILES | Найти | 8 | . % переменной% «==» значение»( , если [ "переменная"= "значение"], а затем | Сравнивает два значения | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| IPCONFIG | Ifconfig отображает информацию IP- | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| мкр | MkDir Создает новые папки | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| mklink пер -s | Создает символическую ссылку больше | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| более | Отображает один экран вывода за раз | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
перемещение | mv | 90 004 Перемещает файл или файлы с исходного пути на целевой ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pause | read -p "Нажмите любую клавишу для продолжения" | Приостанавливает выполнение скрипта, пока пользователь не нажмет кнопку
Пакетные команды MS-DOSПакетные команды MS-DOSПакетные команды MS-DOSКнопка Opus или функция горячей клавиши могут быть установлены на MS-DOS Batch Режим функции .Функция в этом режиме запускается так, как будто это .bat пакетный файл, и он может использовать команды MS-DOS, ветвление и логические инструкции, а также запускать внешние программы, предназначенные только для запускаться из командной строки.
На приведенном выше снимке экрана показан пример простой пакетной функции MS-DOS. Этот использует инструкцию MS-DOS dir для создания списка каталогов текущей исходной папки. Использование перенаправления > символ, список каталогов будет сохранен в файле по пути назначения названный в честь текущей исходной папки.
Разрушение функции,
Когда вы запускаете пакетную функцию MS-DOS, Opus фактически создает временную пакетный файл на диске и записывает в него ваши инструкции перед его вызовом. Если вы должны были посмотреть на пакетный файл, созданный вышеуказанной функцией, вы бы увидели что-то вроде следующего:
@echo off
Несколько команд модификаторы относятся конкретно к пакетным функциям MS-DOS:
См. команду ссылка на модификатор для полного описания модификаторов команды.
Сводка команд, связанных с пакетом | Центр суперкомпьютеров ОгайоВ этом разделе представлены две группы команд, связанных с пакетной обработкой: команды, которые выполняются на узлах входа в систему для управления вашими заданиями, и команды, которые выполняются только внутри пакетного сценария. Здесь описаны только самые распространенные варианты. Многие из этих команд более подробно обсуждаются в других разделах этого документа. У всех есть онлайн-страницы руководств (пример: При описании использования команд мы используем квадратные скобки [как здесь] для обозначения необязательных аргументов. Скобки не являются частью команды. Важное примечание. Пакетные системы на Pitzer, Ruby и Owens полностью независимы. Обязательно отправляйте свои задания на узел входа в систему для системы, в которой вы хотите, чтобы они выполнялись.Весь мониторинг, пока задание находится в очереди или выполняется, также должно выполняться в той же системе. Результат вашей работы, конечно же, будет виден из обеих систем. Команды для управления заданиямиЭти команды обычно запускаются из узла входа в систему для управления пакетными заданиями. Пакетные системы в Pitzer и Owens полностью разделены, поэтому команды должны выполняться в системе, в которой должно выполняться задание. партия Команда
сальник Команда
сканцель Команда
выходной файл slurmСуществует выходной файл, в котором хранятся stdout и stderr для выполняющегося задания, который можно просмотреть, чтобы проверить вывод выполняющегося задания. По умолчанию он находится в каталоге, в котором было отправлено задание, и имеет формат: .slurm- Не удаляйте и не изменяйте выходной файл, созданный во время выполнения задания. Это может отрицательно сказаться на вашей текущей работе. контроль Команда
sуправление удержанием/отпусканием Команда
оценка времени начала Команда
Команды, используемые только внутри пакетного задания
Эти команды можно использовать только внутри пакетного задания. mpexec Используйте команду
pbsdcp Команда Варианты:
Примечание. В режиме сбора, если файлы на разных узлах имеют одинаковое имя, они перезапишут друг друга. В приведенном выше примере информация об окончании учета заданийЧтобы просмотреть общую статистику задания, в конце используйте команду: scontrol показать задание = $ SLURM_JOB_ID
Команда DOS: ATTRIBКоманда DOS: ATTRIBATTRIBТип: Внешний (3.0 и выше) Синтаксис: ATTRIB [d:][путь]имя файла [/S] Назначение: Обсуждение С помощью команды ATTRIB вы можете изменить атрибут чтения/записи файла или набор атрибут архива. Если вы используете эту команду, чтобы указать файл как только для чтения, к файлу можно получить доступ, но нельзя изменить или удалить. Если файл имеет атрибут -R, его можно как читать, так и записывать в (это называется чтение/запись). Если файл имеет атрибут +R, его можно читать из, но не для записи (например, вы можете использовать текстовый процессор для Смотреть на него, но не изменять его). ПРИМЕЧАНИЕ.Если вы пытаетесь стереть файл после того, как вы установили его атрибут только для чтения (+Р), DOS отобразит слова ACCESS DENIED. Прежде чем вы сможете стереть файл ты необходимо использовать команду ATTRIB, чтобы изменить атрибут файла на чтение/запись (-Р). Команды BACKUP, RESTORE и XCOPY могут использовать атрибут архива. Ты сможешь используйте опции +A или -A для выборочного резервного копирования с помощью BACKUP команда. Ты также можно использовать эти параметры для выборочного копирования с помощью команды XCOPY. Можно использовать подстановочные знаки (? и *). Однако вы НЕ МОЖЕТЕ использовать каталог имя вместо имени файла, чтобы изменить атрибуты всех файлов в каталог. В DOS версии 5 и выше вы можете скрыть файлы данных, применяя +H (скрытый) атрибут.-H удаляет скрытый атрибут. +S (система) и -S варианты обычно используется программистами для скрытия и отображения командных файлов, используемых только по ДОС. После применения скрытого или системного атрибута к файлу он не будет появиться в список каталогов, если вы специально не запросите его с параметром /A параметр команда СПРАВОЧНИК. Опции +R — используйте опцию +R, чтобы сделать файл доступным только для чтения. Файлы только для чтения могут быть читаются, но их нельзя изменить или удалить. -R — используйте параметр -R, чтобы изменить атрибут защиты файла обратно к нормальный (чтобы его можно было прочитать, изменить или удалить). +A — Используйте опцию +A, чтобы установить атрибут ARCHIVE для файла. Когда +А используется, это помечает файл как доступный для архивирования при использовании в Команды BACKUP или XCOPY. -A — Используйте параметр -A, чтобы отключить атрибут АРХИВ. +H — в версиях DOS с 4 по 6 используйте параметр +H, чтобы установить СКРЫТЫЙ атрибут файла, чтобы он не отображался в каталоге листинг. -H — Используйте параметр -H, чтобы отключить атрибут СКРЫТЫЙ. +S — в версиях DOS после версии 4 используйте параметр +S, чтобы установить СИСТЕМА атрибут файла. При использовании параметра +S файл помечается как а командный файл, используемый только DOS. Файл не появится в каталоге листинг. Этот атрибут обычно зарезервирован для программистов. -S — используйте параметр -S, чтобы отключить атрибут SYSTEM. /S — используйте переключатель /S для установки атрибутов найденных подкаталогов. внутри указанный путь. Примеры Следующая форма команды устанавливает атрибут только для чтения для
файл
ПРОДАЖ87.TXT: ПРОДАЖИ87 Чтобы установить атрибут архива для файла LETTER3.DOC, который находится в \ПИСЬМА на диске B введите attrib +a b:\letters\letter3.doc После установки бита архива такие команды, как XCOPY, могут
избирательно действовать
на них (используя переключатель BACKUP или XCOPY /M). За дополнительной информацией,
Ссылаться на
разделы команд BACKUP и XCOPY. attrib *.* Параметры атрибутов для всех файлов в текущем каталоге быть отображается. Если, например, вы работали в каталоге \LETTERS на дискете в дисководе B, ATTRIB будет отображать что-то вроде этого: A B:\LETTERS\LETTER3.TXT Этот дисплей показывает, что были найдены три файла и что первые два было бит архива установлен. Второй файл также помечен как доступный только для чтения.
Вернуться кУказатель команд Easy DOSОсновные команды пакетных файлов — Сумасшедший программистМы закончили со всеми основными предварительными концепциями, такими как переменные, операторы, условные команды, команды ветвления и цикла.Теперь в этом руководстве рассматриваются основные команды пакетного файла, которые обычно используются для усложнения пакетного файла.Подкоманды, переключатели, параметрыПрежде чем перейти к командам, я хотел бы дать краткий обзор частей команд. Команда в пакетной программе может состоять из подкоманд и переключателей. Подкоманды — это вспомогательные команды, сопровождаемые основными командами. Эти подкоманды обычно служат для повышения точности результата, который мы ищем.Как и в приведенном ниже примере, Эта команда используется для вывода списка всех пользователей на компьютере. Как вы можете видеть здесь, «net» — это основная команда, а подкоманда «users» используется для сужения результатов. Переключатели позволяют нам запускать различные варианты команд. Возможно, вы видели переключатели в команде «set», такие как p,a. Мы также можем передавать в пакетный файл параметры, которые являются ничем иным, как аргументами командной строки. Доступ к этим параметрам можно получить по номеру по порядку.Синтаксис для передачи параметров из командной строки показан ниже. Имя-пакетного файла [список параметров]
new HelloWorld! Здесь «новый» — это имя пакетного файла, а «Helloworld!» — аргумент, который я передам через командную строку в программу. Параметры разделены пробелами и запятыми, если бы я поставил пробел или запятую, Hello и world будут рассматриваться как два разных параметра.Итак, здесь hello и world рассматриваются как один параметр. Попробуйте приведенную ниже программу для доступа к параметрам через командную строку. Программа №1: Для доступа к параметрам, указанным из командной строки @echo off компакт диск echo Добро пожаловать в программу %1% Пауза
Вывод Color CommandЭта команда используется для установки цвета переднего плана, а также фона окна командной строки.Цвет определяется шестнадцатеричными цветовыми кодами. На изображении ниже перечислены некоторые цветовые коды. Цвет переднего плана — это не что иное, как цвет текста, который установлен по умолчанию 7, а цвет фона установлен по умолчанию 0. | Цвет background-color-codeforeground-color-code |
Программа №2: Изменение переднего плана и фона окна подсказки
@echo off цвет ЭД эхо Круто! Вы изменили цвет пауза
@эхо выкл цвет ED эхо Потрясающе! Вы изменили цвет.Есть много ситуаций, когда вы будете взаимодействовать с пользователем, отображая ему список опций и получая входные данные и выводя диалоги состояния. В таких случаях вам может понадобиться очистить содержимое экрана. Вы можете использовать эту команду, чтобы стереть экран в текущих окнах и начать с нового окна. Синтаксис Команда заголовкаКогда вы дважды щелкнете пакетный файл и запустите его, вы, возможно, заметили, что имя в строке заголовка — это путь к cmd.exe, расположенную в папке system32 вашего каталога Windows. Если вы хотите изменить название на желаемое, используйте эту команду. Команда title устанавливает заголовок для текущего окна. Синтаксис @echo off title Учебники для сумасшедших программистов echo Добро пожаловать в Мое окно. Пауза клс эхо Вы заметили, что предыдущее сообщение стерлось? эхо, вы правы, я использовал там команду «cls» pause
Обратите внимание, что заголовок окна был изменен на текст, который мы дали в программе. Теперь сразу после нажатия любой клавиши выполняется команда «cls», и текст в приглашении стирается. Попробуйте! пакет: запланированные команды для выполнения в пакетной очередиПакет: выполнение команд по расписанию в очереди пакетов
Команда для отображения руководства по пакету ПРОЛОГЭта страница руководства является частью Руководства программиста POSIX.Реализация этого интерфейса в Linux может отличаться (см. соответствующую страницу руководства Linux для получения подробной информации о поведении Linux), или интерфейс может быть не реализован в Linux.НАЗВАНИЕпакет — расписание команд, которые будут выполняться в пакетной очереди ОБЗОРпартия ОПИСАНИЕУтилита пакет должна считывать команды со стандартного ввода и запланировать их выполнение в пакетной очереди. Это должно быть эквивалент команды:
где очередь b — это специальная очередь на , специально для пакетные задания.Пакетные задания должны быть отправлены в пакетную очередь без ограничений по времени и должна управляться системой с использованием алгоритмов, основанных на неуказанные факторы, которые могут меняться при каждом вызове пакета . Пользователям разрешается использовать пакет , если их имя отображается в файле /usr/lib/cron/at.allow . Если этот файл не существует, файл /usr/lib/cron/at.deny должен быть проверен, чтобы определить следует ли запретить пользователю доступ к пакету .Если ни один файл не существует, только процесс с соответствующими привилегиями будет разрешено представить работу. Если только at.deny существует и пуст, глобальное использование должно быть разрешено. at.allow и файла at.deny должны состоять из одного имени пользователя за строку. ОПЦИИНикто. ОПЕРАНДЫНикто. СТАНДАРТНЫЙ ИНСтандартный ввод должен быть текстовым файлом, состоящим из допустимых команд. на язык команд оболочки, описанный в Язык команд оболочки . ВХОДНЫЕ ФАЙЛЫТекстовые файлы /usr/lib/cron/at.allow и /usr/lib/cron/at.deny должен содержать ноль или более имен пользователей, по одному в строке, пользователей, которым, соответственно, разрешен или запрещен доступ к на и партия коммунальные услуги. ПЕРЕМЕННЫЕ СРЕДЫСледующие переменные среды должны влиять на выполнение партия :
АСИНХРОННЫЕ СОБЫТИЯПо умолчанию. СТАНДАРТНЫЙКогда стандартный ввод является терминалом, подсказки неуказанного формата для каждая строка пользовательского ввода, описанная в разделе STDIN могут быть записаны на стандартный вывод. СТДЕРРСледующее должно быть записано в стандартную ошибку, когда задание было успешно отправлено:
где дата должна быть эквивалентна по формату выводу:
Дата и время должны быть скорректированы таким образом, чтобы они отображались в часовой пояс пользователя (согласно TZ переменная). Ни это, ни предупреждающие сообщения о выборе интерпретатор команд, считаются диагностикой, которая изменяет статус выхода. Диагностические сообщения, если таковые имеются, должны быть записаны в стандартную ошибку. ВЫВОДНЫЕ ФАЙЛЫНикто. РАСШИРЕННОЕ ОПИСАНИЕНикто. СТАТУС ВЫХОДАДолжны быть возвращены следующие выходные значения:
ПОСЛЕДСТВИЯ ОШИБОКРабота не должна быть запланирована. Следующие разделы носят информационный характер. ПРИМЕНЕНИЕ ИСПОЛЬЗОВАНИЕМожет быть полезно перенаправить стандартный вывод в пределах указанного команды. ПРИМЕРЫ
ОБОСНОВАНИЕРанние предложения описывали партию и совершенно отдельно. с по даже хотя историческая модель рассматривала его почти как синоним на -кб .Количество были добавлены функции для списка и управления пакетной работой отдельно от те в в . На дальнейших размышлений было решено, что пользы от этого нет заслуживают изменения на исторический интерфейс. Параметр -m был включен в эквивалентную команду at . потому что это историческая практика отправлять результаты отправителю по почте, даже если все результат работы перенаправляется. Как поясняется в ОБОСНОВАНИИ для в ключевое слово теперь отправляет задание на немедленную выполнение (после планирования задержки), несмотря на некоторые исторические системы, где на сейчас было бы рассмотрено ошибка. БУДУЩИЕ НАПРАВЛЕНИЯНикто. АВТОРСКОЕ ПРАВОЧасти этого текста перепечатаны и воспроизведены в электронном виде из IEEE Std 1003.1, издание 2003 г., стандарт для информационных технологий — Portable Operating System Interface (POSIX), The Open Group Base Спецификации, выпуск 6, авторское право (C) 2001–2003 гг. |