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

Mit Batch eine XML-Datei bearbeiten

Frage Entwicklung Batch & Shell

Mitglied: Apokalypso

Apokalypso (Level 1) - Jetzt verbinden

23.03.2011 um 14:39 Uhr, 11254 Aufrufe, 4 Kommentare

Hallo zusammen,

ich bin seit einiger Zeit hier im Forum unterwegs, um eine Lösung auf mein Problem zu finden. Ich habe mir einige Code schnipsel aus diesen und anderen Foren zusammengesetzt und bin nun nahe der Lösung.

Situation:
Im Unternehmen haben wir rund 600 User die mit PGP arbeiten, leider befindet sich in einer der Konfigurations-Dateien (XML-Datei) ein Fehler. Die User arbeiten mit Windows XP, Vista, und 7.
Mit einer Batch-Datei möchte ich eine Zeile, die zwei mal vorkommt, verändern bzw. bearbeiten.

Von: \\XXX\data\userdaten\%USERNAME%\pgp\secring.skr
Nach: \\XXX\data\userdaten\%USERNAME%\pgp\Lokal\secring.skr

Leider hat mein Code ein Problem mit "<string> .... </string>". Die Sonderzeichen, werden nicht erkannt.
Es wäre klasse wenn einer den Fehler finden könnte bzw. mir mit meinem Problem weiter hilft.

XML Ausschnitt:
...
<key>privateKeyringFile</key>
<string>\\XXX\data\userdaten\Vorname.Nachname\pgp\secring.skr</string>
<key>publicKeyringFile</key>
<string>\\XXX\data\userdaten\Vorname.Nachname\\pgp\secring.skr</string>
</dict>
...

Batch-Datei:

@ECHO off
SETLOCAL enabledelayedexpansion

SET "quell_datei=C:\Users\%USERNAME%\Desktop\PGP_Config.xml"
SET "ziel_datei=C:\Users\%USERNAME%\Desktop\PGP_Config_new.xml"
SET "suchen_nach=\\XXX\data\userdaten\%USERNAME%\pgp\secring.skr"
SET "ersetzen_durch=\\XXX\data\userdaten\%USERNAME%\pgp\lokal\secring.skr"

REM Quell-Datei zeilenweise auslesen
REM und in Variable "zeile" schreiben
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO (
SET zeile=%%i& CALL :ersetzen !zeile!
)
GOTO :weiter
:ersetzen
REM innerhalb der Variable "zeile"
REM den Inhalt der Variable "suchen_nach" suchen
REM und diese durch den Inhalt der Variable "ersetzen_durch" ersetzen
SET zeile=!zeile:%suchen_nach%=%ersetzen_durch%!

REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben
IF [!zeile!] EQU [] (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%)
GOTO :eof

:weiter
REM weitere Verarbeitung

ECHO Fertig.

Vielen Danke schon mal.
Apokalypso
Mitglied: bastla
23.03.2011 um 15:24 Uhr
Hallo Apokalypso und willkommen als Mitglied im Forum!

Manchmal wirken ein paar Anführungszeichen Wunder (die übrigen Änderungen sind mehr kosmetischer Natur [Edit] mit Ausnahme der Vermeidung des überflüssigen Unterprogramm-Aufrufparameters !zeile! - dem fehlten nämlich die Anführungszeichen [/Edit]):
01.
@ECHO off & SETLOCAL enabledelayedexpansion 
02.
 
03.
SET "quell_datei=C:\Users\%USERNAME%\Desktop\PGP_Config.xml" 
04.
SET "ziel_datei=C:\Users\%USERNAME%\Desktop\PGP_Config_new.xml" 
05.
SET "suchen_nach=\\XXX\data\userdaten\%USERNAME%\pgp\secring.skr" 
06.
SET "ersetzen_durch=\\XXX\data\userdaten\%USERNAME%\pgp\lokal\secring.skr" 
07.
 
08.
REM Quell-Datei zeilenweise auslesen 
09.
REM und in Variable "zeile" schreiben 
10.
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO SET "zeile=%%i" & CALL :ersetzen 
11.
GOTO :weiter 
12.
 
13.
:ersetzen 
14.
REM innerhalb der Variable "zeile" 
15.
REM den Inhalt der Variable "suchen_nach" suchen 
16.
REM und diese durch den Inhalt der Variable "ersetzen_durch" ersetzen 
17.
SET "zeile=!zeile:%suchen_nach%=%ersetzen_durch%!" 
18.
 
