He escrito un enorme archivo por lotes de MS DOS. Para probar este archivo por lotes, necesito ejecutar solo algunas líneas y quiero ocultar / comentar el resto.
Tengo algunas líneas de comentarios existentes que comienzan con, ::
por lo tanto, no puedo usar ::
más, ya que mezclará todos los comentarios.
¿Como puedó resolver esté problema?
batch-file
comments
dos
user219628
fuente
fuente
REM
líneas como líneas de comentario, hace que la salida sea oscuraSi desea agregar REM al principio de cada línea en lugar de usar GOTO, puede usar Notepad ++ para hacerlo fácilmente siguiendo estos pasos:
Repite los pasos para descomentar
fuente
Ctrl-Q
, haga clic enNotepad++
:Edit -> Comment/Uncomment
.Si bien la
goto
solución es una buena opción, no funcionará entre corchetes (incluidos los comandos FOR e IF), pero sí. Aunque debe tener cuidado con el cierre de corchetes y la sintaxis no válida para los comandosFOR
yIF
porque se analizarán.Actualizar
La actualización en la respuesta de dbenham me dio algunas ideas. Primero, hay dos casos diferentes en los que podemos necesitar comentarios de varias líneas, en un contexto de corchetes donde GOTO no se puede usar y fuera de él. Dentro de los paréntesis contexto se puede utilizar otros soportes si hay una condición que impide que el código sea executed.Though la Thede código todavía se analiza y se detectó algunos errores de sintaxis (
FOR
,IF
, soportes mal cerrados, la expansión de parámetros mal ..). Así si es posible, es mejor usar GOTO.Aunque no es posible crear una macro / variable utilizada como etiqueta, pero es posible usar macros para los comentarios de corchetes. Sin embargo, se pueden usar dos trucos para hacer que los comentarios GOTO sean más simétricos y más agradables (al menos para mí). Para esto, usaré dos trucos: 1) puedes poner un solo símbolo delante de una etiqueta y goto aún podrá encontrarlo (no tengo idea de por qué es esto, mis amigos está buscando una unidad). 2) puede poner un solo
:
al final de un nombre de variable y no se activará una función de reemplazo / subcadena (incluso en las extensiones habilitadas). Lo que combinado con las macros para comentarios de corchetes puede hacer que ambos casos se vean casi iguales.Así que aquí están los ejemplos (en el orden que más me gustan):
Con soportes rectangulares :
Con llaves :
Entre paréntesis :
Mezcla entre los estilos PowerShell y C (
<
no se puede usar porque la redirección es con mayor prioridad.*
No se puede usar debido a%*
):Para enfatizar que es un comentario (aunque no es tan corto):
fuente
rem.||(
o en surem^ (
lugar. La intención es un poco más clara. Vea mi respuesta actualizada.%rem:%
+%:rem%
para hacerlo más obvio, aunque perderá su encanto. O solo barra para estar más cerca del estilo C ...Otra opción es encerrar las líneas no deseadas en un bloque IF que nunca puede ser cierto
Por supuesto, no se ejecutará nada dentro del bloque if, pero se analizará. Por lo que no puede tener una sintaxis inválida dentro. Además, el comentario no puede contener a
)
menos que sea de escape o citado. Por esas razones, la solución GOTO aceptada es más confiable. (La solución GOTO también puede ser más rápida)Actualización 2017-09-19
Aquí hay una mejora cosmética de la solución GOTO de pdub . Defino una variable de entorno simple "macro" que hace que la sintaxis del comentario GOTO sea un poco mejor autodocumentada. Aunque generalmente se recomienda que: las etiquetas sean únicas dentro de un script por lotes, realmente está bien incrustar varios comentarios como este dentro del mismo script por lotes.
O puede usar una de estas variantes de la solución de npocmaka . El uso de REM en lugar de BREAK hace que la intención sea un poco más clara.
fuente
Solo quiero mencionar que la solución GOTO de pdub no es completamente correcta en caso de que: la etiqueta de comentario aparezca varias veces. Modifico el código de esta pregunta como ejemplo.
La salida será
Se omite el comando ECHO AQUÍ EN TD_NEXT EN EL PRIMER BLOQUE .
fuente
@jeb
Y después de usar esto, el stderr parece ser inaccesible
No, intente esto:
¿Pero por qué funciona?
lo siento, contesto la pregunta en francés:
(la redirection par 3> est spécial car elle persiste, on va l'utiliser pour capturer le flux des erreurs 2> est on va le transformer en un flux persistant à l'ade de 3> ceci va nous permettre d'avoir une gestion des erreur pour tout notre environement de script..par la suite si on veux recuperer le flux 'stderr' il faut faire une autre redirection du handle 2> au handle 1> qui n'est autre que la console ..)
fuente
prueba esto:
fuente