Командные файлы Windows часть 1

Общие сведения о командном процессоре Windows.

Командные файлы (скрипты, сценарии, батники) – это обычные текстовые файлы с расширением .bat или .cmd, строки которых представляют собой специальные команды командного процессора (интерпретатора команд ) и/или имена исполняемых файлов. Командный процессор – это специальная программа, являющаяся обязательным элементом почти любой операционной системы, главным назначением которого, является предоставление пользователю средства для выполнения определенных программ без их компиляции и создания исполняемых файлов. Для операционных систем DOS и Windows9X в качестве интерпретатора команд использовался командный процессор command.com, для всех остальных ОС семейства Windows ( NT/2k/XP/Vista/7/8 и старше) – cmd.exe. Несмотря на непрерывное совершенствование средств создания и выполнения сценариев с использованием объектно-ориентированных языков, обычная командная строка и простые командные файлы, по-прежнему остаются основным инструментом для выполнения рутинных действий, диагностики сетевых проблем, автоматизации процессов резервного копирования и т.п. При всех недостатках реализации командного процессора в Windows, достойной альтернативы ему нет, и очевидно в ближайшем будущем, не будет.

Справочную информацию по конкретной команде можно получить, указав ее название в качестве параметра команды HELP:

HELP Имя команды

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

CHCP номер страницы

– использовать кодовую страницу 866 (DOS)

– использовать кодовую страницу 1251 (WINDOWS)

Внешний вид окна CMD. EXE (консоли Windows) можно изменить с помощью команды

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

– черные символы на белом фоне.

– светло-желтые символы на черном фоне.

– подсказка для команды COLOR.

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

– перенаправление вывода

– перенаправление ввода

Для вывода справки не на экран а, например, в файл с именем help.txt, можно использовать следующую команду:

Простейший пример перенаправления ввода:

cmd.exe < commands.txt – командный процессор не будет ожидать ввода команд с клавиатуры, а считает их из файла commands.txt

При запуске командного процессора можно указать конкретную команду в качестве аргумента командной строки:

cmd.exe /C HELP FOR – выполнить команду HELP FOR и завершиться (ключ /C)

cmd.exe /K HELP FOR – выполнить команду HELP FOR и перейти в режим ожидания дальнейшего ввода команд (ключ /K)

Подробную справку по использованию cmd.exe можно получить, введя в качестве аргумента ключ /?

завершится сообщением HELP Executed, а выполнение

где неверно задан аргумент команды HELP ( uIF ), завершится сообщением HELP Not Executed

Файлы с расширением .bat или .cmd в среде Windows стандартно открываются командным процессором аналогично примеру, где список команд считывается не с устройства ввода, а из текстового файла.

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

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

переменная – имя переменной среды.

строка – строка символов, присваиваемая указанной переменной.

Например, командная строка

создает переменную myname, принимающую значение Vasya.

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

После выполнения данной команды, поиск исполняемых файлов будет выполняться в каталоге C:Windows, и, если результат неуспешен, в C:windowssystem32

Допустим Вам необходимо выполнить программу myedit.exe, размещенную в каталоге C:NewProgs

Если в командной строке не задан полный путь, а только имя исполняемого файла – myedit.exe

то сначала будет выполняться поиск файла myedit.exe в текущем каталоге, и если он не будет найден – в каталогах, список которых задается значением переменной PATH. Символ ; является разделителем элементов в списке путей поиска. Если в приведенном примере, текущим каталогом не является C:NewProgs, и в остальных каталогах, заданных значением переменной PATH. нет исполняемого файла myedit.exe, то запуск приложения myedit.exe завершится ошибкой. Однако, если есть необходимость его запуска без указания полного пути и при любом значении текущего каталога, можно модифицировать значение переменной PATH

изменит текущее значение PATH, добавив каталог C:NewProgs в начало списка.

Выполнение команды SET без параметров позволяет получить текущие значения переменных окружения:

NUMBER_OF_PROCESSORS=1 – количество процессоров

OS=Windows_NT- тип ОС

Path=C:WINDOWSsystem32;C:WINDOWS;C:Program FilesFar – путь поиска исполняемых файлов.

