otto54
Goto Top

Set zuweisen von Sonderzeichen

Zuerst ein freundliches Hallo hier ans Forum.
Der Beitrag Suchen und Ersetzen hat mir geholfen. Klappt wunderbar.
Dafür Danke.

Ich will in einer html Datei mit einem Batch einen Anker ändern.

href="ofb4k1.html">  

Für eine eindeutige Identifizierung muss ich
//set suchen="a href="ofb4k123.html">"// 
erkennen
a) ich weiß nicht ob und wie ich eine Wildcard (*) in der set Anweisung setzen kann

b) ich scheitere auch an den Zeichen
//=">// 
Mir wäre schon geholfen wenn ich folgendes erkennen könnte
// set suchen=a href="ofb4k // 
das würde ich dann
// set ersetzen=a ="ofb3m // 

Ich habe bereits Escape-Sequenzen probiert - aber ohne Erfolg.

In Notepad++ verwende ich bei Suchen
// a href="ofb4k(.*?).html">// 
Ersetze mit
// a>//

Wie bringe ich dies in einen Batch auf Windows 10?

Content-ID: 581574

Url: https://administrator.de/forum/set-zuweisen-von-sonderzeichen-581574.html

Ausgedruckt am: 15.03.2025 um 06:03 Uhr

NordicMike
NordicMike 24.06.2020 aktualisiert um 10:43:35 Uhr
Goto Top
Die Escape Sequenzen sollten jedoch funktionieren. Wie lautete Deine Zeile dann?

Theoretisch so:

set suchen="a href=\"ofb4k123.htm\l">"   

Du kannst dir jedoch der Einfachheit halber Variablen bauen

$suchstring= "a href=\"ofb4k123.htm\l">"  
set suchen = $suchstring

Hab schon lange nicht mehr codiert, evtl muss es auch ein % Zeichen sein.
Otto54
Otto54 24.06.2020 um 12:21:47 Uhr
Goto Top
Dies wirkt wie erwartet:
set Suchen3="a href"  
set Ersetzen3="a"  

Folgende Varianten werden nicht erkannt
set Suchen3="a href="  
set Suchen3="a href\="  
set Suchen3="a href%="  


Ziel:
set Suchen3=a href="ofb4   
set Ersetzen3= a href="mfb3   

Ich bekomme =" nicht maskiert.
colinardo
colinardo 24.06.2020 aktualisiert um 14:09:54 Uhr
Goto Top
Servus.

zu a)

arbeite mit findstr und einem FOR-Loop wenn du Wildcards einsetzen willst, das unterstützt rudimentäre Regex-Ausdrücke.

An deiner Stelle würde ich aber direkt die Powershell dafür nehmen da geht sowas rucki zucki und man muss sich nicht den Hals verbiegen.

(Get-Content 'D:\datei.html' -raw) -replace '(?<=a href=")([^"]+)','neuerlink.html' | Set-Content  'D:\datei_neu.html'


zu b).

Hier reicht es einfach das ganze Konstrukt in Anführungszeichen zu setzen
set "Suchen3=a href="  
Ansonsten kannst du in den meisten Fällen Sonderzeichen mit ^ escapen
set "Suchen3=a href^="  
Ist hier aber nicht nötig wenn du den ganzen Ausdruck in Anführungszeichen setzt.

Siehe auch
https://www.dostips.com/?t=Snippets.Escape

Grüße Uwe
Otto54
Otto54 24.06.2020 um 14:47:26 Uhr
Goto Top
Hallo,

wirkt leider nicht wie erwartet.
Die Anweisung stolpert an dem ="
set "Suchen3=a href^=^"of"  
set "Ersetzen3=a=^"pf"  


Vorher:
<a href="ofb4k1.html">  

Nachher:
<"of=a ="pf="ofb4k1.html">  

gewünschtes Ergebnis:
<a ="pfb4k1.html">  

Aber schon mal Danke für die Gedanken, die sich Einzelne gemacht haben.
colinardo
Lösung colinardo 24.06.2020, aktualisiert am 25.06.2020 um 10:43:36 Uhr
Goto Top
@echo off
set "file=D:\test.html"  
powershell -EP Bypass -C "(Get-Content '%file%') -replace '<a href=\""of[^>]+>([^<]*)</a>','$1' | set-content '%file%'"  
Fertig. So gehst du auch noch weiteren Problemen aus dem Weg die dir bei HTML-Dateien und Kodierung noch bevorstehen würden. Batch schön und gut, aber das ist für die heutige Zeit für solche Sachen absolut nicht mehr zeitgemäß.
Otto54
Otto54 24.06.2020 um 16:53:13 Uhr
Goto Top
Hallo colinardo,

powershell ist neu für mich. Aber mal los...
Batch und Dateien liegen in einem Verzeichnis.

So schaut der Anker vor dem Job aus:
<a href="ofb4k38.html">«08»</a>  

