как "закомментировать" (добавить комментарий) в пакете/cmd?

<p>у меня есть пакетный файл, который запускает несколько сценариев python, которые вносят изменения в таблицу. </p><ol> <li><p>я хочу, чтобы пользователи закомментировали 1-2 сценария python, которые они не хотят запускать, вместо того, чтобы удалять их из командного файла (чтобы следующий пользователь знал, что эти сценарии существуют как опции!)</p></li> <li><p>я также хочу добавить комментарии, чтобы привлечь их внимание конкретно к переменным, которые им нужно обновить в пакетном файле, прежде чем они его запустят. я вижу, что могу использовать <code>rem</code>. но похоже, что это больше для обновления пользователя с прогрессом после его запуска. </p></li> </ol><p>есть ли синтаксис для более подходящего добавления комментария?</p>

<p>команда <code>rem</code> действительно для комментариев. он не обновляет никого после запуска скрипта. однако некоторые авторы сценариев могут использовать его вместо <code>echo</code>, потому что по умолчанию пакетный интерпретатор<em> распечатывает </em>каждую команду перед обработкой. поскольку команды <code>rem</code> ничего не делают, их можно печатать без побочных эффектов. чтобы не печатать команду, добавьте к ней префикс <code>@</code> или, чтобы применить этот параметр ко всей программе, запустите <code>@echo off</code>. (это <code>echo off</code>, чтобы не печатать дальнейшие команды; <code>@</code> - чтобы не печатать<em> та </em>команду до вступления в силу настройки эха.)</p><p>итак, в вашем командном файле вы можете использовать это:</p><pre><code>@echo off rem to skip the following python commands, put "rem" before them: python foo.py python bar.py </code></pre>

<h1><code>::</code> или <code>rem</code></h1><pre><code>:: commenttttttttttt rem commenttttttttttt </code></pre><h1>но (как отметили люди):</h1><ul> <li>если вы используете inline, вам нужно добавить символ <code>&</code>:<br/> <code>your commands here & :: commenttttttttttt</code></li> <li>внутри вложенной логики (<code>if/else</code>, <code>for</code> циклов и т.д.) используйте<strong><code>rem</code></strong>, поскольку <code>::</code> выдает ошибку.</li> <li><code>::</code> может завершиться ошибкой в <code>setlocal enabledelayedexpansion</code> </li> </ul>

<p>нет, обычные старые командные файлы используют <code>rem</code> в качестве комментария. <code>echo</code> - это команда, которая печатает что-то на экране.</p><p>чтобы «закомментировать» разделы файла, вы можете использовать <code>goto</code>. пример всех этих команд/методов:</p><pre><code>rem it starts here the section below can be safely erased once the file is customised echo hey you need to edit this file before running it! check the instructions inside echo now press ctrl-c to interrupt execution or enter to continue pause rem erase the section above once you have customised the file python executed1.py echo skipping some stuff now goto end python skipped1.py python skipped2.py :end python executed2.py </code></pre><p>что я могу сказать? пакетные файлы являются пережитком давно ушедших времен, они неуклюжи и безобразны.</p><p>вы можете прочитать больше <a href="http://www.robvanderwoude.com/batchfiles.php">на этом сайте</a> .</p><p>правка: немного изменил пример, чтобы он содержал элементы, которые вы, очевидно, ищете.</p>

<p>:: вместо rem предпочтительно использовался в те дни, когда компьютеры работали не очень быстро. строка с rem-кодом читается, а затем обрабатывается. строка :: игнорируется полностью. это может ускорить ваш код в «старые времена». далее еще после rem вам нужен пробел, после :: вы не делаете.</p><p>и, как сказано в первом комментарии: вы можете добавить информацию в любую строку, в которой вы чувствуете необходимость</p><pre><code>set datetime=%dts:~0,8%-%dts:~8,6% ::makes yyyymmdd-hhmmss </code></pre><p>что касается пропуска частей .. помещение rem перед каждой строкой может занять довольно много времени .. как уже упоминалось, использование goto для пропуска частей - это простой способ пропустить большие куски кода. обязательно установите: label в том месте, где вы хотите, чтобы код продолжался.</p><pre><code>some code goto label ::rem out this line to execute the code between this goto and :label some code to skip . last line of code to skip :label code to execute </code></pre>