PATHEXT=. COM;EXE;BAT;CMD;VBS;VBE;JS;JSE;WSF;WSH – расширения для исполняемых файлов.

PROCESSOR_ARCHITECTURE=x86 – архитектура процессора.

PROCESSOR_IDENTIFIER=x86 Family 6 Model 8 Stepping 1, AuthenticAMD – идентификатор процессора.

PROCESSOR_LEVEL=6 – уровень (номер модели) процессора.

PROCESSOR_REVISION=0801 – версия процессора.

ProgramFiles=C:Program Files – путь к папке “Program Files”

SystemDrive=C: – буква системного диска.

SystemRoot=C:WINDOWS – каталог ОС Windows.

Значение некоторых переменных по команде SET не выдаются. В основном, это переменные, принимаемые значения которых динамически изменяются:

%CD% – Принимает значение строки текущего каталога.

%DATE% – Принимает значение текущей даты.

%TIME% – Принимает значение текущего времени.

%RANDOM% – Принимает значение случайного десятичного числа в диапазоне 1 -32767.

%ERRORLEVEL% – Принимает текущее значение кода завершения задачи ERRORLEVEL

%CMDEXTVERSION% – Принимает значение версии командного процессора CMD. EXE для расширенной обработки команд.

%CMDCMDLINE% – Принимает значение строки, которая вызвала командный процессор.

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

Значения, принимаемые переменными окружения, могут быть расширены с помощью специального признака – символа ” ~ “, что получить частичное значение (расширение переменной), или изменить его заменой какой-либо части. Примеры использования расширений переменных рассмотрены ниже.

В состав дополнительных средств Windows 2000/XP, и в комплект дистрибутива Windows 7 входит специальная утилита для формирования пользовательских и системных переменных окружения SetX, позволяющая записывать имена и значения переменных в реестр . Ссылка “Список команд CMD Windows” в конце статьи.

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

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

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

и запускаем его на выполнение следующей командой:

params.bat FIRST second “two words”

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

Для проверки наличия каких-либо входных параметров, передаваемых командному файлу, можно проверить, является ли значение переменной %1 пустым:

if “%1” EQU “” goto error

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

REM пробел текст

Строки, начинающиеся с REM пробел, командным процессором игнорируются.

REM будет выводиться только результат их выполнения.

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

Переходы и метки.

В командных файлах можно использовать команды условного перехода, меняющие логику их работы в зависимости от выполнения определенных условий. Для иллюстрации приемов использования условных переходов создадим командный файл, целью которого будет присвоение заранее определенной буквы для съемных носителей, в качестве которых будут использоваться флэш-диски. Условия таковы – есть 2 флэш-диска, один из которых должен быть виден в проводнике как диск X: а второй – как диск Y: независимо от того, в какой порт USB они подключены и какие буквы присвоены им операционной системой. Будем считать, что реальные диски могут быть подключены как F: или G: Опознавание дисков будем выполнять по наличию файла с определенным именем (лучше такой файл сделать скрытым в корневом каталоге и назвать его как-нибудь необычно):

:/>  Исправлено: ошибка сети 0x800704cf -

Flashd1.let – на первом диске

Flashd2.let – на втором

Таким образом, задача командного файла заключается в том, чтобы проверить наличие на сменных дисках F: и G: файлов Flashd1.let или Flashd2.let и, в зависимости от того, какой из них присутствует, присвоить диску букву X: или Y:

Для поиска файла на диске воспользуемся командой :

IF EXIST имя_файла команда

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

SUBST X: C: – – создать виртуальный диск X:, содержимым которого будет корневой каталог диска C:

Для решения задачи, создаем командный файл, например setletter.bat, следующего содержания:

IF EXIST G:lashd1.let SUBST X: G:

IF EXIST F:lashd1.let SUBST X: F:

IF EXIST G:lashd2.let SUBST Y: G:

IF EXIST F:lashd2.let SUBST Y: F:

После выполнения этого командного файла у вас появятся диски X: и Y:

Однако, если такой файл выполнить повторно, команда SUBST выдаст сообщение об ошибке – ведь диски X: и Y: уже существуют.

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

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

