
我在 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
orif %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 中的the
.
應該是一個文字字符,因此在搜尋字串中對其進行轉義,例如\.
; - 你使用的後綴
*$
是錯誤的,它應該是.*$
,但無論如何都不需要;我會附加一個文字點(\.
),但不匹配類似的東西https://www.youtubefake.net/
,例如;
答案2
歡迎來到超級用戶。
如果您試圖確認某些文字以「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" 變數中沒有任何內容網址
- 將其與未完成替換的版本進行比較。
- 如果它們相同,則字串“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
)
請注意每個字串開頭的“*”。 「*」並不神奇。