
Eu tenho o seguinte código no powershell:
if($url -match "^https://www.youtube"
)
Como posso realizar a mesma verificação em lote, tentei com o seguinte, mas nada:
echo %url% | findstr "^https://www.youtube*$" >nul
if %url% == 0 (
echo la variables es correcta
) else (
echo la varaible no es correcta
)
Responder1
eu faria isso usandoexecução condicional:
cmd /V /C echo(!url!| findstr /I "^https://www\.youtube.\" > nul && (
echo la variable es correcta
) || (
echo la variable no es correcta
)
Porque:
- você está verificando a variável errada (
if %url% == 0
), você deve usarif %ErrorLevel% == 0
orif %ErrorLevel% equ 0
, ou mesmoif not ErrorLevel 1
(o que também vale paraErrorLevel
valores menores que zero, masfindstr
não retorna de qualquer maneira); uma boa alternativa éexecução condicional; echo %url%
será problemático quando%url%
contém caracteres especiais, portantoexpansão atrasadaé usado para evitar isso, habilitado porcmd /V
e aplicado por!url!
em vez de%url%
;echo
pode ter problemas com certos valores de!url!
, o que pode ser evitado escrevendoecho(!url!
; também um rastro spacena frente do símbolo de barra vertical (|
) seria ecoado, portanto, basta removê-lo;- URLs geralmente não diferenciam maiúsculas de minúsculas, portanto, pesquise/compare também sem distinção entre maiúsculas e minúsculas, usando
findstr /I
; - o
.
na URL deve ser um caractere literal, portanto, escape dele na string de pesquisa como\.
; - o
*$
sufixo que você usou está errado, deveria ler.*$
, mas não é necessário de qualquer maneira; Eu acrescentaria um ponto literal (\.
) para não corresponder a algo comohttps://www.youtubefake.net/
, por exemplo;
Responder2
Bem-vindo ao Superusuário.
Se você está tentando confirmar se algum texto começa com "https://www.youtube", você não precisa do *$
no final. E não sei por que você está comparando %url% == 0
depois de fazer o findstr
. Verificar o errorlevel
indicará o que você deseja saber. Este código faz o que acho que você está tentando realizar.
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
)
Responder3
Pelo seu exemplo, não parece que você precisa de uma expressão regular real. Você pode usar a substituição simples de string para saber se uma string está em outra string.
if "%url:https://www.youtube=%"=="%url%" (
echo variable is not in string
) else (
echo variable is in string
)
A sintaxe é %VAR_NAME:SEARCH_STRING=REPLACE_STRING%
O que estamos dizendo aqui:
- Substituto "https://www.youtube" sem nada na variável chamadaurl
- Compare-o com aquele que não teve a substituição feita.
- Se forem iguais, a string "https://www.youtube"não estava na variável.
Ressalvas:
Este método não fornece a funcionalidade que a âncora "^" oferecia no PowerShell. Se a variávelcontém"https://www.youtube"em qualquer lugar, sua correspondência será inválida.. por exemplo.."https://www.senorsuerte.com/value?https://www.youtube"produziria um sucesso quando não é isso que você pretende fazer.
Este caso também é fácil de corrigir, pré-pendendo um caractere inválido no início de cada uma das strings que estamos testando.
if "*%url:https://www.youtube=%"=="*%url%" (
echo variable is not in string
) else (
echo variable is in string
)
Observe o “*” no início de cada string. O "*" não é mágico. Ele apenas ancora nossa consulta no início da string e pode ser QUALQUER caractere.