¿Cómo "comentar" (agregar comentario) en un lote / cmd?

Tengo un archivo por lotes que ejecuta varias secuencias de comandos de python que realizan modificaciones de tabla.

  1. Quiero que los usuarios comenten los 1-2 scripts de Python que no quieren ejecutar, en lugar de eliminarlos del archivo por lotes (¡para que el siguiente usuario sepa que estos scripts existen como opciones!)

  2. También quiero agregar comentarios para llamar su atención específicamente sobre las variables que necesitan actualizar en el archivo por lotes antes de ejecutarlo. Veo que puedo usar REM. Pero parece que eso es más para actualizar al usuario con el progreso después de que lo haya ejecutado.

¿Existe una sintaxis para agregar un comentario de manera más apropiada?

preguntado el 29 de junio de 12 a las 22:06

Ver también excelentes respuestas aquí stackoverflow.com/q/12407800/1011025 -

Puedes usar Rem Sth Comando o use esta marca: :: Sth -

Prefiero usar: - REM para comentarios - &REM para comentarios en línea -

12 Respuestas

Utilice las :: or REM

::   commenttttttttttt
REM  commenttttttttttt

PERO (como la gente notó):

  • :: no funciona en línea; agregar & personaje:
    your commands here & :: commenttttttttttt
  • Dentro de piezas anidadas (IF/ELSE, FOR bucles, etc.) :: debe seguirse con la línea normal, de lo contrario da error (utilice REM ahí).
  • :: también puede fallar dentro setlocal ENABLEDELAYEDEXPANSION

Respondido el 14 de diciembre de 20 a las 16:12

Los dos puntos dobles :: Es el comentario .bat más limpio que existe. ¡Y se puede usar al principio o en medio de una línea! - ATSiem

No funcionó para mí cuando se hizo en línea como este. cd "C:\Folder" ::this throws a syntax error - serbal shaun

Para un comentario en la misma línea que ilustra el ejemplo, debe agregar & entre el código y el comentario ::. Para ilustrar, abra cmd prompt y ejecute dir ::blah que no enumera el contenido de . y comparar con dir & ::blah, que hace - Sparse

Advertencia, usando :: errores en los scripts con setlocal ENABLEDELAYEDEXPANSION y for - Azevedo

Ejemplos de como usar :: las etiquetas como comentarios pueden causar errores difíciles de anticipar. Llamar a esto limpio es un poco engañoso @ATSiem - Jean-François Corbett

Las rem El comando es de hecho para comentarios. No actualiza inherentemente a nadie después de ejecutar el script. Algunos autores de guiones podrían usarlo de esa manera en lugar de echo, sin embargo, porque por defecto el intérprete por lotes imprimir cada comando antes de que sea procesado. Ya que rem los comandos no hacen nada, es seguro imprimirlos sin efectos secundarios. Para evitar imprimir un comando, prefijelo con @, o, para aplicar esa configuración en todo el programa, ejecute @echo off. (Su echo off para evitar imprimir más comandos; los @ es evitar la impresión que comando antes de que la configuración de eco surta efecto.)

Entonces, en su archivo por lotes, puede usar esto:

@echo off
REM To skip the following Python commands, put "REM" before them:
python foo.py
python bar.py

Respondido el 29 de junio de 12 a las 22:06

también puede utilizar dos puntos "::". Es una de las dos formas de agregar comentarios en el archivo por lotes sin mostrar o ejecutar esa línea cuando se ejecuta el archivo por lotes. A diferencia de REM, esta línea no se mostrará independientemente de si ECHO off está en el archivo por lotes. - brent81

@ Brent81 Siento que esta debería ser la respuesta correcta. Cuando se usa el resaltado de sintaxis, el comando REM en realidad no resalta el texto como "comentado". - Automático

Los dos puntos dobles son una "etiqueta no válida"; aquí hay un artículo que lo explica, y por qué su rendimiento puede ser mejor que REM (¡especialmente en disquetes!), y no funcionará en bloques de código sangrado (solo en el primer carácter): robvanderwoude.com/comentarios.php - Michael Paulukonis

Interesante. Pensé que REM era el 'comentario de línea completa' y los dos puntos dobles eran el 'comentario en línea', como REM This whole line is a comment @echo off :: This comment is inline - Richard Smith

@Alhadis, el script Configure de Perl está escrito en Bourne Shell, no en el lote de Windows, entonces, ¿cómo es relevante aquí? Además, el comando de dos puntos que es una sintaxis Bourne válida no es un "efecto secundario adicional"; es precisamente el porqué se usa en eso Guión de Bourne. Se usa a favor de # para comentarios porque #, evidentemente, podría no ser un designador de comentario válido en todos los shells Configure están destinados a soportar; ver línea 3. - robar kennedy

