Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch-Skript IF-Anweisung mit Klammer in Variable funktioniert nicht

Frage Entwicklung Batch & Shell

Mitglied: PSaR04

PSaR04 (Level 1) - Jetzt verbinden

24.09.2012, aktualisiert 19:39 Uhr, 5749 Aufrufe, 3 Kommentare

Hallo,

folgendes Problem: Ich möchte ein Batch-Skript erstellen, welches innerhalb einer Textdatei eine bestimmte Zeile durch eine andere ersetzt. Dazu wird die Textdatei Zeile für Zeile mit einer for-Schleife ausgelesen und alle Zeilen, die nicht der gesuchten Zeile entsprechen werden direkt in ein neues Textdokument geschrieben. Wenn das Skript auf die gesuchte Zeile trifft, wird hingegen eine andere Zeile in die neue Textdatei geschrieben.

Hier erstmal der Code-Schnipsel:
01.
@echo off & setlocal 
02.
 
03.
set Text=BeispielText(123)abc 
04.
 
05.
Type Nul >C:\NeueDatei.txt 
06.
for /f "tokens=1* delims=:" %%A in ('findstr /N "^" "C:\AlteDatei.txt"') do if %%A==3 (echo %Text%>>C:\NeueDatei.txt) else (echo/%%B>>C:\NeueDatei.txt)
Wenn ich die Batchdatei so ausführe, fehlt allerdings die geänderte Zeile komplett in der neuen Textdatei. Das Problem hängt mit den Klammern in dem neuen Text zusammen (Variable "Text"). Wenn ich die schließende Klammer hinter der 3 weglasse (also "BeispielText(123abc") klappt nämlich alles. Außerdem klappt auch alles einwandfrei, wenn ich in dem IF-Befehl die neue Zeile hart eintrage und vor die Klammer ein ^ hinzufüge (also "echo BeispielText(123^)abc>>C:\NeueDatei.txt").
Nun meine Frage, wie bekomme ich es hin, dass ich die Klammer und die Variable verwenden kann?
Mitglied: pieh-ejdsch
24.09.2012, aktualisiert um 20:15 Uhr
moin PSaR04,

erstmal danke für die sehr ausfühliche Beschreibung.

Die schliesende Klammer in der Variable wird nicht Maskiert und daher wird sie so behandelt, als wäre sie die Schliesende Klammer der if Anweisung.
Du kannst die Maskierung schon zur Aufnahme in die Variable benutzen.
set "text=Beispiel^(123^&weiteres^|^)"
Die Variable lässt sich auch richtig mit delayedexpansion benutzen.
01.
@echo off 
02.
setlocal disabledelayedexpansion 
03.
 
04.
set "Text=Beispie mit (klammer1234)text" 
05.
 
06.
findstr /n "^" "C:\altedatei.txt" >"%temp%\%~n0tmp.txt" 
07.
3>"D:\neue Datei" ( 
08.
 for /f usebackqdelims^= %%i in ("%temp%\%~n0tmp.txt" ) do ( 
09.
  set "Line=%%i" 
10.
  setlocal enabledelayedexpansion 
11.
  for /f "delims=:" %%h in ("%%i") do if %%h equ 3 (>&3 echo(!Text!) else >&3 echo(!Line:*:=! 
12.
  endlocal 
13.
)) 
14.
del "%temp%\%~n0tmp.txt"
Gruß Phil
Bitte warten ..
Mitglied: PSaR04
24.09.2012 um 20:29 Uhr
Hallo pieh-ejdsch,

danke für die schnelle Antwort, ich probiere das mal aus, aber ich denke, dass ich damit klarkomme.

Gruß
Patrick
Bitte warten ..
Mitglied: PSaR04
24.09.2012 um 21:02 Uhr
Hallo,

vielen Dank nochmal, jetzt läuft alles. Hier noch mal der funktionierende Code:

01.
@echo off & setlocal 
02.
 
03.
set "text=Beispiel^(123^)abc" 
04.
 
05.
Type Nul >C:\NeueDatei.txt 
06.
for /f "tokens=1* delims=:" %%A in ('findstr /N "^" "C:\AlteDatei.txt"') do if %%A==3 (echo %Text%>>C:\NeueDatei.txt) else (echo/%%B>>C:\NeueDatei.txt)
Gruß
PSaR04
Bitte warten ..
Ähnliche Inhalte
Windows 7
gelöst Batch-Skript oder VBS Skript zum Sichern von Office Vorlagen (2)

Frage von Ceejaay zum Thema Windows 7 ...

Batch & Shell
gelöst Variable per Batch auslesen und in Registry schreiben (3)

Frage von Zendara zum Thema Batch & Shell ...

Batch & Shell
gelöst Variablen Zusammenbauen 2.0 ( Batch ) (6)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch: Aktuelle Codepage in Variable speichern (3)

Frage von tomaschku zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Tools

Zeit für Energiesparmodus, Bildschirmabschaltung etc. schnell anpassen

Anleitung von hannsgmaulwurf zum Thema Windows Tools ...

Linux Netzwerk

Ping und das einstellbare Bytepattern

(1)

Erfahrungsbericht von LordGurke zum Thema Linux Netzwerk ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(4)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Heiß diskutierte Inhalte