Meine html wird immer gleichförmig erzeugt.
In der html sind über 200 Zeilen, mit unterschiedlichem Wert vor .html. Deshalb suche ich einen Stapeljob.

a)
@echo off
set "file=arbeit4.html"  
powershell -EP Bypass -C "(Get-Content '%file%') -ireplace '(?<=a href=\"")of([^\""]+)','pf$1' | set-content '%file%'".  


nach dem Batch zeigt sich die Zeile mit der vorherigen Anweisung so:
//<a href="pfb4k38.html">«08»</a>//  


Ich benötige aber die Zeile ohne href
//<a ="pfb4k38.html">«08»</a>//  
Da kein href vorhanden ist, zeigt der Browser nur «08» an.


b)
Sauberes html wäre, so:
//<a>«08»</a>//

Wenn
<a href="ofb4k//*//.html">  
dann das Stück von < bis > löschen. Hier wäre ein Wildcard * von Nöten. Der Wert kann 1 bis 9999 sein.


Wie soll ich die Zeile powershell -EP Bypass .... ändern um Ergebnis a oder b zu erreichen.
colinardo
colinardo 24.06.2020 aktualisiert um 18:14:54 Uhr
Goto Top
Zitat von @Otto54:
nach dem Batch zeigt sich die Zeile mit der vorherigen Anweisung so:
//<a href="pfb4k38.html">«08»</a>//  
So wars gedacht.

Ich benötige aber die Zeile ohne href
//<a ="pfb4k38.html">«08»</a>//  
Kein Thema hab ich dir oben angepasst
Warum du das so haben willst bleibt mir ein Rätsel, Standardkonform ist das nicht...
Da kein href vorhanden ist, zeigt der Browser nur «08» an.
Warum nicht dann nicht gleich den a Tag löschen und nur den Inhalt stehen lassen?? Das wäre auch kein Thema.
Otto54
Otto54 25.06.2020 um 10:36:49 Uhr
Goto Top
Dein Vorschlag passt weitgehendst. Hier das Ergebnis:
https://personreport.krasna-photo-collection.de/de/3/reportI664.html
Nachfolgend daraus Beispiele.

Zitat von @Otto54:
Warum nicht dann nicht gleich den a Tag löschen und nur den Inhalt stehen lassen?? Das wäre auch kein Thema.

Das war mein Ansatz b)

Vorher:
<a href="ofb4k73.html">«09»</a>  

Nachher:
«09»

Die Nummer innerhalb der Chevrons soll bestehen bleiben.

Wäre für mein Ziel die sauberste Lösung.
In der Beispieldatei Seitenquelltext erster Block «09» und «10»


In der Beispieldatei Seitenquelltext erster Block «05» bis «08» wird die momentane Umsetzung mit der Powershell Zeile gezeigt
<a ="pfb4k1.html"">  


In der Beispieldatei Seitenquelltext erster Block «01» bis «04» habe ich mit dem Editor geändert
<a="pfb4k1.html">  
nach dem a ist das Leerzeichen entfernt.
nach html ist ein Anführungszeichen entfernt.

Diese Werte innerhalb der Chevrons «01» sollen nicht als Link angezeigt werden. Der läuft ins Leere. Es geht hier rein um die aufbereitete Information «??».


Dann noch ganz wichtig: Soweit Dir schon einmal herzlichen Dank.
Solche html-Seiten habe ich reichlich, darum mein Ansinnen diese maschinell zu ändern.

Darf ich deshalb noch einmal bitten
entweder, wie passe ich den Befehl an um Leerzeichen und " zu vermeiden.
oder zugegeben besser diesen Anker ganz weg.
colinardo
colinardo 25.06.2020 aktualisiert um 10:52:00 Uhr
Goto Top
wie passe ich den Befehl an um Leerzeichen und " zu vermeiden.
Hatte ich einen Tippfehler, aber da du ja sowieso die Entfernung des Ankers bevorzugst wie ich auch empfohlen habe, s. u.

oder zugegeben besser diesen Anker ganz weg.
Siehe dazu die Anpassung im Code oben.

Beispiel vorher
<a href="ofb4k73.html">Whatever comes here</a>
Nachher
Whatever comes here

Viel Erfolg
Grüße Uwe
Otto54
Otto54 25.06.2020 um 11:35:41 Uhr
Goto Top
Super

Ich freue mich - klappt prima

Bleibt mir besten Dank zu sagen.
Mir wurde sehr geholfen.
Danke
colinardo
colinardo 25.06.2020 aktualisiert um 11:47:02 Uhr
Goto Top
Schön wenn es dir hilft face-smile.

Wenn es das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
Otto54
Otto54 25.06.2020 um 11:54:41 Uhr
Goto Top
Dies ist die abschließend fertige Lösung:
powershell -EP Bypass -C "(Get-Content '%file%') -replace '<a href=\""of[^>]+>([^<]*)</a>','$1' | set-content '%file%'"