blackhawk386
Goto Top

Beliebigen Text zwischen bestimmten ausdrücken per Batch oder Skript aus ini löschen

Hi,

ich möchte aus einer ini-Datei einen beliebigen Text zwischen zwei bestimmten ausdrücken, bzw. bis zu einen bestimmten Zeichen löschen. Das ganze soll per Skript oder Batch passieren.

Die ini baut sich wie folgt auf:

...
[Terminplaner]
beliebiger zu löschender Text
[PTimer]
...

Es soll also alles nach dem Ausdruck [Terminplaner] bis zur nächsten eckigen Klammer gelöscht werden,
da nicht auf jedem Rechner der Ausdruck [PTimer] nach [Terminkalender] folgt.

Ich hoffe es kann mir jemand helfen.

Viele Dank!

Content-ID: 197737

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

Ausgedruckt am: 24.11.2024 um 23:11 Uhr

Friemler
Friemler 28.01.2013 aktualisiert um 17:31:06 Uhr
Goto Top
Hallo Blackhawk386,

das könnte so gehen:
@echo off & setlocal

set "InFile=.\test.ini"  
set "OutFile=.\test_new.ini"  
set "BlockBegin=[Terminplaner]"  

set "DontWrite="  
set "Write="  

(for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%InFile%"') do (  
   if not defined DontWrite (
     echo.%%b
     if "%%b" equ "%BlockBegin%" set /a DontWrite+=1  
   ) else (
     echo.%%b|findstr "^\[.*" > NUL && set /a Write+=1  
     if defined Write echo.%%b
   )
)) > "%OutFile%"  

Gruß
Friemler
Blackhawk386
Blackhawk386 29.01.2013 um 08:42:17 Uhr
Goto Top
Super, tut genau was es soll!
Vielen Dank dafür.

Allerdings bekomm ich beim Ausführen Fehlermeldungen, ist das ein Problem?

D:\>terminplaner.bat
Der Befehl "6" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
Der Befehl "13" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
Der Befehl "14" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
Der Befehl "1" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
Der Befehl "2" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
Der Befehl "6" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
Der Befehl "9" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
Der Befehl "12" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
Der Befehl "3" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
Der Befehl "4" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
Der Befehl "5" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
Der Befehl "11" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
Friemler
Friemler 29.01.2013 um 10:07:20 Uhr
Goto Top
Moin Blackhawk386,

ich vermute, Deine Ini-Datei enthält &-Zeichen. Teste mal die folgende, abgeänderte Version des Scripts:
@echo off & setlocal

set "InFile=.\test.ini"  
set "OutFile=.\test_new.ini"  
set "BlockBegin=[Terminplaner]"  

set "DontWrite="  
set "Write="  

(for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%InFile%"') do (  
   if not defined DontWrite (
     echo.%%b
     if "%%b" equ "%BlockBegin%" set /a DontWrite+=1  
   ) else (
     <NUL set /p "=%%b"|findstr "^\[.*" > NUL && set /a Write+=1  
     if defined Write echo.%%b
   )
)) > "%OutFile%"  

Gruß
Friemler
Blackhawk386
Blackhawk386 29.01.2013 um 12:06:01 Uhr
Goto Top
Funktioinert perfekt!

Vielen lieben Dank!
Friemler
Friemler 30.01.2013 um 11:13:26 Uhr
Goto Top
Dann setze bitte noch den Beitrag auf "Gelöst".
Blackhawk386
Blackhawk386 30.01.2013 um 12:01:33 Uhr
Goto Top
Anfänger Fehler :D
Ist erledigt.
KekseFuerAlle
KekseFuerAlle 14.06.2016, aktualisiert am 15.06.2016 um 00:42:12 Uhr
Goto Top
Tachchen,
ich habe ein ähnliches Problem, wie in diesem Thread:

Eventuell kann mir jemand hierrauf aubauend weiterhelfen.
Und zwar will ich auch einen Text zwischen zwei Zeichen/Zeichenfolgen löschen.
Aber im Gegensatz zu dem oben beschriebenen Fall will ich das nicht in einer .txt Datei, sondern in einer Variable.
Desweiteren ist die Zeichenfolge jedesmal mit 1-2 Zeichen anders (die aber immer an der selben stelle stehen).
Also muss man wahrscheinlich mit Wildcards arbeiten, z.b. Fragezeichen.
Lässt sich das mit Batch überhaupt machen, oder muss man das mit Powershell machen? Wie würde das in Batch / Powershell aussehen?

Zum Beipiel:

Protokoll.T01.beliebigerzulöschenderText-Autor
Protokoll.T02.beliebigerzulöschenderText-Autor
etc ...


Ich hoffe da kann mir jemand weiterhelfen.

Gruß