PS: raw bzw. rohe zeichenkentten zerlegen u. zeichenkette in einer zeichenkette ausschneiden
grüße.
#1
ich habe diesen befehl:
der mir filgende ausgabe liefert:
ich würde gern die 2 werte isolieren.
da ich ein einzeiler brauche, so werde ich den befehl für jeden wert einzeln ausführen.
dieser befehl würd später über die cmd-shell mit einer for-schleife ausgeführt.
ich habe das gefühl ich hab irgend ein befehl übersehen... o.O
#2
aber diese ausgabe erinnert mich an ein allgemeineres problem.
ich habe eine zeichenkette:
und normalerweise wird ein trennzeichen bestimmt um zeichenketten zu zerlegen.
hier ' # '
also habe ich mir gedacht wäre es nicht möglich zusagen:
- am anfang befindet sich "bcd"
- am ende befindet sich "uvw"
- gebe mir den inhalt dazwischen "#efghijklmno#pqrst#"
da ich die sonderzeichen im wert behalten möchte.
diese #2 aufgabe ist konstroiert,
wein workaround ist zwar lustig,
aber ich hätte gern dieses problem gelöst,
bzw. erklärt warum es so nicht umsetzbar ist
vielen dank.
#1
ich habe diesen befehl:
(((Invoke-WebRequest -UseBasicParsing -Method 'POST' -Uri 'https://store.rg-adguard.net/api/GetFiles' -Body 'type=url&url=https://apps.microsoft.com/store/detail/rufus/9PC3H3V7Q9CH&ring=Retail' -ContentType 'application/x-www-form-urlencoded').Links.outerHTML) | Select-String -Pattern 'Rufus' | Select-String -Pattern 'appx')
der mir filgende ausgabe liefert:
<a href="http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice/files/4d97ebfa-27a2-46cc-a860-978517c653bb?P1=1659173787&P2=404&P3=2&P4=mGAwPjTwY2hN54bD22E3fzsIcehHbNUzblvJ%2fgSpJh9KltcEZoLgYZKwHuIOf5xSjSgT66awNyPfPIV5qoDHmg%3d%3d"
rel="noreferrer">19453.net.Rufus_3.19.1911.0_neutral_~_y8nh7bq2a8dtt.appxbundle</a>
ich würde gern die 2 werte isolieren.
da ich ein einzeiler brauche, so werde ich den befehl für jeden wert einzeln ausführen.
dieser befehl würd später über die cmd-shell mit einer for-schleife ausgeführt.
ich habe das gefühl ich hab irgend ein befehl übersehen... o.O
#2
aber diese ausgabe erinnert mich an ein allgemeineres problem.
ich habe eine zeichenkette:
...uvwxyzabcd#efghijklmno#pqrst#uvwxyzabcd...
hier ' # '
also habe ich mir gedacht wäre es nicht möglich zusagen:
- am anfang befindet sich "bcd"
- am ende befindet sich "uvw"
- gebe mir den inhalt dazwischen "#efghijklmno#pqrst#"
da ich die sonderzeichen im wert behalten möchte.
diese #2 aufgabe ist konstroiert,
wein workaround ist zwar lustig,
aber ich hätte gern dieses problem gelöst,
bzw. erklärt warum es so nicht umsetzbar ist
vielen dank.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3495550772
Url: https://administrator.de/contentid/3495550772
Ausgedruckt am: 18.11.2024 um 01:11 Uhr
5 Kommentare
Neuester Kommentar
Servus.
Das Zerlegen der HTML-Tags mit Regular Expressions ist hier also nicht nötig, kann man machen ist hier aber überflüssig da Invoke-WebRequest die nötigen Attribute schon für dich aufteilt.
Falls es dich trotzdem interessiert hier mal anhand deines Beispiels oben (beachte das man hier im Regex einige Zeichen wegen der Ausführung in einer Batchdatei/For-Loop extra escapen muss wie bspw. das Anführungszeichen und die Tilde(^))
So würde ich es aber wie gesagt definitv nicht machen wollen ...
Der Powershell-Part verbinden beide Teile (Name und Link) mittels '|' gibt sie aus und die For-Schleife splittet diese dann mit dem Delimiter '|' für die Nutzung in der Batch. Zwei extra Aufrufe also ebenfalls überflüssig.
Grüße Uwe
p.s.
ich habe das gefühl ich hab irgend ein befehl übersehen... o.O
Jepp, das lässt sich ganz einfach lösen in dem du es einfach objektorientiert machst, so wie man fast alles in der Powershell am besten gleich objektorientiert abarbeitet@echo off
for /f "tokens=1,2 delims=|" %%a in ('powershell -EP Bypass -C "(Invoke-WebRequest -Method Post -Uri 'https://store.rg-adguard.net/api/GetFiles' -Body 'type=url&url=https://apps.microsoft.com/store/detail/rufus/9PC3H3V7Q9CH&ring=Retail' -ContentType 'application/x-www-form-urlencoded').Links | ?{$_.innerText -match 'Rufus.*appx'} | %%{$_.innerText + '|'+ [System.Net.WebUtility]::HtmlDecode($_.href)}"') do (
echo Name: %%a
echo Link: %%b
)
Falls es dich trotzdem interessiert hier mal anhand deines Beispiels oben (beachte das man hier im Regex einige Zeichen wegen der Ausführung in einer Batchdatei/For-Loop extra escapen muss wie bspw. das Anführungszeichen und die Tilde(^))
@echo off
for /f "tokens=1,2 delims=|" %%a in ('powershell -EP Bypass -C "(Invoke-WebRequest -Method Post -Uri 'https://store.rg-adguard.net/api/GetFiles' -Body 'type=url&url=https://apps.microsoft.com/store/detail/rufus/9PC3H3V7Q9CH&ring=Retail' -ContentType 'application/x-www-form-urlencoded' -UseBasicParsing).Links.outerHTML | ?{$_ -match 'href=\"([^^^^\"]+).*?>(.*Rufus.*appx.*)<'} | %%{$matches[2] + '|' + $matches[1]}"') do (
echo Name: %%a
echo Link: %%b
)
Der Powershell-Part verbinden beide Teile (Name und Link) mittels '|' gibt sie aus und die For-Schleife splittet diese dann mit dem Delimiter '|' für die Nutzung in der Batch. Zwei extra Aufrufe also ebenfalls überflüssig.
Grüße Uwe
p.s.
da ich ein einzeiler brauche, so werde ich den befehl für jeden wert einzeln ausführen. dieser befehl würd später über die cmd-shell mit einer for-schleife ausgeführt.
Powershell lässt sich auch schön hybrid in einer Batch ausführen, Einzeiler vollkommen überflüssig .Zitat von @zeddler0:
ui, das ging ja schnell.
big thx.
gibt es zu meiner konstruierten #2 frage auch eine lösung?
ui, das ging ja schnell.
big thx.
gibt es zu meiner konstruierten #2 frage auch eine lösung?
Ja, siehe zweites ergänztes Beispiel in meinem Kommentar oben. => Regular Expressions sind dein Freund
'...uvwxyzabcd#efghijklmno#pqrst#uvwxyzabcd...' -replace '.*bcd(.*)uvw.*','$1'
'...uvwxyzabcd#efghijklmno#pqrst#uvwxyzabcd...' -match '.*bcd(.*)uvw.*' | out-null
$matches[1]
'...uvwxyzabcd#efghijklmno#pqrst#uvwxyzabcd...' -match '(?<=bcd).*(?=uvw)' | out-null
$matches
[regex]::match('...uvwxyzabcd#efghijklmno#pqrst#uvwxyzabcd...','(?<=bcd).*(?=uvw)').Value
Regex hilft dir bei jeglichen Text-Extrahierungen in der Regel immer weiter, sei das Problem auch noch so komplex.
Da hat die IE-Engine entsprechende HTML Entities für das "&" eingefügt, habe oben einen kleinen Fix dafür hinzugefügt. Solche Links werden in der Regel automatisch korrigiert wenn man sie in einem Browser klickt.
https://stackoverflow.com/questions/11864864/is-using-amp-as-a-query-par ...
Passiert aber nicht wenn man das ganze einem Tool zum Download verfüttert.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
Schönes Wochenende.
https://stackoverflow.com/questions/11864864/is-using-amp-as-a-query-par ...
Passiert aber nicht wenn man das ganze einem Tool zum Download verfüttert.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
Schönes Wochenende.