
У меня есть следующий код в PowerShell:
if($url -match "^https://www.youtube"
)
Поскольку я могу выполнить ту же проверку в пакетном режиме, я попробовал сделать следующее, но ничего не вышло:
echo %url% | findstr "^https://www.youtube*$" >nul
if %url% == 0 (
echo la variables es correcta
) else (
echo la varaible no es correcta
)
решение1
Я бы сделал это с помощьюусловное исполнение:
cmd /V /C echo(!url!| findstr /I "^https://www\.youtube.\" > nul && (
echo la variable es correcta
) || (
echo la variable no es correcta
)
Потому что:
- вы проверяете не ту переменную (
if %url% == 0
), вам следует использоватьif %ErrorLevel% == 0
илиif %ErrorLevel% equ 0
, или дажеif not ErrorLevel 1
(что также верно дляErrorLevel
значений меньше нуля, ноfindstr
в любом случае не возвращает их); хорошей альтернативой являетсяусловное исполнение; echo %url%
будет проблематично, если%url%
содержит специальные символы, поэтомуотсроченное расширениеиспользуется, чтобы избежать этого, включеноcmd /V
и применяется!url!
вместо%url%
;echo
могут возникнуть проблемы с определенными значениями!url!
, которых можно избежать, написавecho(!url!
; также завершающий символ spaceперед символом вертикальной черты (|
) будет отображен, поэтому просто удалите его;- URL-адреса обычно нечувствительны к регистру, поэтому выполняйте поиск/сравнение также без учета регистра, используя
findstr /I
; - в
.
URL-адресе должен быть буквальным символом, поэтому экранируйте его в строке поиска, например\.
: ; - суффикс
*$
, который вы использовали, неверен, он должен выглядеть как.*$
, но он в любом случае не нужен; я бы добавил буквальную точку ( ), хотя , например,\.
чтобы не соответствовать чему-то вроде ;https://www.youtubefake.net/
решение2
Добро пожаловать в SuperUser.
Если вы пытаетесь подтвердить, что какой-то текст начинается с "https://www.youtube", вам не нужно *$
в конце. И я не уверен, почему вы сравниваете %url% == 0
после выполнения findstr
. Проверка errorlevel
скажет вам, что вы хотите знать. Этот код делает то, чего, как я думаю, вы пытаетесь добиться.
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
)
решение3
Из вашего примера не видно, что вам нужно фактическое регулярное выражение. Вы можете использовать простую подстановку строк, чтобы узнать, находится ли одна строка в другой строке.
if "%url:https://www.youtube=%"=="%url%" (
echo variable is not in string
) else (
echo variable is in string
)
Синтаксис: %VAR_NAME:SEARCH_STRING=REPLACE_STRING%
Что мы здесь говорим:
- Заменять "https://www.youtube" с пустым местом в переменной с именемURL-адрес
- Сравните его с тем, в котором замена не производилась.
- Если они одинаковы, то строка "https://www.youtube" не было в переменной.
Предостережения:
Этот метод не обеспечивает функциональность, которую якорь "^" делал в powershell. Если переменнаясодержит"https://www.youtube" в любом месте, ваше совпадение будет недействительным.. например.."https://www.senorsuerte.com/value?https://www.youtube"создаст успех, хотя это не то, что вы намеревались сделать.
Этот случай также легко исправить, добавив недопустимый символ в начало каждой из проверяемых нами строк.
if "*%url:https://www.youtube=%"=="*%url%" (
echo variable is not in string
) else (
echo variable is in string
)
Обратите внимание на "*" в начале каждой строки. "*" не магия... она просто привязывает наш запрос к началу строки и может быть ЛЮБЫМ символом.