REM если не существует X: – то перейдем на метку SETX

IF NOT EXIST X: GOTO SETX

REM если существует X: – перейдем на проверку наличия Y:

REM если Y: существует – завершим командный файл.

IF EXIST Y: GOTO EXIT

REM выход из командного файла

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

При выполнении измененного таким образом командного файла, сообщение об ошибке при выполнении SUBST исчезнет.

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

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

В этом же каталоге, создайте второй файл под именем 1.bat, содержащий команду

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

При выполнении командного файла test.bat будет выдано на экран сообщение

Если же в файле test.bat убрать CALL, оставив “1.bat”, то возврат выполняться не будет.

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

SET MYFILE=”Very good 1.bat”

Кстати, используя передачу управления командному файлу, можно организовать его зацикливание. Попробуйте добавить в конец файла test.bat строку:

Выйти из зацикливания командного файла можно по нажатию комбинации CTRL-Break.

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

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

Использование утилит командной строки и командных файлов нередко позволяют решить многие проблемы связанные с повседневной эксплуатацией компьютерной техники. Большинство системных администраторов и грамотных пользователей продолжают ими пользоваться, несмотря на то, что в Windows проявилось новое, более мощное и современное средство управления системой – WMI (Windows Management Instrumentation). Очевидно, не в последнюю очередь, это обусловлено простотой реализации и, тем не менее, – достаточной эффективностью использования командных файлов. Ниже приведены простые примеры с комментариями, которые демонстрируют некоторые возможности и способы применения .cmd и .bat

Своя команда для создания новых файлов.

В составе операционной системы Windows нет специальной команды для создания нового файла, но без нее можно легко обойтись несколькими способами:

Копирование с клавиатуры в файл

COPY CON myfile.txt

При выполнении этой команды данные с клавиатуры (стандартное устройство CON – консоль) будут заноситься в файл myfile.txt. Нажатие клавиши F6 или комбинации CTRL-Z завершит вывод.

При выполнении этой команды будет создан файл myfile.txt, содержащий символ “1”

Комбинация перенаправления ввода и перенаправления вывода:

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

Еще проще использовать команду копирования из фиктивного устройства nul в файл. Использование устройства nul позволяет обойти стандартные операции ввода-вывода, которые для него реально не выполняются.

COPY NUL myfile.txt

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

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

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

copy nul %1

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

nf.bat myfile.txt – создать файл с именем myfile.txt в текущем каталоге.

nf.bat C:myfile.txt – создать файл в корневом каталоге диска C:

Расширение командного файла (.bat) можно не набирать и команда еще больше упрощается:

В тексте командного файла присутствует проверка, задано ли имя создаваемого файла в командной строке (if “%1%” EQU “” goto error), и если не задано – выводится сообщение об ошибке и командный файл завершает свою работу.

В качестве тренировки, попробуйте добавить в этот командный файл проверку на существование файла с именем, указанным в командной строке.

Присвоение съемному диску одной и той же буквы.

Задача заключается в том, чтобы съемный USB диск (флэш диск) был доступен всегда под одной и той же буквой, независимо от того, на каком компьютере он используется и как он подключен. Для ее решения воспользуемся уже упоминаемой выше командой SUBST, но реализуем присвоение новой буквы диску с использованием подстановочного значения переменной %0, создаваемой системой при каждом запуске командного файла.

Выберем для съемного диска желаемую букву, например – X.

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

:/>  Экспорт имя учетной записи power shell sam в csv

Имя диска, с которого был запущен командный файл доступно как переменная %~d0.

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

subst X: %~d0

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

Дополнительное представление о подстановочных значениях переменной %0 можно получить из командного файла следующего содержания:

Создание архива, имя которого содержит дату и время.

Решим следующую задачу – нужно создать архив файлов, находящихся в каталоге C:Program FilesFAR. Имя архивного файла должно состоять из текущего времени (часы.минуты.секунды – ЧЧ. ММ. СС.rar), и помещен он должен в новый каталог, имя которого должно состоять из текущей даты (день.месяц.год – ДД. ММ. ГГГГ). Для архивирования будем использовать архиватор RAR. Формат запуска для создания архива:

a – команда создания архива.

-r – ключ, определяющий архивирование подкаталогов (т.к. в исходной папке есть подкаталоги).

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

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

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

Дата, получаемая из переменной %DATE% при стандартных настройках региональных установок Windows 2000выглядит следующим образом:

Пн 21.01.2005 – День недели(2 символа)-Пробел(1 символ)-дата(10 символов) – всего 13 символов.

В Windows XP/Vista/7 день недели отсутствует, что несколько упрощает структуру даты. Для создания нового каталога в командной строке используется команда

MD имя каталога .

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

В версиях Windows, где в значении принимаемом переменной DATE, отсутствует день недели (3 символа – “Пн “), значение VDATE получится не тем, что требуется. Чтобы не анализировать признаки наличия данного кода, можно воспользоваться и другим вариантом – не пропустить первые 3 символа (~3) от начала строки переменной DATE, а взять 10 символов от конца строки, указав число 10 со знаком “минус” – будет тот же результат – 20.01.2010

Создаем каталог на диске C:, имя которого = текущая дата из переменной VDATE:

После выполнения этой команды на диске C: будет создан каталог с именем 20.01.2005

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

MD %DATE:~-10% – создать каталог, имя которого будет представлено в виде текущей даты ДД. ММ. ГГГГ

Время, получаемое из переменной %TIME% выглядит так :

14:30:59.93 – Часы, минуты, секунды, сотые доли секунды.

Сотые доли – это в имени файла архива, пожалуй, лишнее. Создаем временную переменную VTIME и присваиваем ей текущее время без последних 3-х символов, т.е пропускаем 0 символов от начала и отсекаем 3 символа от конца. Количество пропущенных и отсекаемых символов разделяются запятой:

Теперь VTIME = 14:30:59, но знак двоеточия ( : ) в имени файла использовать нельзя, это специальный символ, использующийся в именах устройств (диск C:). Поэтому, его придется заменить его на любой другой символ, допустимый в имени файла, например, точку. Для замены символов используется знак ” = ”

set VTIME=%VTIME::=.% – заменить в переменной VTIME символ двоеточия на символ точки.

Переменная VTIME примет значение 14.30.59

rar.exe a -r C:%VDATE%%VTIME%.rar “C:Program filesar*.*”

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

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

Общие сведения о командных файлах.
Использование переменных окружения.
Передача параметров командному файлу.
Переходы и метки.
Примеры:
    – Создание новых файлов
    – Присвоение съемному диску одной и той же буквы.
    – Создание поколений архивов по датам и времени.
    – Создание архивов – более сложный вариант.
    – Выполнение команд по расписанию.
    – Запуск и остановка служб.
    – Выдача на экран значения ERRORLEVEL.
    – Диалог с пользователем.
    – Задержки в командных файлах.
    – Поиск в локальной сети компьютеров с запущенным приложением.
    – Поиск компьютеров с запущенным приложением по списку.
    – Выключение компьютеров по списку, созданному на основе сетевого окружения.
    – Работа с оконными приложениями.

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

Общие сведения о командных файлах.

Командные файлы – это текстовые файлы с расширением bat или
cmd, строки которых представляют собой команды или имена исполняемых
файлов.
Когда вы запускаете на выполнение командный файл, то управление получает
командный процессор операционной системы (часто называемый интерпретатором
команд), который последовательно считывает и интерпретирует строки командного
файла. Для Windows9X этим занимается command.com, для WinNT/2K/XP –
cmd.exe. Строки командных файлов могут содержать команды самого
процессора команд (FOR, GOTO, IF и т.п.) или имена исполняемых модулей
(net.exe, regedit.exe, win.com и т.п.).
В операционных системах WinNT/2K/XP можно получить краткую справку по
составу команд с помощью командной строки:

или по конкретной команде:

Для выдачи текста справки не на экран, а
в файл,
можно воспользоваться перенаправлением вывода. При использовании
командной строки, стандартным
устройством ввода является клавиатура, а устройством вывода – дисплей,
однако эти устройства можно переназначить с использованием символов
перенаправления

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