19.
REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben 
20.
ECHO.!zeile!>>"%ziel_datei%" 
21.
GOTO :eof 
22.
 
23.
:weiter 
24.
REM weitere Verarbeitung 
25.
 
26.
ECHO Fertig.
Das "ECHO" in Zeile 20 würde zwar auch in der verkürzten Schreibweise Leerzeilen richtig ausgeben, allerdings überleben letztere ohnehin die "FOR"-Schleife nicht (womit sich auch "FINDSTR" in der derzeitigen Form einsparen ließe) ...

Grüße
bastla

P.S.: Da Du doch sicher wissen willst, wie hier "Code"-Formatierung zu erreichen ist: http://www.administrator.de/helpsystem/detail.php?idx=20#toc28
Bitte warten ..
Mitglied: Apokalypso
23.03.2011 um 16:05 Uhr
Hallo bastla,

danke für die schnelle Antwort.

[Edit]
Ich habe einen Denkfehler gehabt. Der Code ist vollkommen richtig.

[/Edit]

Mit freundlichen Grüßen Apokalypso
Bitte warten ..
Mitglied: bastla
23.03.2011 um 16:45 Uhr
Hallo Apokalypso!
Ich habe einen Denkfehler gehabt. Der Code ist vollkommen richtig.
Gratuliere - einen volkommenen Code habe ich bis jetzt noch nicht geschafft (vielleicht mit Ausnahme von "@echo Hello world!") ...

Grüße
bastla
Bitte warten ..
Mitglied: Apokalypso
23.03.2011 um 17:06 Uhr
Danke für deine Hilfe.

Den vollständigen Code hänge ich nocheinmal an.


01.
@ECHO off & SETLOCAL enabledelayedexpansion  
02.
 
03.
SET "quell_datei=%USERPROFILE%\XXX\PGP\PGPprefs.xml"  
04.
SET "ziel_datei=%USERPROFILE%\XXX\PGP\PGPprefs_new.xml"  
05.
SET "suchen_nach_1=\\XXX\data\userdaten\%USERNAME%\pgp\secring.skr"  
06.
SET "ersetzen_durch_1=\\XXX\data\userdaten\%USERNAME%\pgp\lokal\secring.skr"  
07.
 
08.
SET "suchen_nach_2=\\XXX\data\userdaten\%USERNAME%\pgp\pubring.pkr"  
09.
SET "ersetzen_durch_2=\\XXX\data\userdaten\%USERNAME%\pgp\lokal\pubring.pkr" 
10.
 
11.
SET "suchen_nach_3=X:\pgp"  
12.
SET "ersetzen_durch_3=X:\pgp\lokal" 
13.
 
14.
REM Quell-Datei zeilenweise auslesen  
15.
REM und in Variable "zeile" schreiben  
16.
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO SET "zeile=%%i" & CALL :ersetzen  
17.
GOTO :weiter  
18.
 
19.
:ersetzen  
20.
REM innerhalb der Variable "zeile"  
21.
REM den Inhalt der Variable "suchen_nach" suchen  
22.
REM und diese durch den Inhalt der Variable "ersetzen_durch" ersetzen  
23.
SET "zeile=!zeile:%suchen_nach_1%=%ersetzen_durch_1%!" 
24.
  
25.
SET "zeile=!zeile:%suchen_nach_2%=%ersetzen_durch_2%!" 
26.
 
27.
SET "zeile=!zeile:%suchen_nach_3%=%ersetzen_durch_3%!" 
28.
 
29.
REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben  
30.
ECHO.!zeile!>>"%ziel_datei%"  
31.
GOTO :eof  
32.
 
33.
:weiter  
34.
 
35.
rename "%USERPROFILE%\XXX\PGPprefs.xml" PGPprefs_old.xml 
36.
rename "%USERPROFILE%\XXX\PGPprefs_new.xml" PGPprefs.xml 
37.
 
38.
ECHO Fertig.
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
XML
XML Datei Fehler? (1)

Frage von Patrick-IT zum Thema XML ...

Batch & Shell
Script zum XML Datei Umschreiben (12)

Frage von cberndt zum Thema Batch & Shell ...

PHP
gelöst Externe XML-Datei in PHP auslesen (18)

Frage von Akrosh zum Thema PHP ...

Windows Server
Windows Bereitstellungsdienst und .xml-Datei erstellen (1)

Frage von Freddy88 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (14)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...