Начнем с простого, нам нужен BAT или CMD файл, который мы и будем менять и запускать.
Ну, во первых - лучше CMD, почему - потому, что там больше возможностей. Единственное - CMD файлы не будут работать на старых 9х системах. Более подробно можно поискать в Интернете по поиску.
Начало.
Открываем блокнот и пишем:
echo offtitle Hello World!color 0aclsecho.echo. Hello World!echo.pauseСохраняем сие произведение под именем "hello world.cmd" на рабочий стол и смело запускаем.
В итоге получаем черное окошечко с зеленым приветствием и предложением нажать любую кнопку.
Что же мы сделали? Отвечаю:
echo off - отключение вывода команд файла при запуске, если не писать, то в окошке будет виден весь ход выполнения файла;title - имя окошка;color - цвет фона и текста;cls - очистка окна, т.к. туда уже успело попасть приветствие интерпретатора и команда echo off;echo - сама по себе команда вывода сообщений, в случае если она пишется с точкой, делает следующее - все дальнейшие пробелы после точки участвуют в выводе, т.е. таким образом можно сделать отступ от края окна и добиться лучшей читаемости сообщений, а если просто использовать echo с точкой и не написать больше ничего, то выведется пустая стока;pause - команда остановки и ожидания действия пользователя, если ее не использовать, то окно само закроется и вы ничего не увидите, если нужно выполнять файл в автоматическом режиме (через планировщик задач), то ее использовать нельзя, т.к. файл не закроется по факту выполнения и соответственно система выдаст ошибку.pause > NULL" - в этом случае пользователь не увидит в окне сообщения типа "Для продолжения нажмите любую клавишу . . .".Подробнее о цветах:
0 = Черный1 = Синий2 = Зеленый3 = Голубой4 = Красный5 = Лиловый6 = Желтый7 = Белый8 = Серый9 = Светло-синийA = Светло-зеленыйB = Светло-голубойC = Светло-красныйD = Светло-лиловыйE = Светло-желтыйПишем лог
В тех случаях, когда файл исполняется в автоматическом режиме и у нас нет возможности наблюдать за ходом его исполнения, полезно записывать т.н. события в отдельный текстовый файл, на тот случай, если произошел сбой и нужно понять на каком месте программа "запнулась".
Опять-таки есть два варианта, либо мы пишем с эха (echo), либо из запущенного чего-нибудь еще, о чем позже.
Чтобы осуществить вывод эха в файл достаточно после текста вывода поставить символ > и имя файла, в который будет сообщение выводится, пример:
echo. Hello World! > hw.logили же
ping 127.0.0.1 > ping.logесли же нужно дописать уже имеющийся файл, то ставим два знака >> :
echo. Batch roools! >> hw.logЗапускаемся
Как правило, основное назначение батч файлов - это запуск чего либо в требуемой нам последовательности.
Если то, что мы запускаем находится в той же папке, что и наш батч файл, то запускаем просто по имени:
programm.exeЕсли программа лежит где-то еще на диске, тогда нужно указывать путь до нее:
"C:\My Programm\programm.exe"Обратите внимание, если в пути к файлу есть пробелы, то использование кавычек обязательно!
Так же, на современных ОС, часто бывает нужно запустить программу от чьего-то имени, в т.ч. от имени администратора, тогда есть несколько вариантов:
Я в большинстве случаев использую именно "psexec.exe".
Если же нужно запустить из одного батч файла другой, и при этом, чтобы процесс продолжился после его завершения, нужно использовать команду call:
call second.cmdБезопасность
А если батч файл запускается таким образом, что его могут открыть пользователи и посмотреть в него, а там обнаружить Ваш СуперПуперСекретныйПароль, то советую использовать программки типа:
Вносим записи в реестр
Довольно-таки часто нужно с помощью батч файла внести изменения в реестр, - это элементарно (как говорил один профессор), для начало нужно создать файл реестра, а потом применить его:
regedit /S izmeneniya.regили же, если нужно его сформировать динамически, то сначала создаем его, применяем, а потом чистим за собой:
echo REGEDIT4 > wua.tmp.regecho [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate] >> wua.tmp.regecho "TargetGroupEnabled"=dword:00000001 >> wua.tmp.regregedit.exe /S wua.tmp.regdel /Q wua.tmp.regОстановим время! или поставим на паузу
Так же часто нужно притормозить выполнение батч файла, будь то в конце или же в процессе его выполнения, причины могут быть разными, и тут простой командой pause не обойтись.
echo Wscript.Sleep 15000> sleep.vbsstart /w wscript.exe sleep.vbsdel sleep.vbsДля начала создается файл sleep.vbs или как Вы его там назовете, при том, временной интервал в 15000 соответствует 15 секундам, т.е. указывается в миллисекундах. Далее запускаем его через встроенную в систему wscript.exe (Windows Scripting), а потом удаляем.
Вообще, с помощью WSH можно реализовать множество интересных вещей, но об этом я буду писать отдельно.
Работаем в сети
Бывает, но редко, когда нужно подключить сетевой диск, в процессе выполнения батч файла, эта задача связанна с запуском программ с серверов или компьютеров по сети, но при этом в батч файле нельзя прописать запуск типа "\\172.16.0.5\shara\programm.exe", поэтому делаем следующее:
net use Y: \\172.16.0.5\shara /USER:domain\username passwordY:\programm.exeПеременные и их использование
А нужны ли они, - я говорю да, нужны. Когда? Ну, скажем в случае, когда нужно обработать сегодняшнюю дату в формат, удобный при использовании в именах файлов. Например создадим файл Date.cmd:
echo offtitle Datecolor 0eSETLOCALclsecho.set arcver=%DATE%echo. System date - %arcver%set arcver=%arcver:~-10%set arcver=%arcver:~0,5%set arcver1=%arcver:~0,2%set arcver2=%arcver:~3,2%set arcver=%arcver2%.%arcver1%set arcver=%arcver:.=-%echo. Date for file - %arcver%echo.pauseНа выходе получим следующее:
System date - 06.04.2012Date for file - 04-06Кстати, команда SETLOCAL нужна для того, чтобы переменные, которые Вы задаете, не попала в системные, и сбросилась по завершению батч файла.
Или же, если нужно работать с длинными путями к файлам, или же если пути могут измениться, а перебирать весь батч в поисках изменившихся связей процедура не для слабонервных:
rem Directory for archiveset ARCHDIR=Group Of Corem Directory of archiveset FROMDRIVE=cset FROMDIR=1C Base\1SBDBxcopy "%FROMDRIVE%:\%FROMDIR%\*.*" "z:\%ARCHDIR%-%arcver%\" /S /E /V /Q /H /R /K /YПодведем итог:
set%FROMDRIVE% - обрамляя знаками процентаset /?Интерактивный интерфейс?
Случалось, бывало, нужда возникала задать вопрос пользователю или самому себе, при выполнении батч файла. Сделать можно, например, выключить удаленно компьютер в сети, к которому мы имеем доступ. Создаем файл kill pc.cmd:
@echo offtitle Kill PCcolor 0bclsSET Choice=SET /P Choice= Kill PC IP: ?clsecho.echo. Killing PC IP %Choice%echo.psshutdown.exe -r -f -t 1 \\%Choice%echo.color 0becho Wscript.echo " 5 sec. Pause" > sleep.vbsecho Wscript.Sleep 5000 >> sleep.vbsCScript.exe //Nologo sleep.vbsdel /F /Q sleep.vbsПри этом используется одна из утилит набора PsTools, который можно свободно скачать с сайта technet.microsoft.com
После запуска нужно будет ввести IP адрес компьютера, а на результат работы можно будет посмотреть в течении 5 секунд, после того как команда на выключение будет отправлена на сетевой компьютер.
В принципе, таким образом можно и свой выключить, если вписать 127.0.0.1.
Можно сменить IP адрес компьютера с помощью cmd файла
Очень редки случаи, но были. В файле прописываем:
netsh int ip del address name=External addr=10.104.140.23netsh int ip add address name=External addr=10.104.140.21 mask=255.0.0.0В принципе, сделать можно многое, тут все в фантазию упирается.
В моем случае есть множество наработок, но о них - в отдельной теме.