<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3A%D0%A1%D1%87%D0%B0%D1%81%D1%82%D0%BB%D0%B8%D0%B2%D1%8B%D0%B9_%D0%91%D1%83%D0%B4%D0%B8%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA%2FBAT</id>
	<title>Участник:Счастливый Будильник/BAT - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3A%D0%A1%D1%87%D0%B0%D1%81%D1%82%D0%BB%D0%B8%D0%B2%D1%8B%D0%B9_%D0%91%D1%83%D0%B4%D0%B8%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA%2FBAT"/>
	<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%A1%D1%87%D0%B0%D1%81%D1%82%D0%BB%D0%B8%D0%B2%D1%8B%D0%B9_%D0%91%D1%83%D0%B4%D0%B8%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA/BAT&amp;action=history"/>
	<updated>2026-11-05T12:19:45Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://t8.lbstr.eu/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%A1%D1%87%D0%B0%D1%81%D1%82%D0%BB%D0%B8%D0%B2%D1%8B%D0%B9_%D0%91%D1%83%D0%B4%D0%B8%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA/BAT&amp;diff=44957&amp;oldid=prev</id>
		<title>imported&gt;PVE: /* Hello, world! */ викификация</title>
		<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%A1%D1%87%D0%B0%D1%81%D1%82%D0%BB%D0%B8%D0%B2%D1%8B%D0%B9_%D0%91%D1%83%D0%B4%D0%B8%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA/BAT&amp;diff=44957&amp;oldid=prev"/>
		<updated>2020-06-09T15:20:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Hello, world!: &lt;/span&gt; викификация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Recycle}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;BAT&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;батник&amp;#039;&amp;#039;, &amp;#039;&amp;#039;батяня&amp;#039;&amp;#039;, &amp;#039;&amp;#039;[[ватник]]&amp;#039;&amp;#039;, офиц. &amp;#039;&amp;#039;batch file&amp;#039;&amp;#039;) — простонародная замена [[Unix|юниксовому]] bash-у. Суровый, неподатливый, предположительно тьюринг-полный скриптовый язык для [[DOS|MS DOS]], [[OS/2]] и [[Windows]]. Судя по количеству потенциальных конкурентов, которые он пережил — бессмертен.&lt;br /&gt;