<h2>многострочные комментарии</h2><p>если есть большое количество строк, которые вы хотите закомментировать, то будет лучше, если вы сможете делать многострочные комментарии, а не комментировать каждую строку. </p><p>пакетный язык не имеет блоков комментариев, хотя есть способы добиться эффекта.</p><pre><code>goto endcomment1 this line is comment. and so is this line. and this one... :endcomment1 </code></pre><p>вы можете использовать <code>goto</code> label и: label для создания блочных комментариев.</p><p>или, если блок комментариев появляется в конце пакетного файла, вы можете написать <code>exit</code> в конце кода, а затем любое количество комментариев для вашего понимания.</p><pre><code>@echo off rem do something • • rem end of code; use goto:eof instead of exit for windows nt and later exit start of comment block at end of batch file this line is comment. and so is this line. and this one... </code></pre><p> <a href="http://www.robvanderwoude.com/comments.php">комментарии источник</a> </p>

<h2>размещение комментариев в одной строке с командами: используйте <code>& :: comment</code></h2><pre><code>color c & :: set red font color echo important information color & :: reset the color to default </code></pre><p><strong>объяснение:</strong></p><p> <a href="https://technet.microsoft.com/en-us/library/bb490954.aspx"><code>&</code> разделяет две команды</a> , поэтому в этом случае <code>color c</code> - первая команда, а <code>:: set red font color</code> - вторая.</p><hr><h3>важный:</h3><p>это утверждение с комментарием выглядит интуитивно правильным:</p><pre><code>goto error1 :: handling the error </code></pre><p>но это <strong>недопустимое использование</strong> комментария. это работает только потому, что <code>goto</code> игнорирует все аргументы после первого. доказательство легко, эта <code>goto</code> также не потерпит неудачу:</p><pre><code>goto error1 handling the error </code></pre><p>но похожая попытка</p><pre><code>color 17 :: grey on blue </code></pre><p>не удается выполнить команду из-за 4 аргументов, неизвестных команде <code>color</code>: <code>::</code>, <code>grey</code>, <code>on</code>, <code>blue</code>.</p><p>это будет работать только как:</p><pre><code>color 17 & :: grey on blue </code></pre><p><strong>таким образом, амперсанд неизбежен.</strong></p>

<p>вы можете что-то закомментировать, используя <code>::</code> или <code>rem</code>:</p><pre><code>your commands here :: commenttttttttttt </code></pre><p>или же</p><pre><code>your commands here rem commenttttttttttt </code></pre><p></p><p>чтобы сделать это в той же строке, что и команда, необходимо добавить амперсанд:</p><pre><code>your commands here & :: commenttttttttttt </code></pre><p>или же</p><pre><code>your commands here & rem commenttttttttttt </code></pre><p></p><h1>замечания:</h1><ul> <li>использование<strong><code>::</code></strong>во вложенной логике (<code>if-else</code>, <code>for</code> циклы и т.д.) вызовет ошибку. в этих случаях используйте<strong><code>rem</code></strong>вместо этого.</li> </ul>

<p>это старая тема, и я хотел бы добавить свое понимание здесь, чтобы расширить знания этой интересной темы. </p><p>основное различие между rem и :::</p><p>rem сама команда, а :: не. </p><p>мы можем трактовать :: как токен, который, как только синтаксический анализатор cmd встретит первый непустой пробел в строке, будет следующим :: токеном, он просто пропустит всю строку и прочитает следующую строку. вот почему за rem должен следовать хотя бы пробел, чтобы он мог выступать в качестве комментария для строки, в то время как :: не нужно никакого пробела позади нее.</p><p>то, что rem является самой командой, лучше всего понять из следующего синтаксиса <a href="https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/for">для</a> </p><p>основной синтаксис for следующий</p><pre><code>for %v in (set) do <command> [command param] </code></pre><p>здесь <code><command></code> может быть любой допустимой командой так что мы можем написать следующую допустимую командную строку, так как <code>rem</code> является командой</p><pre><code>for %i in (1,2,3) do rem echo %i </code></pre><p>однако мы не можем написать следующую строку, так как <code>::</code> не является командой</p><pre><code>for %i in (1,2,3) do :: echo %i </code></pre>