I have a batch file that runs several python scripts that do table modifications.
I want to have users comment out the 1-2 python scripts that they don't want to run, rather than removing them from the batch file (so the next user knows these scripts exist as options!)
I also want to add comments to bring to their attention specifically the variables they need to update in the Batch file before they run it. I see that I can use
REM. But it looks like that's more for updating the user with progress after they've run it.
Is there a syntax for more appropriately adding a comment?
- 11See also excellent answers herestackoverflow.com/q/12407800/1011025ndemou– ndemou2017-02-11 18:22:41 +00:00CommentedFeb 11, 2017 at 18:22
- 4You can Use
Rem SthCommand Or Use This Mark ::: Sthuser9556248– user95562482019-08-06 10:36:02 +00:00CommentedAug 6, 2019 at 10:36 - I prefer to use: - REM for comments - &REM for inline commentsJorge Cribb– Jorge Cribb2021-09-20 15:42:57 +00:00CommentedSep 20, 2021 at 15:42
12 Answers12
Use:: orREM
:: commentttttttttttREM commentttttttttttBUT (as people noted):
- if they are not in the beginning of line, then add
&character:your commands here & :: commenttttttttttt - Inside nested parts (
IF/ELSE,FORloops, etc...)::should be followed with normal line, otherwise it gives error (useREMthere). ::may also fail withinsetlocal ENABLEDELAYEDEXPANSION
19 Comments
cd "C:\Folder" ::this throws a syntax error& between the code and the comment::. To illustrate, open cmd prompt and rundir ::blah which doesn't list the contents of. and compare withdir & ::blah, which does:: will bug scripts withsetlocal ENABLEDELAYEDEXPANSION andfor:: labels as comments can cause difficult-to-anticipate errors. Calling this clean is a bit misleading @ATSiemTherem command is indeed for comments. It doesn't inherently update anyone after running the script. Some script authors might use it that way instead ofecho, though, because by default the batch interpreter willprint out each command before it's processed. Sincerem commands don't do anything, it's safe to print them without side effects. To avoid printing a command, prefix it with@, or, to apply that setting throughout the program, run@echo off. (It'secho off to avoid printing further commands; the@ is to avoid printingthat command prior to the echo setting taking effect.)
So, in your batch file, you might use this:
@echo offREM To skip the following Python commands, put "REM" before them:python foo.pypython bar.py6 Comments
REM This whole line is a comment@echo off :: This comment is inlineecho off & :: TEST. Even when putting an@ in front ofecho, it still seems to give the same error which is,echo was unexpected at this time. Is there a way to comment afterecho off (inline comment in other words)?No, plain old batch files useREM as a comment.ECHO is the command that prints something on the screen.
To "comment out" sections of the file you could useGOTO. An example of all these commands/techniques:
REM it starts here the section below can be safely erased once the file is customisedECHO Hey you need to edit this file before running it! Check the instructions insideECHO Now press ctrl-c to interrupt execution or enter to continuePAUSEREM erase the section above once you have customised the filepython executed1.pyECHO Skipping some stuff nowGOTO Endpython skipped1.pypython skipped2.py:ENDpython executed2.pyWhat can I say? batch files are a relic of times long gone, they're clunky and ugly.
You can read moreon this website.
EDIT: modified the example a bit to have it contain the elements you are apparently looking for.
Comments
The :: instead of REM was preferably used in the days that computers weren't very fast.REM'ed line are read and then ingnored. ::'ed line are ignored all the way. This could speed up your code in "the old days". Further more after a REM you need a space, after :: you don't.
And as said in the first comment: you can add info to any line you feel the need to
SET DATETIME=%DTS:~0,8%-%DTS:~8,6% ::Makes YYYYMMDD-HHMMSSAs for the skipping of parts.Putting REM in front of every line can be rather time consuming.As mentioned using GOTO to skip parts is an easy way to skip large pieces of code. Be sure to set a :LABEL at the point you want the code to continue.
SOME CODEGOTO LABEL ::REM OUT THIS LINE TO EXECUTE THE CODE BETWEEN THIS GOTO AND :LABELSOME CODE TO SKIP.LAST LINE OF CODE TO SKIP:LABELCODE TO EXECUTE8 Comments
:: andrem equally.\n and then starts parsing again [citation needed]Multi line comments
If there are large number of lines you want to comment out then it will be better if you can make multi line comments rather than commenting out every line.
Seethis post by Rob van der Woude on comment blocks:
The batch language doesn't have comment blocks, though there are ways to accomplish the effect.
GOTO EndComment1This line is comment.And so is this line.And this one...:EndComment1You can use
GOTOLabel and :Label for making block comments.Or, If the comment block appears at the end of the batch file, you can write
EXITat end of code and then any number of comments for your understanding.@ECHO OFFREM Do something • •REM End of code; use GOTO:EOF instead of EXIT for Windows NT and laterEXITStart of comment block at end of batch fileThis line is comment.And so is this line.And this one...
1 Comment
if instead ofgotostackoverflow.com/q/9074476/995714ss64.com/vb/syntax-hybrid.htmlstackoverflow.com/a/34512715/995714Putting comments on the same line with commands: use& :: comment
color C & :: set red font colorecho IMPORTANT INFORMATIONcolor & :: reset the color to defaultExplanation:
& separates two commands, so in this casecolor C is the first command and:: set red font color is the second one.
Important:
This statement with comment looks intuitively correct:
goto error1 :: handling the errorbut it isnot a valid use of the comment. It works only becausegoto ignores all arguments past the first one. The proof is easy, thisgoto will not fail either:
goto error1 handling the errorBut similar attempt
color 17 :: grey on bluefails executing the command due to 4 arguments unknown to thecolor command:::,grey,on,blue.
It will only work as:
color 17 & :: grey on blueSo the ampersand is inevitable.
You can comment something out using:: orREM:
your commands here:: commentttttttttttor
your commands hereREM commenttttttttttt
To do it on the same line as a command, you must add an ampersand:
your commands here & :: commentttttttttttor
your commands here & REM commenttttttttttt
Note:
- Using
::in nested logic (IF-ELSE,FORloops, etc...) will cause an error. In those cases, useREMinstead.
1 Comment
I prefer to use:
- REM for comments
- &REM for inline comments
Example:
@echo offset parameter1=%1%REM test if the parameter 1 was receivedif defined parameter1 echo The parameter 1 is %parameter1% &REM Display the parameter3 Comments
Commenting a line
For commenting line useREM or :: though:: mightfail inside brackets
within delayed expansion lines starting with!<delimiter> will be ignored so this can be used for comments:
@echo offsetlocal enableDelayedExpansionecho delayed expansion activated!;delayed expansion commented lineecho end of the demonstrationComment at the end of line
For comments at the end of line you can again userem and:: combined with&:
echo --- &:: comment (should not be the last line in the script)echo --- &rem commentCommenting at the end of file
As noting will be parsed after theexit command you can use it to put comments at the end of the file:
@echo offecho commandsexit /b -------------------commnts at the end of the file------------------Inline comments
Expansion of not existing variables is replaced with nothing ,and as setting a variable with= rather hard you canuse this for inline comments:
@echo offecho long command %= this is a comment =% with an inline commentMultiline comments
For multiline commentsGOTO (for outside brackets) andREM with conditional execution (for inside brackets) can be used.More details here:
@echo offecho starting scriptgoto :end_comments comented line one more commented line:end_commentsecho continue with the script( echo demonstration off rem/||( lines with comments ) echo multiline comment inside echo brackets)And the same technique beautified with macros:
@echo off::GOTO comment macroset "[:=goto :]%%"::brackets comment macrosset "[=rem/||(" & set "]=)"::testingecho not commented 1%[:% multi line comment outside of brackets%:]%echo not commented 2%[:% second multi line comment outside of brackets%:]%::GOTO macro cannot be used inside forfor %%a in (first second) do ( echo first not commented line of the %%a execution %[% multi line comment %]% echo second not commented line of the %%a execution)3 Comments
REM echo ~dp*= %~dp* or%= echo ~dp*= %~dp* =% didn't work. Combining both it finally worked:rem %= echo ~dp*= %~dp* =%%= echo ~dp*= % as a variable. The lonely~ as a command and then it is commented with REM. Though a good way to avoid theREM %~ bugThis is an old topic and I'd like to add my understanding here to expand the knowledge of this interesting topic.
The key difference between REM and :: is:
REM is a command itself, while :: is NOT.
We can treat :: as a token that as soon as CMD parser encounters the first non-blank space in a line is this :: token, it will just skip the whole line and read next line. That's why REM should be followed by at least a blank space to be able to function as a comment for the line, while :: does not need any blank space behind it.
That REM is a command itself can be best understood from the followingFOR syntax
The basic FOR syntax is as follows
FOR %v in (set) DO <Command> [command param]here<Command> can be any valid commandSo we can write the following valid command line asrem is a command
FOR %i in (1,2,3) DO rem echo %iHowever, we CANNOT write the following line as:: is not a command
FOR %i in (1,2,3) DO :: echo %i1 Comment
:: is an (invalid) label (which explains it's behavior) and so should not be used (although it's still quite common)You can add comments to the end of a batch file with this syntax:
@echo off:: Start of code...:: End of code(I am a commentSo I am!This can be only at the end of batch filesJust make sure you never use a closing parentheses.
Attributions: Leo Guttirez Ramirez onhttps://www.robvanderwoude.com/comments.php
Comments
You can use:: orrem for comments.
When commenting, use:: as it's 3 times faster. An example is shownhere
Only if comments are inif, userem, as the colons could make errors, because they are a label.
Comments
Explore related questions
See similar questions with these tags.