&lt;br /&gt;
== История ==&lt;br /&gt;
&lt;br /&gt;
Появился в первых версиях [[DOS]] и с тех пор совсем почти не изменился. Самый обычный такой файл с командами для командной строки, записанными в столбик. Вся последующая история батника — это история попыток его уничтожить.&lt;br /&gt;
&lt;br /&gt;
В OS/2 появился CMD (расширение cmd, иконка точно такая же), имеющий следующие принципиальные отличия:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ERRORLEVEL&amp;#039;&amp;#039;&amp;#039; выставляется после каждой команды, а не только если что-то поломалось. В результате там не болтается код какой-то доисторической ошибки. Бородатые [[си]]шники помнят, что &amp;#039;&amp;#039;&amp;#039;ERRORLEVEL&amp;#039;&amp;#039;&amp;#039; - это тот самый return 0 внутри функции main(). А записывается он в регистр EAX (если под пентиум компилировать)&lt;br /&gt;
* BAT выполнялся DOS-ом (COMMAND.COM), а CMD — командной строкой Windows (cmd.exe). Но в Windows семейства [[Windows/Версии#Ну наконец-то (Windows NT, 1993-наши дни)|NT]] cmd.exe кушает обоих.&lt;br /&gt;
* BAT допиливаться не будет, а CMD — может быть.&lt;br /&gt;
&lt;br /&gt;
Судя по тому, что многие суперэнтерпрайзные проекты до сих пор собираются bat-никами, про это обновление мало кто слышал. Хотя разница ныне только в расширении.&lt;br /&gt;
&lt;br /&gt;
Далее [[Микрософт]]е неустанно пыталась выпилить батник. В [[OS/2]] были REXX скрипты, ныне сохранившиеся только на сайтах олдфагов вроде [[Каганов]]а. В [[Windows/Версии#Windows_98_.281998.E2.80.941999.29|Windows 98]] появился Windows Script Hosting (дикое поделие с невыносимыми скриптами на [[JavaScript|JScript]] и [[Visual Basic|VBScript]], на которых нередко писали back-end для доисторических версий тогда-ещё-просто ASP, а также эпохальный спамовский вирь I Love You), но про них мало кто догадывался. Свято место пусто не бывает, и кодеры напридумывали [[OVER 9000]] скриптовых языков, призванных спасти винду (какое-то время дико спасал [[Perl|ActionPerl]], но были консоли и для [[PHP]]).&lt;br /&gt;
&lt;br /&gt;
В [[Windows 7]] проблему должен был решить Windows PowerShell, радовавший синюшным экраном и поддержкой всего-всего. Увы, из-за идиотcкой политики безопасности при попытке запустить из файла даже [[Копипаста:Hello, world!|Hello World]] система начинала вопить и плеваться непонятными ошибками, погружая кодера в бездну анальной фрустрации.&lt;br /&gt;
&lt;br /&gt;
== Итог ==&lt;br /&gt;
&lt;br /&gt;
Так что старина батник жив до сих пор и умирать не собирается. Несмотря на все его недостатки, он действительно позволяет нехило сэкономить время, особенно если тебе приходится постоянно что-то копировать, заливать, обновлять или перезапускать сервисы. Сабж таки помогает при ваянии всяких (особенно энтерпрайзных) прожектов, завязанных под Windows. То есть, минимальную автоматизацию каких-то действий (скопировать, раз-/заархивировать, поднять/остановить, проверить) под Виндой он таки делает, а в [[95%]] случаев больше и не нужно.&lt;br /&gt;
&lt;br /&gt;
Так что если ты [[программист]] или [[админ]], не ленись писать батники. Лучше напиши их и ленись по полной, пока твою работу делают роботы. Для программиста ознакомление рекомендуется еще и потому, что часто не надо лезть в [[Бездна анальной оккупации|глубокую жопу технологий]], чтобы сделать, напр., загрузчик. Ну, или, чтобы понять, когда сабж не справляется и лезть в жопу таки оправдано. &lt;br /&gt;
&lt;br /&gt;
В том же случае, если батник не справляется, а писать специальную утилиту нет сил или времени — ставь cygwin, или могучий кроссплатформенный скриптовой язык вроде [[Perl]] или [[Python]]. Несмотря на свою интернетовскую популярность, тот же Perl изначально делался именно для того, чтобы расширить фатально узкий bash.&lt;br /&gt;
&lt;br /&gt;
== Hello, world! ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dos&amp;quot;&amp;gt;&lt;br /&gt;
@ECHO OFF&lt;br /&gt;
ECHO &amp;quot;Hello, World!&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И традиционно в одну строку:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dos&amp;quot;&amp;gt;&lt;br /&gt;
@ECHO &amp;quot;Hello, World!&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Плюсы ==&lt;br /&gt;
&lt;br /&gt;
* Запускается по щелчку мышкой, ничего не требует, совместим со всем что есть от Microsoft-а.&lt;br /&gt;
&lt;br /&gt;
* Можно выучить за один день. И сразу что-то написать.&lt;br /&gt;
&lt;br /&gt;
* Чтобы вывести на экране &amp;quot;Нажмите любую клавишу, чтобы продолжить...&amp;quot; и ждать эту клавишу, достаточно написать &amp;#039;&amp;#039;&amp;#039;PAUSE&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* &amp;gt; сбрасывает в вывод в файл. &amp;gt;&amp;gt; дописывает вывод в конец файла. Впрочем, это стандартно для командной строки со времён первых Юниксов.&lt;br /&gt;
&lt;br /&gt;
* Можно вызывать системные функции из DLL-ок. Вот так: &amp;#039;&amp;#039;&amp;#039;%SystemRoot%/system32/rundll32 user32, SwapMouseButton&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Есть nul, в нём нет ничего. Но туда можно перенаправить вывод (и, например, скопировать что-то тайком без появление сообщений в консоли).&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;set /p val =&amp;#039;&amp;#039;&amp;#039; — пользователь вводит переменную.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@echo off&amp;#039;&amp;#039;&amp;#039; — показывать не команды, а только то, что прямо приказано написать через ECHO. Традиционная первая строка многих батников.&lt;br /&gt;
&lt;br /&gt;
* Есть &amp;#039;&amp;#039;&amp;#039;%random%&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Может принимать параметры командной строки!! Лежат в &amp;#039;&amp;#039;&amp;#039;%1&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;%2&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;%3&amp;#039;&amp;#039;&amp;#039; и т.д. А в &amp;#039;&amp;#039;&amp;#039;%0&amp;#039;&amp;#039;&amp;#039; — имя самого батника.&lt;br /&gt;
&lt;br /&gt;
* Некоторые системные вещи реально проще и быстрое сделать на батнике. Например, стартуем/тормозим Windows-сервисы: &amp;#039;&amp;#039;&amp;#039;NET START/STOP/PAUSE %sevicename%&amp;#039;&amp;#039;&amp;#039;. Дико удобно для разработчика интерпрайза, который на них завязан.&lt;br /&gt;
&lt;br /&gt;
* Два вида &amp;#039;&amp;#039;&amp;#039;FOR&amp;#039;&amp;#039;&amp;#039; - FOREACH и по числам. Оба дубовые и неудобные.&lt;br /&gt;
&lt;br /&gt;
== Минусы ==&lt;br /&gt;
&lt;br /&gt;
* Ввиду древности, стандарт (и парсер) дико дубовы. Та же болезнь, что у bash-а: лишний пробел перед знаком равенства породит ошибку.&lt;br /&gt;
&lt;br /&gt;
* Переменные, по сути, не переменные, а макросы. То есть &amp;#039;&amp;#039;&amp;#039;SET reviewer = nomad&amp;#039;&amp;#039;&amp;#039; — это не присвоить текстовое значение переменной, а заменять дальше по тексту все вхождения %reviewer% на nomad. Чтобы присвоить переменной другую переменную, надо писать &amp;#039;&amp;#039;&amp;#039;set /a&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Типов данных нет и в помине. Есть один тип — команда.&lt;br /&gt;
&lt;br /&gt;
* Нет процедур. Да, здесь вам не bash. Если нужна подпрограмма — пиши &amp;#039;&amp;#039;&amp;#039;GOTO&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;:метки&amp;#039;&amp;#039;&amp;#039;, люби ассемблер. Можно, правда, написать &amp;#039;&amp;#039;&amp;#039;call&amp;#039;&amp;#039;&amp;#039;, имя другого батника и параметры. Какое-никакое, а облегчение.&lt;br /&gt;
&lt;br /&gt;
* Нет вложенного &amp;#039;&amp;#039;&amp;#039;IF&amp;#039;&amp;#039;&amp;#039;!! То есть &amp;#039;&amp;#039;&amp;#039;IF&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;ELSE&amp;#039;&amp;#039;&amp;#039; писать можно, а &amp;#039;&amp;#039;&amp;#039;IF&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;ELSE&amp;#039;&amp;#039;&amp;#039; внутри &amp;#039;&amp;#039;&amp;#039;IF&amp;#039;&amp;#039;&amp;#039; - хренушки. Прямо как в доисторических версиях [[Pascal]], так что про структурное программирование забудьте. Любое сложное ветвление требует нетривиальных навыков, которые обычно напрочь теряются в момент перехода от [[Assembler]] к [[Pure C|C]]. Приходится рисовать блок-схему и прыгать через &amp;#039;&amp;#039;&amp;#039;GOTO&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Параметров командной строки всего 9. &amp;#039;&amp;#039;&amp;#039;%10&amp;#039;&amp;#039;&amp;#039; - это &amp;#039;&amp;#039;&amp;#039;%1&amp;#039;&amp;#039;&amp;#039; с ноликом на конце. Хочешь больше — будь добр использовать слово &amp;#039;&amp;#039;&amp;#039;SHIFT&amp;#039;&amp;#039;&amp;#039;, и не раз.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;REM&amp;#039;&amp;#039;&amp;#039; в начале строки комментирует всё, что после — как в старом добром [[Basic]]. А многострочных комментариев в принципе не бывает.&lt;br /&gt;
&lt;br /&gt;
* Уникальный, не имеющий аналогов в мире substring через тильду. Как-то так: &amp;#039;&amp;#039;&amp;#039;%~d1%~p1%~n1.mp3&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;&amp;#039;&amp;#039;&amp;#039;cd %~dp0.&amp;#039;&amp;#039;&amp;#039;&amp;quot; —- текущей папкой становится папка, где лежит скрипт. Правда, понятно?&lt;br /&gt;
&lt;br /&gt;
* Если SCRIPT1 дойдёт до строчки SCRIPT2 и SCRIPT2.BAT/SCRIPT2.CMD есть в текущей папке — SCRIPT2 начнётся и больше не вернётся в SCRIPT1. Надо писать &amp;#039;&amp;#039;&amp;#039;CALL&amp;#039;&amp;#039;&amp;#039; SCRIPT2. Для программ не выполняется.&lt;br /&gt;
&lt;br /&gt;
* Нету sleep, вместо него предлагается... пинговать [[localhost|какой-нибудь сервер]]. Этот, с позволения, [[костыль]], встречается в т.ч. и на банкоматах.&lt;br /&gt;
&lt;br /&gt;
== Знаменитые батники ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AUTOEXEC.BAT&amp;#039;&amp;#039;&amp;#039; — лежит в корне диска ДОСа и всех старых Виндовз и запускается в самом-самом начале. Запускает драйвера, мышку, keyrus, резидентные вирусы и трояны, устанавливает переменные окружения. Неоднократно переменовывался и переезжал вглубь системы. Настолько культурно значим, что упомянут даже [[Пелевин]]ым.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;shutdown -s -t 00&amp;#039;&amp;#039;&amp;#039; — вырубить комп без предупреждения. Положи этот батник в автозагрузку и получи втык от админа.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPolicies System /v DisableTaskMgr /t REG_DWORD /d 1 /f&amp;#039;&amp;#039;&amp;#039; — отрубить Alt+Ctrl+Delete (ой!)&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;%0|%0&amp;#039;&amp;#039;&amp;#039; — классический «кролик», бесконечно запихивает сам себя в pipeline, что приводит к былинному завису системы.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;del c:\WINDOWS\System32 /F /S /Q&amp;#039;&amp;#039;&amp;#039; — удалить [[System32]]. А в целом эта командная строка полезна для удаления папок, в которых засел злобный вирус и не даёт её вычистить.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Вирусы на батниках&amp;#039;&amp;#039;&amp;#039; — ввиду дубовости и похожести на обычные файлы непонятны антивирям. В древности, когда Windows автоматом запускала autorun.inf с любого носителя, умели даже размножаться. Теоретически же вирусы можно и на [[Perl]]-скриптах писать, благо заражение от генерации файла хрен отличишь, а [[Perl]]-код не проблема зашифровать. Так что будь бдителен и пиши скрипты своими руками, анон.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Трояны на батниках&amp;#039;&amp;#039;&amp;#039; — существуют главным образом в воображении завсегдатаев [[Тиреч|тиречевского]] /i/. Но трояны с батниками в комплекте всё-таки бывают (к примеру, &amp;#039;&amp;#039;&amp;#039;Trojan.Win32.Powp.rdf&amp;#039;&amp;#039;&amp;#039;). [http://www.xakep.ru/magazine/xs/048/054/1.asp Или вот это дикое быдлокодерское поделие из Ксакепа за 2004 год].&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Бабушкин|Антивирус Бабушкина]]&amp;#039;&amp;#039;&amp;#039; — уникальный антивирус, целиком и полностью состоит из батников. Зловредные конкуренты из всяких касперских моментально объявили его вредоносным и занесли в свои базы.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Бабушкин|Антивирус Бабушкина]] написан на сабже.&lt;br /&gt;
* [[Notepad]], в котором пишут сабжи.&lt;br /&gt;
* [[Perl]], [[Python]], [[PHP]] — скриптовые языки. Они помогут там, где сабж не справится.&lt;br /&gt;
* [[Ватник]]&lt;br /&gt;
* [[Bash.im]]&lt;br /&gt;
* [http://www.robvanderwoude.com/batchstart.php Всё, что нужно для хорошего батника]&lt;/div&gt;</summary>
		<author><name>imported&gt;PVE</name></author>
	</entry>
</feed>