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

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

Printed on: April 26, 2024 at 22:04 o'clock

Member: Friemler
Friemler Jan 28, 2013 updated at 16:31:06 (UTC)
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
Member: Blackhawk386
Blackhawk386 Jan 29, 2013 at 07:42:17 (UTC)
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.
Member: Friemler
Friemler Jan 29, 2013 at 09:07:20 (UTC)
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
Member: Blackhawk386
Blackhawk386 Jan 29, 2013 at 11:06:01 (UTC)
Goto Top
Funktioinert perfekt!

Vielen lieben Dank!
Member: Friemler
Friemler Jan 30, 2013 at 10:13:26 (UTC)
Goto Top
Dann setze bitte noch den Beitrag auf "Gelöst".
Member: Blackhawk386
Blackhawk386 Jan 30, 2013 at 11:01:33 (UTC)
Goto Top
Anfänger Fehler :D
Ist erledigt.
Member: KekseFuerAlle
KekseFuerAlle Jun 14, 2016 updated at 22:42:12 (UTC)
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ß