ralus67
Goto Top

Zeilen in Batch löschen bis ensprechender Text gefunden

Hallo Community

Ich mochte aus einer Datei Zeilen entfernen bis der Text -----BEGIN CERTIFICATE----- erscheint

Bei einer Umwandlung einer Zertifikatsdatei wurde mir diese mit Attributen erstellt. Sind 9 Zeilen, wobei ich mir nicht sicher sein kann, ob das immer 9 Zeilen sind

Somit möchte ich lieber nach -----BEGIN CERTIFICATE----- suchen und alle Zeilen oberhalb löschen. Wie könnte ich das über ein Batch lösen?

Im Moment habe ich es mit untenstehenen Syntax gelöst wobei das +9 für die Anzahl Zeilen steht, was nicht garantiert ist.

@echo off
for %%i in (Ramon.crt) do (
more +9 "%%i">"%%i.temp"  
del "%%i"  
)

Im Voraus vielen Dank für Eure Hilfe
Ralus67

Content-Key: 615227

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

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: rubberman
rubberman 22.10.2020 aktualisiert um 18:09:12 Uhr
Goto Top
Ich verstehe den aktuellen Sinn deiner FOR Schleife nicht, um ehrlich zu sein. Ramon.crt ist doch die Datei die du einkürzen willst, oder liege ich falsch?
set "filename=Ramon.crt"  
for /f "delims=:" %%i in ('findstr /nc:"-----BEGIN CERTIFICATE-----" "%filename%"') do (  
  more +%%i "%filename%">"%filename%.temp"  
  del "%filename%"  
)
Ungetestet ...

Steffen
Mitglied: 146189
146189 23.10.2020 aktualisiert um 13:38:34 Uhr
Goto Top
Nimm doch gleich die Powershell mit nem büschen Regex schnell gemacht ...
[regex]::Match((gc 'D:\datei.txt' -raw),'(?sm)^-----BEGIN CERTIFICATE-----.*?^-----END CERTIFICATE-----').Value | sc 'D:\cert.cer'  
Geht auch in ner Batch verwurstet
powershell -EP Bypass -C "[regex]::Match((gc 'D:\datei.txt' -raw),'(?sm)^-----BEGIN CERTIFICATE-----.*?^-----END CERTIFICATE-----').Value | sc 'D:\cert.cer'"
Mitglied: Ralus67
Ralus67 24.10.2020 um 20:48:44 Uhr
Goto Top
Hallo Rubbermann

Ich muss dieverse Zertifikate in einer Datei zusammenführen. Dabei dürfen die Attribute eines Zertifikates nicht vorhanden sein. Das war in meinem Fall leider so... Somit möchte ich diese Attribute bis zur letzten Zeile vor ——- BEGIN CERTIFICATE —— löschen.
Mitglied: rubberman
rubberman 24.10.2020 aktualisiert um 21:27:31 Uhr
Goto Top
Meine Frage war, ob Ramon.crt in deinem Code die Datei ist, die eingekürzt werden soll?
Wenn dem so ist, sollte mein Code tun was du willst. Schon getestet?

Steffen
Mitglied: Ralus67
Ralus67 24.10.2020 um 22:57:13 Uhr
Goto Top
Ja, das ist die Datei welche eingekürzt werden muss.

Vielen Dank für Deine Hilfe. Ich werde es gleich morgen umsetzen.
Mitglied: Ralus67
Ralus67 25.10.2020 um 10:15:13 Uhr
Goto Top
Hallo Rubbermann

Die Definition im Skript, mit dem Ausschneiden funktioniert nicht ganz korrekt. Leider wird mir auch die Zeile -----BEGIN CERTIFICATE----- weggeschnitten. Diese muss jedoch als erste Zeile im Zertifikat enthalten sein, da sonst das Zertifikat nicht gültig ist.

Im Anhang findest du drei Printscreens, welche das Problem optisch zeigen.
cert1
cert3
cert2
Mitglied: rubberman
rubberman 25.10.2020 aktualisiert um 11:50:18 Uhr
Goto Top
Dann einfach 1 subtrahieren ...
set "filename=Ramon.crt"  
for /f "delims=:" %%i in ('findstr /nc:"-----BEGIN CERTIFICATE-----" "%filename%"') do (  
  for /f %%j in ('set /a "%%i-1"') do more +%%j "%filename%">"%filename%.temp"  
  del "%filename%"  
)
Steffen
Mitglied: Ralus67
Ralus67 25.10.2020 um 12:08:30 Uhr
Goto Top
Super... hat geklappt.
Vielen Dank für Deine Hilfe.