No, se usan archivos por lotes simples y antiguos REM como comentario. ECHO es el comando que imprime algo en la pantalla.

Para "comentar" secciones del archivo que podría usar GOTO. Un ejemplo de todos estos comandos/técnicas:

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

¿Qué puedo decir? Los archivos por lotes son una reliquia de tiempos pasados, son torpes y feos.

Puedes leer mas en este sitio web.

EDITAR: modificó un poco el ejemplo para que contenga los elementos que aparentemente está buscando.

Respondido el 29 de junio de 12 a las 23:06

El :: en lugar de REM se usaba preferentemente en los días en que las computadoras no eran muy rápidas. Las líneas REM se leen y luego se ignoran. ::'ed line se ignoran por completo. Esto podría acelerar su código en "los viejos tiempos". Además, después de un REM necesitas un espacio, después de :: no.

Y como se dijo en el primer comentario: puede agregar información a cualquier línea que sienta la necesidad de

SET DATETIME=%DTS:~0,8%-%DTS:~8,6% ::Makes YYYYMMDD-HHMMSS

En cuanto al salto de piezas. Poner REM delante de cada línea puede llevar bastante tiempo. Como se mencionó, usar GOTO para omitir partes es una manera fácil de omitir grandes fragmentos de código. Asegúrese de establecer una :LABEL en el punto en el que desea que continúe el código.

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

respondido 02 nov., 13:21

¿Cómo se puede ignorar una línea de dos puntos sin que se lea? ¿No debe el intérprete leer primero la línea antes de reconocerla como una línea de dos puntos? - robar kennedy

@RobKennedy mientras leo la respuesta, no lee nada después de ::, donde se lee todo después de REM. - James Jenkins

Si el intérprete de comandos deja de leer, @James, entonces nunca más ejecutaría el archivo. Obviamente, debe continuar leyendo para descubrir dónde termina el comentario y dónde comienza la siguiente línea del archivo. Tiene que ver con :: y rem Igualmente. - robar kennedy

@RobKennedy, también pensé que estaba implícito que solo se aplicaba a la línea en la que estaba el comando. - James Jenkins

@RobKennedy lo hace leer pero no lo hace analizar gramaticalmente (o procesar) lo que lee, simplemente salta hasta el siguiente \n y luego comienza a analizar nuevamente [cita requerida] - xDaizu

Comentarios de varias líneas

Si hay una gran cantidad de líneas que desea comentar, será mejor si puede hacer comentarios de varias líneas en lugar de comentar cada línea.

Ver esta publicación de Rob van der Woude en bloques de comentarios:

El lenguaje por lotes no tiene bloques de comentarios, aunque hay formas de lograr el efecto.

GOTO EndComment1
This line is comment.
And so is this line.
And this one...
:EndComment1

Puedes usar GOTO Label y :Label para hacer comentarios de bloque.

O bien, si el bloque de comentarios aparece al final del archivo por lotes, puede escribir EXIT al final del código y luego cualquier número de comentarios para su comprensión.

@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...

Respondido 11 Jul 19, 12:07

esto se usa a menudo en scripts híbridos por lotes y VBS/JS, aunque lo usaban si if en lugar de goto stackoverflow.com/q/9074476/995714 ss64.com/vb/syntax-hybrid.html stackoverflow.com/a/34512715/995714 - phuclv

Poner comentarios en la misma línea con comandos: use & :: comment

color C          & :: set red font color
echo IMPORTANT INFORMATION
color            & :: reset the color to default

Explicación:

& separa dos comandos, entonces en este caso color C es el primer comando y :: set red font color es el segundo.


Importante:

Esta declaración con comentario parece intuitivamente correcta:

goto error1         :: handling the error

pero es no es un uso valido del comentario Funciona solo porque goto ignora todos los argumentos más allá del primero. La prueba es fácil, esto goto tampoco fallará:

goto error1 handling the error

Pero un intento similar

color 17            :: grey on blue

falla al ejecutar el comando debido a 4 argumentos desconocidos para el color mando: ::, grey, on, blue.

Solo funcionará como:

color 17     &      :: grey on blue

Así que el ampersand es inevitable.

Respondido el 20 de junio de 20 a las 10:06

De otras respuestas, ¿parece que el ampersand no es necesario? - Por favor

@Snaptastic: las otras respuestas son realmente incorrectas en este punto, vea mi edición reciente. - miroxlav

Esta parece ser la forma correcta; Incluso se resalta como comentario en mi IDE. - Neeraj

Puedes comentar algo usando :: or REM:

your commands here
:: commenttttttttttt

or

your commands here
REM  commenttttttttttt

 

Para hacerlo en la misma línea que un comando, debe agregar un ampersand:

your commands here      & ::  commenttttttttttt

or

your commands here      & REM  commenttttttttttt

 

