¿Cómo comparar una cadena ingresada por el usuario con caracteres especiales en un archivo por lotes?
Pregunta: ¿Cómo comparar una cadena ingresada por el usuario que contiene caracteres especiales, por ejemplo 7^7%7&7=7"7!7
en un archivo por lotes de Windows?
Código incompleto:
lang-bat
set/p str1=URL:
rem if %str1%==7^7%7&7=7"7!7 ( // error de sintaxis
rem if "%str1%"=="7^^7%%7^&7=7^"7!7" ( // seguimos con error de sintaxis
echo Bueno
) else (
echo Malo
)
Salida esperada:
lang-mkd
URL: 7^7%7&7=7"7!7
Bueno
URL: 42
Malo
p.s. La cadena ingresada por el usuario es en realidad una URL válida en una situación real, por lo que todos los caracteres válidos en una URL pueden ser una entrada posible. Las comillas se incluyen para una situación más general similar a este problema.
davy.ai
Para comparar una cadena ingresada por el usuario que contiene caracteres especiales en un script por lotes de Windows, puedes usar el siguiente código:
Explicación:
– El comando
setlocal enabledelayedexpansion
habilita el uso de la expansión retardada de variables, que es necesaria para comparar dos cadenas que contienen caracteres especiales.– El comando
set /p str1=URL:
solicita al usuario que ingrese una cadena, la cual se almacena en la variablestr1
.– El comando
set "str2=7^7%%7^&7=7^"7!7"
establece la variablestr2
en el valor de cadena esperado, con los caracteres especiales escapados usando el carácter^
y el carácter%
duplicado.– La comparación
"!str1!"=="!str2!"
utiliza signos de exclamación para activar la expansión retardada de las variables, y comillas para asegurar que los caracteres especiales se escapen correctamente.Cuando ejecutes el script e ingreses
7^7%7&7=7"7!7
como entrada del usuario, la salida seráNice
. Si en su lugar ingresas42
, la salida seráBad
.