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

Anführungszeichen aus Textdatei auslesen und schreiben

Frage Entwicklung Batch & Shell

Mitglied: Midnightmaster

Midnightmaster (Level 1) - Jetzt verbinden

27.06.2009, aktualisiert 13:21 Uhr, 5052 Aufrufe, 7 Kommentare, 1 Danke

Hi!

Ich möchte gerne per Batch in einer Configdatei einen Wert verändern, was auch teilweise funktioniert.

Inhalt der Config:

Diverse Werte...
.
.
<log="connect1">214</tc>
.
.

Soll verändert werden in z.B.:

<log="connect1">88</tc>

Auszug aus der Batch:

@echo off & setlocal enabledelayedexpansion
set "Datei=C:\Data\connect.cfg"
set "Von=214"
set "Nach=88"
set "t=%temp%\connect.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set "Line=!Line:%Von%=%Nach%!" & >>"%t%" echo !Line!
move "%t%" "%Datei%"

Nachteil hierbei ist, das der vorherige Wert immer 214 sein muss (großer nachteil) und andere Werte in der Config die auch 214 sind
auch in 88 geändert werden.
Problem ist, das die zuweisung in Anführungszeichen steht (Nicht zu ändern). Hab da schon viel mit der Syntax herumgebastelt, aber
nichts brauchbares erreicht!
Sowas kommt dabei heraus wenn ich am basteln bin:

<log=""connect1">88</tc>
oder bei ignorierung des vorherigen Wertes:
<log="connect1">88</tc>>214</tc>

Am besten wäre es, wenn der vorherige Wert egal wäre und einfach nur der neue gesetzt werden würde!

Gruß
Midnightmaster
Mitglied: pieh-ejdsch
27.06.2009 um 13:55 Uhr
01.
for /f "tokens=1,2 delims=<" %%i in ('findstr "log="connect1"" C:\Data\connect.cfg') do if "%%j"=="214</tc>" echo ^%%i^>88^</tc^>>>%temp%\connect.tmp
Bitte warten ..
Mitglied: Midnightmaster
27.06.2009 um 14:44 Uhr
Zitat von pieh-ejdsch:
01.
for /f "tokens=1,2 delims=<" %%i in  ('findstr "log="connect1""  C:\Data\connect.cfg') do if "%%j"=="214</tc>" echo  ^%%i^>88^</tc^>>>%temp%\connect.tmp

Irgendwie funktioniert das nicht! Wie muss ich das denn in die ursprüngliche Batch einbinden? Hab diverse Varianten
probiert, aber keinerlei änderung an der cfg. Sagte ich schon, das ich von der Batch-Programmierung wenig bis
gar keine ahnung habe?

Gruß
Midnightmaster
Bitte warten ..
Mitglied: bastla
27.06.2009 um 16:16 Uhr
Hallo Midnightmaster und willkommen im Forum!

Die Bearbeitung von HTML-/XML-Dateien mit Batch ist wegen der besonderen Bedeutung von "<" und ">" in der CMD-Shell etwas mühsam (weshalb ich dann eher zu VBS greife), sollte sich aber vielleicht so trotzdem machen lassen:
01.
@echo off & setlocal 
02.
set "cfg=C:\Data\connect.cfg" 
03.
set "alt=<log=\"connect1\">" 
04.
set "neu=^<log="connect1"^>88^</tc^>" 
05.
 
06.
move "%cfg%" "%cfg%.bak" 
07.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%cfg%.bak"') do ( 
08.
    echo "%%j"|findstr /c:"%alt%">nul && (echo %neu%) || echo\%%j 
09.
)>>"%cfg%" 
10.
del "%cfg%.bak"
Grüße
bastla

[Edit] Zeile 3 gekürzt, sodass nicht mehr nach "214" gesucht wird [/Edit]
Bitte warten ..
Mitglied: Midnightmaster
27.06.2009 um 16:58 Uhr
Cool, vielen Dank!

Mit einer kleinen änderung ist es jetzt auch egal, wie der Wert vorher war:
01.
@echo off & setlocal 
02.
set "cfg=C:\Data\connect.cfg" 
03.
set "alt=<log=\"connect1\">" 
04.
set "neu=^<log="connect1"^>88^</tc^>" 
05.
 
06.
move "%cfg%" "%cfg%.bak" 
07.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%cfg%.bak"') do ( 
08.
    echo "%%j"|findstr /c:"%alt%">nul && (echo %neu%) || echo\%%j 
09.
)>>"%cfg%" 
10.
del "%cfg%.bak"
Gruß
Midnightmaster



[Edit Biber] Code in Codetags gesetzt. [/Edit]
Bitte warten ..
Mitglied: LotPings
27.06.2009 um 19:25 Uhr
Hallo Midnightmaster.

Hier noch ein Einzeiler mit Sed und Regular Expressions.

sed -re "s|^(<log=\"connect1\">)214(</tc>$)|\188\2|g" test.txt

^und $ sind Anker für Zeilenanfang/-Ende.
Anführungszeichen müssen mit \ escaped werden,
Klammern kennzeichnen Bereiche, die in die Ausgabe mit Angabe von \1 für das erste Paar etc übernommen werden können.

Sed bekommt man u.a, Hier
Und hier ein Tutorium

Gruß
LotPings
Bitte warten ..
Mitglied: bastla
27.06.2009 um 19:37 Uhr
@LotPings
Vielleicht noch besser dem Vorhaben von Midnightmaster entsprechend:
sed -re "s|^(<log=\"connect1\">)[0-9]+(</tc>$)|\188\2|g" C:\Data\connect.cfg

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
27.06.2009 um 19:41 Uhr
Danke für den Hinweis bastla,

das stand auch mal so da, aber ist beim überarbeiten abhanden gekommen

Gruß
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

HTML
gelöst Mit HTML Datei eine Textdatei auslesen (7)

Frage von Maffi zum Thema HTML ...

Windows Server
gelöst AD-User einer AD-Gruppe auslesen und in ein File schreiben (15)

Frage von Estefania zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...