
Tengo el siguiente código en powershell:
if($url -match "^https://www.youtube"
)
Como puedo realizar la misma verificación en lotes, probé con lo siguiente pero nada:
echo %url% | findstr "^https://www.youtube*$" >nul
if %url% == 0 (
echo la variables es correcta
) else (
echo la varaible no es correcta
)
Respuesta1
yo lo haría usandoejecución condicional:
cmd /V /C echo(!url!| findstr /I "^https://www\.youtube.\" > nul && (
echo la variable es correcta
) || (
echo la variable no es correcta
)
Porque:
- está verificando la variable incorrecta (
if %url% == 0
), debe usarif %ErrorLevel% == 0
oif %ErrorLevel% equ 0
, o inclusoif not ErrorLevel 1
(lo cual también es cierto paraErrorLevel
valores menores que cero, perofindstr
no los devuelve de todos modos); una buena alternativa esejecución condicional; echo %url%
será problemático cuando%url%
contenga caracteres especiales, por lo tantoexpansión retrasadase utiliza para evitar eso, habilitado porcmd /V
y aplicado por!url!
en lugar de%url%
;echo
podría tener problemas con ciertos valores de!url!
, lo cual se puede evitar escribiendoecho(!url!
; también se repetirá un final spacedelante del símbolo de tubería (|
), por lo tanto, simplemente elimínelo;- Las URL generalmente no distinguen entre mayúsculas y minúsculas, por lo tanto, busque/compare también sin distinguir entre mayúsculas y minúsculas, usando
findstr /I
; - en
.
la URL debe ser un carácter literal, por lo tanto, escape en la cadena de búsqueda como\.
; - el
*$
sufijo que usaste es incorrecto, debería decir.*$
, pero de todos modos no es necesario; Sin embargo , agregaría un punto literal (\.
) para que no coincida con algo comohttps://www.youtubefake.net/
, por ejemplo;
Respuesta2
Bienvenido a Superusuario.
Si está intentando confirmar que algún texto comienza con "https://www.youtube", no necesitas el *$
al final. Y no estoy seguro de por qué estás comparando %url% == 0
después de hacer el findstr
. Verificar errorlevel
te dirá lo que quieres saber. Este código hace lo que creo que estás tratando de lograr.
SET /p url=Enter a URL:
echo %url% | findstr "^https://www.youtube" >nul
if errorlevel 1 (
echo la varaible no es correcta
) else (
echo la variables es correcta
)
Respuesta3
Según su ejemplo, no parece que necesite una expresión regular real. Puede utilizar la sustitución de cadenas simples para saber si una cadena está en otra cadena.
if "%url:https://www.youtube=%"=="%url%" (
echo variable is not in string
) else (
echo variable is in string
)
La sintaxis es %VAR_NAME:SEARCH_STRING=REPLACE_STRING%
Lo que estamos diciendo aquí:
- Sustituto "https://www.youtube"sin nada en la variable nombradaURL
- Compárelo con uno al que no se le haya realizado la sustitución.
- Si son iguales, la cadena "https://www.youtube" no estaba en la variable.
Advertencias:
Este método no proporciona la funcionalidad que ofrecía el ancla "^" en PowerShell. Si la variablecontiene"https://www.youtube"En cualquier lugar, tu coincidencia no será válida... por ejemplo..."https://www.senorsuerte.com/value?https://www.youtube"produciría un éxito cuando eso no es lo que pretendes hacer.
Este caso también es fácil de solucionar anteponiendo un carácter no válido al principio de cada una de las cadenas que estamos probando.
if "*%url:https://www.youtube=%"=="*%url%" (
echo variable is not in string
) else (
echo variable is in string
)
Tenga en cuenta el "*" al principio de cada cadena. El "*" no es mágico... simplemente ancla nuestra consulta al principio de la cadena y podría ser CUALQUIER carácter.