Saltar al contenido

¿Cómo verificar el parámetro de línea de comando en el archivo “.bat”?

Solución:

Debe verificar que el parámetro esté en blanco: if "%~1"=="" goto blank

Una vez que hayas hecho eso, haz un interruptor if / else en -b: if "%~1"=="-b" (goto specific) else goto unknown

Rodear los parámetros con comillas facilita la verificación de cosas como parámetros en blanco / vacíos / faltantes. “~” garantiza que las comillas dobles se eliminen si estaban en el argumento de la línea de comandos.

Mire http://ss64.com/nt/if.html para obtener una respuesta; el comando es IF [%1]==[] GOTO NO_ARGUMENT o similar.

La respuesta corta: use corchetes:

if [%1]==[] goto :blank

o (cuando necesite manejar argumentos entre comillas, consulte la Edición a continuación):

if [%~1]==[] goto :blank

¿Por qué? usted podría preguntar. Bueno, tal como lo mencionó Jeremiah Willcock: http://ss64.com/nt/if.html – ¡ellos usan eso! Bien, pero ¿qué pasa con las comillas?

Nuevamente, respuesta corta: son “mágicos” – a veces las comillas dobles (dobles) se convierten en una comilla simple (doble). Y necesitan coincidir, para empezar.

Considere este pequeño guión:

@rem argq.bat
@echo off

:loop 
if "%1"=="" goto :done
echo %1
shift
goto :loop

:done
echo Done.

Probémoslo:

C:> argq bla bla
bla
bla
Done.

Parece funcionar. Pero ahora, cambiemos a la segunda marcha:

C:> argq "bla bla"
bla""=="" was unexpected at this time.

Auge Esto no se evaluó como verdadero, ni tampoco como falso. El guión MURIÓ. Si se suponía que debías apagar el reactor en algún momento, bueno, mala suerte. Ahora morirás como Harry Daghlian.

Puede pensar: está bien, los argumentos no pueden contener comillas. Si lo hacen, esto sucede. Incorrecto Aquí tienes un consuelo:

C:> argq ""bla bla""
""bla
bla""
Done.

Oh sí. No te preocupes – algunas veces esta voluntad trabaja.

Probemos con otro script:

@rem args.bat
@echo off

:loop 
if [%1]==[] goto :done
echo %1
shift
goto :loop

:done
echo Done.

Puede probar usted mismo que funciona bien para los casos anteriores. Esto es lógico: las comillas no tienen nada que ver con los corchetes, por lo que no hay magia aquí. Pero, ¿qué hay de condimentar los argumentos con corchetes?

D:>args ]bla bla[
]bla
bla[
Done.

D:>args [bla bla]
[bla
bla]
Done.

No hubo suerte. Los soportes simplemente no se pueden ahogar cmd.exeanalizador de.

Volvamos a las citas malvadas por un momento. El problema estaba ahí, cuando la discusión terminó con una cita:

D:>argq "bla1 bla2"
bla2""=="" was unexpected at this time.

¿Qué pasa si paso solo:

D:>argq bla2"
The syntax of the command is incorrect.

El script no se ejecutará en absoluto. Igual por args.bat:

D:>args bla2"
The syntax of the command is incorrect.

Pero, ¿qué obtengo cuando el número de "-caracteres “coincide” (es decir, es par), en tal caso:

D:>args bla2" "bla3
bla2" "bla3
Done.

BONITO – Espero que hayas aprendido algo sobre cómo .bat los archivos dividen sus argumentos de línea de comando (SUGERENCIA: * No es exactamente como en bash). El argumento anterior contiene un espacio. Pero las citas no se eliminan automáticamente.

¿Y argq? ¿Cómo reacciona ante eso? Como era de esperar:

D:>argq bla2" "bla3
"bla3"=="" was unexpected at this time.

Entonces, piense antes de decir: “¿Sabes qué? Solo usa comillas. [Because, to me, this looks nicer]”.

Editar

Recientemente, hubo comentarios sobre esta respuesta; bueno, los corchetes sqare “no pueden manejar” pasar argumentos entre comillas y tratarlos como si no estuvieran citados.

La sintaxis:

if "%~1"=="" (...)

No es una virtud recién descubierta de las comillas dobles, sino una muestra de una característica clara de eliminar las comillas de la variable de argumento, si el primer y último carácter es una comilla doble.

Esta “tecnología” funciona igual de bien con corchetes:

if [%~1]==[] (...)

Fue útil señalar esto, así que también voté a favor de la nueva respuesta.

Finalmente, los fans de comillas dobles, hacen un argumento de la forma "" existen en su libro, o está en blanco? Solo preguntaba’ 😉

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *