Извечная проблема: с чего начать.
Можно описать трюки, дать объяснение, но интересно это будет еденицам.
Самое главное, не интересно будет мне.
Можно разлить воду и написать полную документацию от начала до конца. Часть #1, Часть #2 и когда человек дочитает до части 3, он забудет, что читал в 1ой части.
Этого я тоже делать не буду.

Этой страничкой я помогу тем, кто только начинает, дам инструмент и покажу, как им пользоваться.
Это будет не полно, но функционально.
Начав движение, можно начать двигаться и изучать то, что неизвестно.
Но что-то важное для самого себя уже можно будет сделать самостоятельно, а это важно.
Итак, что мы рассматриваем.
Наша платформа: Windows.
В качестве экспериментальной платформы будем использовать Windows XP, как наиболее популярную, что не отменяет применимость рассматриваемых здесь техник и для Windows 2000 и для Windows Vista.
Пуск - Выполнить - cmd.exe
Открылось черное окошко.
Дыра в потусторонний мир Windows Explorer.
Здесь мы и будем работать.
Чем мы будем здесь заниматься ?
Мы будем автоматизировать свою собственную работу.
Чем принципиально отличается shell скриптинг от программирования, так это тем, что нет необходимости в компиляции программы, то есть в переводе ее в машинный код. Все что будет нами написано в скрипте, можно написать руками... ну, хорошо, не все..

Базовый набор средств, без примеров, потому что примеры, вы сможете запустить у себя сами и посмотреть, как это работает в живую.
Терминология
Термин
Описание
ДиректорияОна же папка, она же поддиректория, абсолютно идентичные термины. Скажу честно, я иногда путаюсь. Папка короче, но термин "подпапка", звучит как-то ненормально, а поддиректория громозко и то и другое, вызывает желание воспользоваться другим термином.
Текущая директорияКогда работаем, то мы обязательно находимся в какой-то папке.
Именно она и называется текущей. Папка выше из которой наша появляется, называется родительской.
Например: c:\Windows\System32\SvcHost.exe
c:Имя диска.
Буквы жестких дисков считаются от C:, потому что A: и B: зарезервированы за дисководами.
\Означает корневую папку, если слева от нее имя диска или ничего.
WindowsПапка "Windows", выходящая из корневой. (см. выше)
\Между папками, обозначает, что возможно будет указано что-то еще обозначающее объект. (папку или файл)
System32Папка, выходящая из Windows
\Между папками, обозначает, что возможно будет указано что-то еще обозначающее объект. (папку или файл)
SvcHost.Exe Файл, находящийся в папке "System32"
.
Точка. Обозначает текущую директорию. Наше текущее местонахождение всегда можно обозначить точкой.
..
Две точки. Родительская директория. Из корневой папки выйди, естественно, нельзя.

Базовый набор
Команда
Описание
Call
Если из .cmd файла, вызывается другой, то исполнение первого на этом прекращается.
Чтобы этого не происходило можно вызвать исполнение через "call", тогда управление вернется на следующую за "call" команду.
Еще можно переходить на метку внутри .cmd файла, тогда это выглядит, как вызов .cmd который начинает исполнение с этой метки.
Echo
Это команда вывода на экран текста. Вы пишите Echo Hello World. И получаете на экране Hello World
Setlocal
Когда начинаете активно работать с переменными окружения, например path, то эта команда позволяет сохранить текущее окружение, чтобы потом восстановить и одним махом отменить все изменения. Полезно использовать, если вы делаете вызов .cmd файла из .cmd файла через call.
Вызов .cmd через cmd /c имяфайла.cmd можно не предварять, потому что запуск cmd создаст новую копию окружения для cmd.exe, который вызовет имяфайла.cmd и после его отработки, процесс cmd.exe вслед за ним прекратит свое существование вместе со всей средой, порожденной для него средой
Endlocal
Восстанавливаем сохранение, сделанное в предыдущей команде.
For
Самая гибкая команда. Именно при помощи нее можно делать то колдовство, которое и называется shell программированием.
О ней я расскажу подробнее ниже.
Goto
Переход на метку, абсолютный переход. Разрушает сразу и начисто вложенность круглых скобок, объединяющих операторы.
If
Условный оператор.
Сравнивает строки, числа от -2147483647 до 2147483646, позволяет проверять наличие файлов.
Pause
Выводим сообщение типа: "Press any key to continue" и ждем нажатия любой кнопки.
Rem
Ремарка. Все что после Rem игнорируется до конца строки.
Shift
Сдвиг. Распространяется на параметры командной строки. Делая первым второй, вторым третий, третьим четвертый и так далее. Самый первый теряется.
Однако через %* всегда можно получить строку целиком.

