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-Key: 581574

Url: https://administrator.de/contentid/581574

Printed on: April 18, 2024 at 03:04 o'clock

Member: NordicMike
NordicMike Jun 24, 2020 updated at 08:43:35 (UTC)
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.
Member: Otto54
Otto54 Jun 24, 2020 at 10:21:47 (UTC)
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.
Member: colinardo
colinardo Jun 24, 2020 updated at 12:09:54 (UTC)
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
Member: Otto54
Otto54 Jun 24, 2020 at 12:47:26 (UTC)
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.
Member: colinardo
Solution colinardo Jun 24, 2020, updated at Jun 25, 2020 at 08:43:36 (UTC)
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äß.
Member: Otto54
Otto54 Jun 24, 2020 at 14:53:13 (UTC)
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.
Member: colinardo
colinardo Jun 24, 2020 updated at 16:14:54 (UTC)
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.
Member: Otto54
Otto54 Jun 25, 2020 at 08:36:49 (UTC)
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.
Member: colinardo
colinardo Jun 25, 2020 updated at 08:52:00 (UTC)
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
Member: Otto54
Otto54 Jun 25, 2020 at 09:35:41 (UTC)
Goto Top
Super

Ich freue mich - klappt prima

Bleibt mir besten Dank zu sagen.
Mir wurde sehr geholfen.
Danke
Member: colinardo
colinardo Jun 25, 2020 updated at 09:47:02 (UTC)
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.
Member: Otto54
Otto54 Jun 25, 2020 at 09:54:41 (UTC)
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%'"