<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; CMD/BAT: Различия между .cmd и .bat в Windows]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=14178</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14178&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT: Различия между .cmd и .bat в Windows».]]></description>
		<lastBuildDate>Thu, 20 Sep 2018 03:24:05 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[CMD/BAT: Различия между .cmd и .bat в Windows]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=128780#p128780</link>
			<description><![CDATA[<p>Когда-то давно я задался вопросом &quot;в чем разница между этими расширениями в <strong>последних версиях Windows</strong>&quot;. Делаю акцент именно на этом, потому что встречаются весьма частые ответы о том, что <br />-- .bat для COMMAND.COM, а .cmd для CMD.EXE<br />-- .bat это в Windows, а .cmd - это в OS/2</p><p>Все это далеко от ответов на поставленный вопрос. А ответ есть - <a href="https://stackoverflow.com/a/148991/3627676">https://stackoverflow.com/a/148991/3627676</a>: </p><div class="quotebox"><blockquote><p>The differences between .CMD and .BAT as far as CMD.EXE is concerned are: With extensions enabled, PATH/APPEND/PROMPT/SET/ASSOC in .CMD files will set ERRORLEVEL regardless of error. .BAT sets ERRORLEVEL only on errors.</p></blockquote></div><p>Авторский перевод<br /></p><div class="quotebox"><blockquote><p>Различия между .CMD и .BAT в CMD.EXE следующие: при включенной опции ENABLEEXTENSIONS, встроенные команды PATH/APPEND/PROMPT/SET/ASSOC в .CMD файлах выставляют собственный код ошибки в ERRORLEVEL независимо от ошибки. .BAT файлы выставляют код ошибки в ERRORLEVEL только в случае ошибки.</p></blockquote></div><p>Проиллюстрирую сказанное простым примером -- скрипт вызывает несуществующую команду (естественно, не находит ее) и печатает строку подсказки. После первой команды выставляется код ошибки 9009, который мы отображаем сразу после вызова и после встроенной команды<br /></p><div class="codebox"><pre><code>
@echo off

non-existing-command
echo:After wrong command  : %errorlevel%

prompt
echo:After prompt command : %errorlevel%
</code></pre></div><p>Вывод <strong>.bat</strong> файла: команда <strong>prompt</strong> оказалась &quot;прозрачной&quot; для <strong>%ERRORLEVEL%</strong><br /></p><div class="codebox"><pre><code>
&#039;non-existing-command&#039; is not recognized as an internal or external command,
operable program or batch file.
After wrong command  : 9009
After prompt command : 9009
</code></pre></div><p>Вывод <strong>.cmd</strong> файла: здесь очевидно, что команда вернула свой код ошбки (ноль) и затерла код ошибки предыдущей команды<br /></p><div class="codebox"><pre><code>
&#039;non-existing-command&#039; is not recognized as an internal or external command,
operable program or batch file.
After wrong command  : 9009
After prompt command : 0
</code></pre></div><p>Различия незначительные, но могут попортить нервов на поиски решения проблемы в случае скрипта, аналогичном примеру. Этот пример лишний раз говорит в пользу первичной инициализации состояния и переменных.</p><p>P.S.</p><p>Посмотрел описание команд -- туманно и рекурсивно (сепульки и сепулькарии), а про код ошибки - ни слова. </p><div class="quotebox"><cite>setlocal /? пишет:</cite><blockquote><div class="codebox"><pre><code>
. . . 
        ENABLEEXTENSIONS / DISABLEEXTENSIONS
            enable or disable command processor extensions. These
            arguments takes precedence over the CMD /E:ON or /E:OFF
            switches. See CMD /? for details.
. . .
</code></pre></div></blockquote></div><div class="quotebox"><cite>cmd /? пишет:</cite><blockquote><div class="codebox"><pre><code>
. . . 
See SETLOCAL /? for details.
. . . 
To get specific details, type commandname /? to view the specifics.
</code></pre></div></blockquote></div><div class="quotebox"><cite>prompt /? пишет:</cite><blockquote><div class="codebox"><pre><code>
Changes the cmd.exe command prompt.
. . . 
If Command Extensions are enabled the PROMPT command supports
the following additional formatting characters:
. . . 
</code></pre></div></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Thu, 20 Sep 2018 03:24:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=128780#p128780</guid>
		</item>
	</channel>
</rss>