Для вывода потока данных команды в файл help.txt
командная строка будет следующей:

Для вывода справки по команде GOTO в файл goto.txt:

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

переменная Имя переменной среды.

строка Строка символов, присваиваемая указанной переменной.

добавит переменную myname, принимающую значение Vasya.

Можно получить значение переменной в программах и командных
файлах, используя ее имя, заключенное в знаки процента (%). Например
команда

выведет на экран слово time, а команда

выведет на экран значение переменной time, принимающей значение
текущего времени.

добавит в путь поиска исполняемых программ, описываемый значением
переменной PATH каталог C:myprog

Выполнение команды SET без параметров вызывают выдачу текущих
значений переменных на экран, в виде:

Path=E:WINDOWSsystem32;E:WINDOWS;E:Program FilesFar – путь поиска исполняемых файлов.

PATHEXT=. COM;EXE;BAT;CMD;VBS;JS;WSF;WSH – расширения для исполняемых файлов.

ProgramFiles=E:Program Files – путь к папке “Program Files”

SystemDrive=E: – буква системного диска.

SystemRoot=E:WINDOWS – каталог ОС Windows.

Значение некоторых переменных по команде SET не выдаются. Это переменные, значения которых динамически изменяются :

:/>  Восстановление файловой системы NTFS из RAW | Белые окошки

%CD% – Принимает значение строки текущей директории.

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

Входные параметры для командного файла.

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

В самом командном файле первый параметр будет доступен как переменная %1,
второй – %2 и т.п. Имя самого командного файла доступно как переменная %0.
Для примера создадим командный файл, задачей которого будет выдача на экран значений введенных параметров. Обычно для вывода
текста используется команда

Однако если текст заменить на %1, – то будет выдан первый параметр,
на %2 – второй и т.д.

Создаем файл parm.bat следующего содержания:

parm.bat FIRST second “two words”

В командных файлах можно использовать команды условного перехода, меняющие логику их работы в зависимости от выполнения определенных условий.
Для иллюстрации приемов использования условных переходов создадим командный файл, целью которого будет присвоение заранее определенной буквы диска для
съемных носителей, в качестве которых будут использоваться флэш-диски. Условия таковы – есть 2 флэш-диска, один из которых должен быть виден в проводнике
как диск X: а второй – как диск Y: независимо от того, в какой порт USB они подключены. Будем считать, что реальные диски могут быть подключены как F: или G:
Опознавание дисков будем выполнять по наличию файла с определенным именем (лучше такой файл сделать скрытым в корневом каталоге и назвать его как-нибудь необычно):

Flashd1.let – на первом диске

Flashd2.let – на втором

Т.е. задача командного файла заключается в том, чтобы проверить наличие на сменных дисках F: и G: файлов Flashd1.let или Flashd2.let и, в зависимости от того,
какой из них присутствует, присвоить диску букву X: или Y:

Для поиска файла на диске используем команду

SUBST X: C: – создает виртуальный диск X:, содержимым которого будет корневой каталог диска C:

Создаем командный файл setXY.bat со следующими строками:

После выполнения такого файла у вас появятся диски X: и Y: Но если такой файл выполнить повторно,
команда SUBST выдаст сообщение об ошибке – ведь диски X: и Y: уже существуют.

Желательно обойти выполнение SUBST, если виртуальные диски X: и Y: уже созданы, (или удалять их, используя SUBST с параметром –d перед подключением ).
Модифицируем командный файл с использованием – передачи управления строке пакетного файла по метке.

Метка должна находиться в отдельной строке и начинаться с двоеточия. Сделаем изменения в нашем командном файле, чтобы не возникало сообщений об ошибке:

REM если Y: существует – завершим командный файл.

Сообщение об ошибке SUBST исчезло. Признаки ошибок при выполнении команд можно отслеживать и в самом командном файле, анализируя
переменную , значение которой формируется при выполнении
большинства программ. E RRORLEVEL равно 0, если программа завершилась без ошибок и 1 – при возникновении ошибки. Могут быть и другие значения, если они предусмотрены в выполняемой программе.

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

