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

Printed on: April 19, 2024 at 05:04 o'clock

Member: rubberman
rubberman Oct 22, 2020 updated at 16:09:12 (UTC)
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 Oct 23, 2020 updated at 11:38:34 (UTC)
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'"
Member: Ralus67
Ralus67 Oct 24, 2020 at 18:48:44 (UTC)
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.
Member: rubberman
rubberman Oct 24, 2020 updated at 19:27:31 (UTC)
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
Member: Ralus67
Ralus67 Oct 24, 2020 at 20:57:13 (UTC)
Goto Top
Ja, das ist die Datei welche eingekürzt werden muss.

Vielen Dank für Deine Hilfe. Ich werde es gleich morgen umsetzen.
Member: Ralus67
Ralus67 Oct 25, 2020 at 09:15:13 (UTC)
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
Member: rubberman
rubberman Oct 25, 2020 updated at 10:50:18 (UTC)
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
Member: Ralus67
Ralus67 Oct 25, 2020 at 11:08:30 (UTC)
Goto Top
Super... hat geklappt.
Vielen Dank für Deine Hilfe.