Еще одна важная деталь, которая нам понадобится это перенаправление вывода.
В нашем распоряжении экран и клавиатура. Два средства вывода информации и ее ввода.
Из языка C к нам пришло 3 названия: Stdin, Stdout, Stderr.
Очевидно везде наличие "Std" - это от "Standart", то есть стандартное, а дальше:

In/Out/Err
ОписаниеНомер(хендл (от англ. handle))
In
Ввод
0
Out
Вывод
1
Err
Вывод ошибок
2

Программы могут принимать данные и выдавать их. Прием идет через стандартное устройство ввода (Stdin), вывод идет через стандартное устройство вывода (Stdout), а если какие ошибки возникают, то ошибки выводятся на стандартное устройство вывода ошибок (Stderr).
Так как экран один, то стандартное устройство вывода и ошибок одно и тоже - экран.
На глаз, никак не определить, что было выведено через stdout, а что через stderr.
Эти каналы можно между собой замыкать и копировать один в другой, для этого есть специальные операторы(значки), которые позволяют вывод одного передать на вход другого.

Оператор
Описание
>
Перенаправление Stdout в файл.
Если файла не было, то он создастся;
Если файл был, то он обнулится;
Если файл создать не получится, то на Stdout будет выдана ошибка, о невозможности создания.
>>
Перенаправление Stdout в файл.
Если файла не было, то он создастся;
Если файл был, то в конец ему добавится, то что должно;
Если файл создать не получится, то на Stdout будет выдана ошибка, о невозможности создания или записи.
>&
Перенаправление Stdout в файл, который уже открыт ранее
Знак "&" означает, что далее будет идти порядковый номер открытого файла.
Идея заключается в том, чтобы данные из нескольких потоков завернуть в один поток.
Наиболее распространенный это заворачивание Stdout и Stderr в один файл.
Делается это таким образом:

find /i "abcd" blablabla.lala >TempFile.txt 2>&1

Поиск строки "abcd" в файле "blablabla.lala", так как такого файла у вас скорее всего нет, то будет выдана ошибка на stderr: "File not found - blablabla.lala"
Ну а теперь более последовательно:
Find - это утилита операционной системы, которая умеет искать строку в файле или переданном ей потоке.
Все что идет после Find - это командная строка, которая передается ей после обработки командным ппоцессором. Он скользит своим взором до тех пор, пока не натыкается на знаки переопределения потоков. На этом передача командной строки для Find заканчивается и начинаются манипуляции, которые указаны опереаторами.

В первую очередь отрабатывается ">" - создается файл "TempFile.txt", если не существовал или обнуляется, если там что-то было. И на него замыкается стандартное устройство вывода.

Потом дальше он натывается на ">" смотрит вокруг и видит слева от него "2", что означает Stderr, а справа "&" с числом "1". Поэтому он Stderr перенаправляет на Stdout, а stdout у нас уже перенаправлен в TempFile.txt.

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

<
Подмена Stdin значениями из файла
<&
Перенаправление существующих хендлов. Пренаправляется тот, что справа в тот, что слева.
|
Вывод одной команды перенаправляется на вход другой команды.
Самое мощное применение, которое я видел это

без вопросов

удаление всех файлов в текущей папке.
Echo Y|del *.*
Обычно del *.* спрашивает уверены ли вы в том, что собираетесь удалить все файлы. И предлагает на выбор Y(да) или N(нет).
Здесь команда Echo Y - осуществляет вывод буквы "Y", которая через перенаправляение тут же подсовывается вопрошающей del *.*.
После чего эта команда победно удаляет все файлы.

И последнее достаточно важное, без чего нам не обойтись - это команды, которые позволяют манипулировать файлами, папками и прочими весьма важными для нас аспектами среды. Список не полный. За полным списком можно обратиться к встроенной помощи Windows или в командной строке набрать "HELP", после чего по каждой команде можете получить более подробную справку дав ей в качестве параметра "/?".