Nota:

  • Usar :: en lógica anidada (IF-ELSE, FOR bucles, etc...) provocará un error. En esos casos, utilice REM preferiblemente.

Respondido el 21 de Septiembre de 18 a las 06:09

Esto se basa en la respuesta de T.Todua. Sentí que su respuesta fue buena, pero omití algunos detalles importantes, pero revirtieron mi edición, así que estoy convirtiendo mi revisión en su propia respuesta. - Pikamander2

Puede agregar comentarios al final de un archivo por lotes con esta sintaxis:

@echo off
:: Start of code
...
:: End of code

(I am a comment
So I am!
This can be only at the end of batch files

Solo asegúrese de nunca usar un paréntesis de cierre.

Atribuciones: Leo Gutiérrez Ramírez en https://www.robvanderwoude.com/comments.php

Respondido el 12 de enero de 20 a las 16:01

Este es un tema antiguo y me gustaría agregar mi comprensión aquí para ampliar el conocimiento de este interesante tema.

La diferencia clave entre REM y :: es:

REM es un comando en sí mismo, mientras que :: NO lo es.

Podemos tratar :: como un token que tan pronto como el analizador CMD encuentra el primer espacio que no está en blanco en una línea es este :: token, simplemente omitirá toda la línea y leerá la siguiente línea. Es por eso que REM debe ir seguido de al menos un espacio en blanco para poder funcionar como un comentario para la línea, mientras que :: no necesita ningún espacio en blanco detrás.

Que REM es un comando en sí mismo se puede entender mejor a partir de lo siguiente sintaxis

La sintaxis FOR básica es la siguiente

FOR %v in (set) DO <Command> [command param] 

aquí <Command> puede ser cualquier comando válido Entonces podemos escribir la siguiente línea de comando válida como rem es un comando

FOR %i in (1,2,3) DO rem echo %i

Sin embargo, NO PODEMOS escribir la siguiente línea como :: no es un comando

FOR %i in (1,2,3) DO :: echo %i

Respondido 13 Feb 19, 07:02

técnicamente, :: es una etiqueta (no válida) (que explica su comportamiento) y, por lo tanto, no debe usarse (aunque todavía es bastante común) - Stephan

Puedes usar :: or rem para comentarios.

Al comentar, utilice :: ya que es 3 veces más rápido. Se muestra un ejemplo aquí

Solo si los comentarios están en if, Utilizar rem, ya que los dos puntos podrían cometer errores, ya que son una etiqueta.

Respondido el 14 de junio de 20 a las 18:06

Comentando una linea

Para comentar el uso de la línea REM o :: aunque :: podría fallar dentro de paréntesis

dentro de las líneas de expansión retrasada que comienzan con !<delimiter> será ignorado por lo que esto se puede utilizar para los comentarios:

@echo off

setlocal enableDelayedExpansion

echo delayed expansion activated
!;delayed expansion commented line
echo end of the demonstration

Comentar al final de la línea

Para comentarios al final de la línea, puede volver a utilizar rem y :: combinado con &:

echo --- &:: comment (should not be the last line in the script)
echo --- &rem comment

Comentando al final del archivo

Como la observación se analizará después de la exit puede usarlo para poner comentarios al final del archivo:

@echo off

echo commands

exit /b 

-------------------
commnts at the end 
of the file
------------------

Comentarios en línea

La expansión de variables no existentes se reemplaza con nada, y como establecer una variable con = bastante duro puedes use esto para comentarios en línea:

@echo off

echo long command %= this is a comment =% with an inline comment

Comentarios de varias líneas

Para comentarios de varias líneas GOTO (para soportes exteriores) y REM con ejecución condicional (para corchetes interiores) se puede utilizar. Más detalles aquí:

@echo off

echo starting script

goto :end_comments
 comented line 
 one more commented line
:end_comments

echo continue with the script

(
    echo demonstration off
    rem/||(
      lines with
      comments
    )
    echo multiline comment inside
    echo brackets
)

Y la misma técnica embellecida con macros:

@echo off

::GOTO comment macro
set "[:=goto :]%%"
::brackets comment macros
set "[=rem/||(" & set "]=)"

::testing
echo 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 for
for %%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
)

respondido 09 nov., 20:00

Prefiero usar:

  • REM para comentarios
  • &REM para comentarios en línea

Ejemplo:

@echo off
set parameter1=%1%
REM test if the parameter 1 was received
if defined parameter1 echo The parameter 1 is %parameter1% &REM Display the parameter

Respondido el 20 de Septiembre de 21 a las 16:09

No puedo ver dónde su respuesta agrega más información. Ya hay respuestas con el mismo contenido, al menos una tiene 8 años - Jeb

Es una respuesta más simple... sin complejidad - Jorge Cribb

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.