La respuesta corta - uso de corchetes:
if [%1]==[] goto :blank
o (cuando se necesita para manejar argumentos citados, véase la edición más adelante):
if [%~1]==[] goto :blank
¿Por qué? puedes preguntar Bueno, tal como lo mencionó Jeremiah Willcock: http://ss64.com/nt/if.html - ¡lo usan! OK, pero ¿qué pasa con las comillas?
De nuevo, respuesta breve: son "mágicos", a veces las comillas dobles (dobles) se convierten en una sola (doble) comilla. Y tienen que coincidir, para empezar.
consideran este pequeño script:
@rem argq.bat
@echo off
:loop
if "%1"=="" goto :done
echo %1
shift
goto :loop
:done
echo Done.
vamos a probarlo:
C:\> argq bla bla
bla
bla
Done.
parece funcionar. Pero ahora, vamos a pasar a la segunda marcha:
C:\> argq "bla bla"
bla""=="" was unexpected at this time.
Boom Esto no evaluó a verdadero, tampoco se evalúa como falsa. El script MURIÓ. Si se suponía que debías apagar el reactor en algún momento, buena suerte. Ahora morirás como Harry Daghlian.
Puede pensar, de acuerdo, los argumentos no pueden contener comillas. Si lo hacen, esto sucede. incorrecto Aquí hay un consuelo:
C:\> argq ""bla bla""
""bla
bla""
Done.
Oh sí. No se preocupe - veces esto trabajo.
Probemos otro guión:
@rem args.bat
@echo off
:loop
if [%1]==[] goto :done
echo %1
shift
goto :loop
:done
echo Done.
usted puede probarse, que funciona bien para los casos anteriores. Esto es lógico: las citas no tienen nada que ver con los corchetes, así que no hay magia aquí. Pero, ¿qué tal condimentar los args con corchetes?
D:\>args ]bla bla[
]bla
bla[
Done.
D:\>args [bla bla]
[bla
bla]
Done.
No hubo suerte allí. Los corchetes simplemente no pueden ahogar el analizador cmd.exe
.
Volvamos a las citas malvadas por un momento. El problema era que, cuando la discusión terminó con una cita:
D:\>argq "bla1 bla2"
bla2""=="" was unexpected at this time.
Lo que si me pasa justo:
D:\>argq bla2"
The syntax of the command is incorrect.
El script no funcionará en absoluto. Lo mismo para args.bat
:
D:\>args bla2"
The syntax of the command is incorrect.
Pero lo hago para que, cuando el número de "
-Los personajes "coincidencias" (es decir, - que es aún), en tal caso:
D:\>args bla2" "bla3
bla2" "bla3
Done.
AGRADABLE - Espero que hayas aprendido algo sobre cómo los archivos .bat
dividen sus argumentos en la línea de comando (AVISO: * No es exactamente como en bash). El argumento anterior contiene un espacio. Pero las cotizaciones no se eliminan automáticamente.
¿Y argq? ¿Cómo reacciona a eso? Como era de esperar:
D:\>argq bla2" "bla3
"bla3"=="" was unexpected at this time.
Por lo tanto - piensa antes de decir: "?. Sepa lo que sólo requiere comillas [Porque, para mí, esto parece más agradable]".
Editar
Recientemente, hubo comentarios acerca de esta respuesta - así, soportes sqare "no pueden manejar" el paso de argumentos citados y tratarlos como si ellos no fueron citados.
La sintaxis:
if "%~1"=="" (...)
No hay algún recién descubierto virtud de las comillas dobles, pero una muestra de una característica interesante de despojar a las cotizaciones de la variable argumento, si el primer y último carácter es un doble cotización .
Esta "tecnología" funciona igual de bien con corchetes:
if [%~1]==[] (...)
que era una cosa útil para señalar esto, así que también Upvote la nueva respuesta.
Por último, comillas dobles, ¿existe un argumento del formulario ""
en su libro, o está en blanco? Sólo preguntando;)
Si agrega corchetes (como en la línea 'GOTO EN BLANCO') a las otras dos declaraciones' IF', ¿soluciona esto el problema? –