Например:
"Dir /?" - показывает подсказку по синтаксису команды "Dir"
Команды Shell
Оператор
Описание
CD
CHDIR
Изменить текущую папку на указанную.
CLS
Очистка экрана.
COPY
Копирование файла. Копируем ОТКУДА КУДА.

Например:
Copy c:\autoexec.bat %temp%

Вместо "%temp%" подставится переменная окружения "temp"
или

Copy c:\autoexec.bat c:\autoexec.bat.cpy

Копирует файл autoexec.bat из корня c:\ туда же, но под другим названием: "autoexec.bat.cpy".
Если захотите проверить, не забывайте, что копировать в корень C:\ может только администратор или тот, кому дали право на создание, запись и модификацию файлов.

DATE
Показывает и ждет ввода новой даты.
Если в командной строке задать "/t", то команда только покажет текущую дату.
DEL
ERASE
Удаляет файл.
Если в командной строке задать маску (например: *.* или ??.jpg), то соответственно будут удалены все файлы с любым именем и любым расширением или файлы имеющие в названии два любых символа и с расширением jpg
DIR
Просмотр файлов в текущей директории(папке)
В качестве параметра может принимать папку, содержимоей которой надо показать и маску файлов, которые надо показать.
ECHO
Вывод текстового сообщения.
EXIT
Выход из .cmd файла;
Выход из cmd shell, если в нем были
LABEL
Устанавливает текущую метку тома.
Любой диск как-то можно называться. Адресовать его по имени не получится, но тем не менее, при отработке некоторых команд, оно обображается, что порой бывает удобно.
MD
MKDIR
Создать папку.
MOVE
Перенос файла из одного места в другое.
Либо переименование.
Особенностью этой команды является, то что при переносе в рамках одной логической буквы диска, копирования и удаления не происходит. Изменяется только техническая информация какой папке принадлежит файл. Особенно это явно ощущается на огромных по размеру файлах. Перемещение происходит мгновенно.
PATH
Команда управляющая переменой окружения "Path".
Эта переменная отвечает за поиск файлов, не найденных в текущей папке, она содержит список путей, где стоит поискать файл удовлетворяющий запрошенному имени, перед выводом ошибки о невозможнсти запуска файла или команды.
PAUSE
Преостановление исполнения .cmd файла до нажатия какой-либо клавиши.
POPD
Быстро восстанавливаем текущую рабочую директорию
PROMPT
Приглашение.
Когда запускаете cmd и у вас открывается окно shell. То вы видите пришлашение, что-то вроде: C:\WINDOWS>
Командой prompt можно управлять этим приглашением.
PUSHD
Сохраняем текущую папку в памяти, чтобы потом командой POPD, можно было быстро вернуться назад, после серии переходов между папками.
RD
RMDIR
Удаление папки.
Удаляется только, если она пустая. Есть ключик, который на ее заполненность закрывает глаза и рубит все что внутри.
Весьма полезно при чистки кеша Internet Explorer.
REM
Комментарий
REN
RENAME
Переименование. Переименовываем ЧТО во ЧТО.
SET
Команда управляющая переменными окружения. Также может применяться для небольших целочисленных числовых операция, типа: плюс, минус, разделить, умножить и так далее.
SETLOCAL
Запоминаем состояние всех текущих переменных окружения, в том числе и режимы выполнения .cmd файла.
SHIFT
Сдвиг адресующих индексов (%1,%2,%3...%9) параметров командной строки .cmd файла.
Иногда применяется для доступа к параметру следующему за 9м, последним, который можно прямо адресовать из .cmd файла.
TIME
Показывает и ждет ввода нового времени.
Если в командной строке задать "/t", то команда только покажет текущее время.
TYPE
Показывает на Stdout содержимое указанного в команной строке файла
VER
Показывает текущую версию.
VOL
Показывает текущую метку тома.
Которая может быть установлена командой Volume
БУКВА ДИСКА:
Если вы указываете букву диска, то вы приказываете системе сменить текущий диск на указанный.
Обычно за этим следует последовательные команды CD, ну а там, что планировали дальше.
Настало время подготовить нашу экспериментальную среду, на которой мы будем тренироваться. Часть 2: Подготовка среды >>>>>


Детальная информация на английском языке.

Command shell overview. (http://technet.microsoft.com)
Using batch files. (http://technet.microsoft.com)
Using command redirection operators. (http://technet.microsoft.com)
Hosted by uCoz