Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 5852 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
Batch & Shell
gelöst Batch Variable erzeugen mit Leerzeichen und Klammern (11)

Frage von hipfzwirgel zum Thema Batch & Shell ...

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 ...

Neue Wissensbeiträge
Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(1)

Information von DerWoWusste zum Thema Microsoft ...

Humor (lol)

Wohnt jemand in Belgien und kann nicht mehr ruhig ausschlafen?

(6)

Information von LordGurke zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Router & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (19)

Frage von Dobby zum Thema Router & Routing ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (17)

Frage von liquidbase zum Thema Voice over IP ...

TK-Netze & Geräte
TK-Anlage VoIP - DECT Erweiterung (15)

Frage von Lynkon zum Thema TK-Netze & Geräte ...