Descubrimiento: Nueva forma de poner comentarios.

Iniciado por leogtz, 15 Noviembre 2008, 16:43 PM

0 Miembros y 1 Visitante están viendo este tema.

leogtz

Bueno esta forma nunca la habia visto, la acabo de descubrir jugando con ciertos caracteres, se usa asi :

@echo off
rem Aqui va todo el codigo
(Todo esto no será ejecutado
Es importante no cerrar el parentesis, ya que si se cierra sera ejecutado lo que
esta dentro del parentesis.
Debe de usarse solo al final de los codigos.


Hasta ahorá se podian usar comentarios de estas formas :
@echo off
REM COMENTARIO
::COMENTARIO
% COMENTARIO %
PAUSE
EXIT /B


Una curiosidad :
Cuando usamos un comentario de este tipo :: en un FOR, saldrá error, prueben esto :

@ECHO OFF
FOR %%X IN (NOTEPAD.EXE) DO (
::COMENTARIO SOLO
)


Una explicación sería que ::COMENTARIO SOLO, no es tomado en cuenta, y dará error al tener los () solos.

Es igual a hacer esto :
@ECHO OFF
FOR %%X IN (NOTEPAD.EXE) DO ()


También se obtiene error en el IF :
@ECHO OFF
SET A=1
IF %A%==1 (
ECHO HOLA
::ALGO
)
PAUSE>NUL

En resumen los comentarios quedarían asi :

Código (DOS) [Seleccionar]
@ECHO OFF
REM COMENTARIO
::COMENTARIO
% COMENTARIO %
(COMENTARIOS:
NUEVA FORMA DE COMENTARIOS
LEO GUTIERREZ



Cita de Rob Van der Woude :
Citar
I must confess, this tip by Leo Gutierrez Ramirez baffled me.
I didn't expect it to work, but it does.
See for yourself:

@ECHO OFF
REM Code:
ECHO Hello
REM Comments:
(COMMENT
HELLO!
HI!

The trick is not in the exclamation marks, it is the fact that the parenthesis opens a "code block" which is never closed, and thus seems to be ignored completely by the command interpreter.
As Leo said: a useful way to add comments at the end of a batch file.

Thanks Leo

http://www.robvanderwoude.com/clevertricks.html
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

carlitos.java

Felicidades Leo por el descubrimiento.
Yo no sabía lo de % comentario %
gracias.

_carlos_

Estuve analizando que (

no es un comentario propiamente tal, porque con esa orden comienzas a cargar lo que venga a continuación del ( y cuando encuentre el ) ejecutará lo que hayas puesto, pero como nunca llega a encontrar el ) y encuentra el carácter EOF, la ejecución no se realiza, pero si se cargó en memoria.

Así también podríamos considerar comentarios cosas como estas:


goto :eof
estos son comentarios finales



if pepsi==cocacola (
esto son
comentarios
)


Lo del ( es lo mismo que:


@^
ec^
ho^
^
hol^
a
@^
pau^
se^


si guardas ese código en un bat, y colocas un salto de línea al final se ejecutará, pero, si el código lo terminas justo en el^ y lo guardas, no ejecutarás nada, en este caso, la ejecución de los datos se hace en el salto de línea, y con ^ indico que ingresaré más comandos, ahora si te fijas si le borras el ^ al se, coloques o no salto de línea en el archivo, lo ejecutarás.

Saludos.


leogtz

Cita de: _carlos_ en 13 Diciembre 2008, 22:44 PM
Estuve analizando que (

no es un comentario propiamente tal

Exacto, yo jamas dije que fuera un comentario, por eso el titulo de post "Nueva forma de poner comentarios".
Por eso tambien remarque :
a useful way to add comments at the end of a batch file.


El unico comando para poner comentarios es REM, ni si quiera ::, ya que puede generar problemas con otros comandos.

El ( Abre un bloque de codigo, que solo será ejecutado hasta que encuentre el )
Pero igual tendrian la misma funcionalidad :
goto:eof
Hola

exit
Hola


Solo que a mi me resulta mas legible usar ( al final de un codigo.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

_carlos_

#4
Yo diría que el resultado es prácticamente igual, en el sentido de que no ejecutas, pero con tu método cargas cosas en memoria, aunque nunca las ejecutarás, pero de que las cargas, las cargas.

En cuanto a los :: yo los considero verdaderos comentarios, pues cmd.exe no lee las líneas que comienzen con eso, y se supone que los comentarios, son comentarios, y no deberían mostrarse al ejecutar los scripts.

Ejemplo

:: dos puntos, uno arriba y otro abajo.
rem remark comentario
pause

En este ejemplo se muestra remark comentario, pero el "dos puntos, uno arriba y otro abajo." no, si se desea que no muestre con el rem al igual que con los :: se debe usar @rem pero aún no es igual a :: pues cmd.exe con rem lee la línea.

Por ejemplo, esto funciona:

if 1==1 (
rem
)
pause

pero esto no:

if 1==1 (
::
)
pause

pues considera que el cuerpo del if no tiene nada.

Entonces concluyo que en programación existen similitudes, pero no son lo mismo si comenzamos a hilar finito. Al igual que cd /d consigue el efecto de pushd, pero con la diferencia de que pushd va guardando en memoria la ruta del directorio anterior, es decir, ocupa memoria, y también sirve para abrir rutas de red.

En realidad los sinónimos no existen.