И файл 1.bat, содержащий команду приостанавливающую выполнение командного файла до нажатия любой клавиши.

При выполнении test.bat будет выдано на экран сообщение

Если же в test.bat убрать CALL , то возврат из файла 1.bat выполняться не будет. Кстати, используя передачу управления
командному файлу, можно организовать его зацикливание. Попробуйте добавить в конец файла test.bat строку:

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

MD C:%VDATE%
После выполнения этой команды на диске C: будет создан каталог с именем 20.01.2005

Время, получаемое из переменной %TIME%:
14:30:59.93 – Часы, минуты, секунды, сотые доли секунды.
Сотые доли – это в имени файла архива, пожалуй, лишнее. Создаем временную
переменную VTIME и присваиваем ей текущее время без последних 3-х символов
set VTIME=%time:~0,-3%
Теперь VTIME = 14:30:59, но знак ” : ” в имени файла использовать нельзя,
поэтому заменим его на точку.
set VTIME=%VTIME::=.%
Переменная VTIME примет значение 14.30.59 Для имени файла сойдет.

rar a -r C:%VDATE%%VTIME%.rar “C:Program filesar*.*”

set VDATE=%date:~3%
md c:%VDATE%
set VTIME=%time:~0,-3%
set VTIME=%VTIME::=.%
rar a -r C:%VDATE%%VTIME%.rar “C:Program filesar*.*”

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

Создание архивов с использованием переменных профиля пользователя.

Этот командный файл создает архивы содержимого папки
“Мои Документы” пользователей Win2K/XP, размещая их в каталоги
C:ARHIVМои документыИмя пользователяДатавремя

Выполнение команд по расписанию.

В WIN2K/XP существует утилита командной строки позволяющая выполнить команду или пакетный файл в указанное время на локальном или удаленном компьютере. Для использования команды AT необходимо, чтобы была запущена служба планировщика
заданий (обычно запущена по умолчанию при установке системы).

\имя_компьютера Имя удаленного компьютера. Если этот параметр опущен,

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

Порядковый номер запланированной задачи. Указывается если нужно отменить уже запланированную задачу с помощью ключа /delete.

/delete Отмена запланированной задачи. Если код задачи опущен,

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

/yes Отмена запроса на подтверждение при отмене всех

время Время запуска команды.

/interactive Разрешение взаимодействия задачи с пользователем,

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

месяца. Если дата опущена, используется текущий день

(например в следующий четверг). Если дата опущена,

используется текущий день месяца.

“команда” Команда или имя пакетного файла.

– Аналог “будильника” , – всплывающие окна с текстом, напоминающие
текущему или указанному пользователю о необходимости
выполнения каких-нибудь действий. Для отправки сообщения пользователю
используем утилиту

AT 13:50 net.exe send * Пора пить кофе

AT \SERVER 13:45 net.exe send Нужно перезагрузить сервер

– Просмотр списка запланированных задач:

– Удаление уже спланированных задач:

AT 3 /DELETE – удаление задачи с номером 3

AT /DELETE /YES – удаление всех задач

“Панель управления” – “Назначенные задания” позволяют просматривать, изменять и удалять созданные командой AT задания.

Остановка и запуск системных сервисов.

Для остановки и запуска служб Win2K/XP из
командной строки используется команда NET. EXE

Возможно использование как короткого, так и полного имени (“Dnscache” – короткое,
“DNS-клиент” – полное имя службы).
Имя службы, содержащее пробелы заключается в двойные кавычки. Пример перезапуска службы “DNS-клиент”

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

Не советую писать фельетоны. Не смешно и ооооооооооочень длинноооооооооооооооооооооо.

Не знаю, что у меня было не так.
Работает так (Windows 7):
——————————————————–
Вызов с параметром из цикла:
Вызывающий bat (запустит бат-файл 4 раза с соотв. параметрами 1,2,3,4):

——————————————————-
Вызов батов с названием, содержащим номер, из цикла:
Вызывающий bat:

Запускаемые bat’ы test_write2.bat, test_write3.bat, test_write4.bat

(или me3, me4 – какое сообщение соответствует проверке данного файла)
——————————————————————