Top-Themen

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, 5924 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
Batch Variable erzeugen mit Leerzeichen und Klammern
gelöst Frage von hipfzwirgelBatch & Shell11 Kommentare

Hallo an Alle, ich habe eine lösbare Aufgabe und finde die richtige Schreibweise nicht. Ich muss eine Variable in ...

Batch & Shell
Variable in Batch-Skript anscheinend nicht wirksam
gelöst Frage von KorbinianHBatch & Shell4 Kommentare

Hallo, Ich habe ein Skript geschrieben, dass jede Sekunde einen zuvor eingegebenen Host anpingt und prüft, ob dieser online ...

Batch & Shell
Set Anweisung mit einer Variable bearbeiten
Frage von RaidManBatch & Shell3 Kommentare

Guten Abend zusammen, tschuldigung für die späte sonntägliche Frage ;) ich möchte von einem String den Anfang kürzen und ...

PHP
Hilfe bei PHP IF-Anweisung für Joomla
Frage von d4shoerncheNPHP2 Kommentare

Guten Morgen, ich frickel mir gerade eine Joomla-Extension nach meinen Wünschen und Anforderungen über die Template-Overrides um. Das funktioniert ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 2 StundenViren und Trojaner

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 6 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server15 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell10 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Windows Server
Administratoren-Gruppe abfragen?
Frage von 1410640014Windows Server6 Kommentare

Hallo, kennt jemand eine einfache (und schnelle) Möglichkeit, von allen Client-Computern im Active Directorey die Administratoren-Gruppe abzufragen, wer da ...