
Ich habe den folgenden Code in Powershell:
if($url -match "^https://www.youtube"
)
Da ich dieselbe Prüfung im Stapel durchführen kann, habe ich Folgendes versucht, aber nichts:
echo %url% | findstr "^https://www.youtube*$" >nul
if %url% == 0 (
echo la variables es correcta
) else (
echo la varaible no es correcta
)
Antwort1
Ich würde es machen mitBedingte Ausführung:
cmd /V /C echo(!url!| findstr /I "^https://www\.youtube.\" > nul && (
echo la variable es correcta
) || (
echo la variable no es correcta
)
Weil:
- Sie überprüfen die falsche Variable (
if %url% == 0
), Sie solltenif %ErrorLevel% == 0
oderif %ErrorLevel% equ 0
oder sogar verwendenif not ErrorLevel 1
(was auch fürErrorLevel
Werte kleiner als Null gilt, aberfindstr
trotzdem keine solchen zurückgibt); eine nette Alternative istBedingte Ausführung; echo %url%
wird problematisch, wenn%url%
Sonderzeichen enthalten sind, daherverzögerte Expansionwird verwendet, um dies zu verhindern, aktiviert durchcmd /V
und angewendet durch!url!
anstelle von%url%
;echo
könnte bei bestimmten Werten Probleme haben!url!
, die durch das Schreiben von vermieden werden könnenecho(!url!
; außerdem würde ein nachgestelltes Zeichen spacevor dem Pipe-Symbol ( ) wiederholt, entfernen Sie es daher einfach;|
- Bei URLs wird normalerweise nicht zwischen Groß- und Kleinschreibung unterschieden. Führen Sie daher auch bei der Suche/Vergleichung keine Unterscheidung zwischen Groß- und Kleinschreibung durch, indem Sie
findstr /I
; - Das
.
in der URL ist als wörtliches Zeichen gedacht, maskieren Sie es daher in der Suchzeichenfolge wie folgt\.
: ; - das
*$
von Ihnen verwendete Suffix ist falsch. Es sollte lauten.*$
, ist aber sowieso nicht erforderlich. Ich würde jedoch einen wörtlichen Punkt () anhängen, um beispielsweise\.
nicht mit etwas wie übereinzustimmen .https://www.youtubefake.net/
Antwort2
Willkommen bei SuperUser.
Wenn Sie versuchen zu bestätigen, dass ein Text mit " beginnthttps://www.youtube*$
", Sie brauchen das am Ende nicht . Und ich bin mir nicht sicher, warum Sie %url% == 0
nach dem Vergleichen das tun findstr
. Wenn Sie das überprüfen, errorlevel
erfahren Sie, was Sie wissen möchten. Dieser Code tut, was Sie meiner Meinung nach erreichen möchten.
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
)
Antwort3
Aus Ihrem Beispiel geht nicht hervor, dass Sie einen tatsächlichen regulären Ausdruck benötigen. Sie können eine einfache Zeichenfolgensubstitution verwenden, um festzustellen, ob eine Zeichenfolge in einer anderen Zeichenfolge enthalten ist.
if "%url:https://www.youtube=%"=="%url%" (
echo variable is not in string
) else (
echo variable is in string
)
Die Syntax lautet %VAR_NAME:SEARCH_STRING=REPLACE_STRING%
Was wir hier sagen:
- Ersatz "https://www.youtube" ohne Inhalt in der Variable mit dem NamenURL (URL)
- Vergleichen Sie es mit einem, bei dem der Austausch nicht durchgeführt wurde.
- Wenn sie gleich sind, wird die Zeichenfolge „https://www.youtube" war nicht in der Variable.
Vorbehalte:
Diese Methode bietet nicht die Funktionalität, die der "^"-Anker in Powershell bot. Wenn die Variableenthält"https://www.youtube" überall, Ihre Übereinstimmung wird ungültig sein... zum Beispiel..."https://www.senorsuerte.com/value?https://www.youtube"einen Treffer produzieren würde, obwohl das nicht Ihre Absicht ist.
Dieser Fall lässt sich auch leicht beheben, indem man dem Anfang jeder der zu testenden Zeichenfolgen ein ungültiges Zeichen voranstellt.
if "*%url:https://www.youtube=%"=="*%url%" (
echo variable is not in string
) else (
echo variable is in string
)
Beachten Sie das „*“ am Anfang jeder Zeichenfolge. Das „*“ ist keine Zauberei. Es verankert unsere Abfrage lediglich am Anfang der Zeichenfolge und kann JEDES Zeichen sein.