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, 5394 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 ..
Neuester Wissensbeitrag
Exchange Server

WSUS bietet CU22 für Exchange 2007 SP3 nicht an. EOL Exchange 2007

Tipp von DerWoWusste zum Thema Exchange Server ...

Ä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 Batch-Skript für Druckerzuweisung auf Terminalserver - Variablenproblem (3)

Frage von BirdyB zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Exchange Server
Test-ActiveSyncConnectivity Error nach neuem Zertifikat (17)

Frage von Driphex zum Thema Exchange Server ...

Batch & Shell
gelöst Batch xls nach aktuellem Datum auslesen und email senden (14)

Frage von michi-ffm zum Thema Batch & Shell ...

Backup
Datensicherung ARCHIV (12)

Frage von fautec56 zum Thema Backup ...