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

Per Batch XML ändern

Frage Entwicklung Batch & Shell

Mitglied: Nohouse303

Nohouse303 (Level 1) - Jetzt verbinden

10.08.2009, aktualisiert 18.10.2012, 6972 Aufrufe, 12 Kommentare

Es gibt keine Probleme: Nur Herausforderungen!

Hallo, bei mir hängt es mal wieder.

Ich muss via Batch Einträge aus einer xml oder txt-Datei suchen und von false auf true setzen.
Ich habe folgenden Ansatz:

@echo on & Setlocal

:: Defintition
set Datei=FWA.txt
set Neudatei=Zeile_neu.txt
set NeueZeile="<add key="DisableDCSTrace" value="true" />"

:: Jede Zeile der Datei auslesen und an u_Prog. übergeben
for /f "delims=" %%i in (%Datei%) do call :processline "%%i"

goto :end

:processline
set Quelle=%1

:: Nach String suchen
echo %Quelle%|find "false"

:: Zeilen Schreiben in neue Datei
If %Errorlevel% == 1 echo %Quelle% >>%Neudatei%
If %Errorlevel% == 0 echo %NeueZeile% >>%Neudatei%
goto :eof

:eof

:end
:: Originaldatei wieder herstellen
del %Datei%
ren %Neudatei% %Datei%

Soweit funktioniert das auch, nur: Leider schreibt er mir in die neue Datei die Zeilen in " ".

Wie kann ich die Zeilen ohne Häckchen oben schreiben?

Über Hilfe bin ich wie immer dankbar.

Gruss der Nohouse303
Mitglied: bastla
10.08.2009 um 14:28 Uhr
Hallo Nohouse303!

Wenn's denn wirklich (native) Batch sein muss, vielleicht so:
01.
@echo on & Setlocal 
02.
 
03.
:: Defintition 
04.
set Datei=FWA.txt 
05.
set Neudatei=Zeile_neu.txt 
06.
set "NeueZeile=^<add key="DisableDCSTrace" value="true" /^>" 
07.
 
08.
:: Jede Zeile der Datei auslesen und an u_Prog. übergeben 
09.
for /f "delims=" %%i in (%Datei%) do set "Zeile=%%i" & call :processline 
10.
:: Originaldatei wieder herstellen 
11.
move %Neudatei% %Datei% 
12.
goto :eof 
13.
 
14.
:processline 
15.
::Sonderzeichen maskieren 
16.
set "Zeile=%Zeile:<=^<%" 
17.
set "Zeile=%Zeile:>=^>%" 
18.
:: Nach String suchen 
19.
echo "%Zeile%"|find "false">nul && (>>%Neudatei% echo %NeueZeile%) || (>>%Neudatei% echo %Zeile%) 
20.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: rubberman
10.08.2009 um 14:29 Uhr
<edit> Falsch gelesen und schon beantwortet </edit>
Bitte warten ..
Mitglied: Nohouse303
10.08.2009 um 15:14 Uhr
Hallo, Bastla,

Danke für dein schnelles Posting.

ich habe mich nicht richtig ausgedrückt. Entschuldigung.

Ich muss den Eintrag für NeueZeile suchen und den Wert von false auf true ändern.

Dein Schnipsel macht leider nicht das was ich brauche.

Kannst du nochmal eingreifen, bitte!

Danke Gruss
Bitte warten ..
Mitglied: bastla
10.08.2009, aktualisiert 18.10.2012
Hallo Nohouse303!

Eigentlich hatte ich angenommen, Du wolltest die Zeile
<add key="DisableDCSTrace" value="false" />
durch die Zeile
<add key="DisableDCSTrace" value="true" />
ersetzen ...

Poste doch bitte (vorzugsweise mit "<code>-Formatierung") einen (ausschnittsweisen) "Vorher-Nachher"-Vergleich der Datei.

Grüße
bastla

P.S.: Falls es nicht "nur" Batch sein muss (sondern auch etwas VBScript enthalten sein darf), könntest Du vielleicht auch den Batch von hier (entsprechend angepasst und mit "^" vor ">" bzw ">" in den "Such"-/"Ersetzungs"-Strings) verwenden ...
Bitte warten ..
Mitglied: Nohouse303
10.08.2009 um 22:40 Uhr
Dein Ergebnis:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath=".\;.\DCS;.\DCS\WorkflowControler\Bin;.\DCS\DataContainer\Bin;.\DCS\Language\Bin;.\Base;.\Testprocedures;.\Base\HardwareRegistry\Bin\;.\External;.\DDB" />
</assemblyBinding>
</runtime>
<system.diagnostics>
<trace autoflush="true" />
<switches>
<!--
The trace levels should be set so that all errors and warnings are logged. In some cases
it might be reasonable to apply the Info level, e.g. ProgramFlow. It is very important that
the trace levels are used correctly when traces are implemented. Here are some guidelines:
ECHO ist eingeschaltet (ON).

-->

Und so sieht die Datei aus:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath=".\;.\DCS;.\DCS\WorkflowControler\Bin;.\DCS\DataContainer\Bin;.\DCS\Language\Bin;.\Base;.\Testprocedures;.\Base\HardwareRegistry\Bin\;.\External;.\DDB" />
</assemblyBinding>
</runtime>
<system.diagnostics>
<trace autoflush="true" />
<switches>
<!--
The trace levels should be set so that all errors and warnings are logged. In some cases
it might be reasonable to apply the Info level, e.g. ProgramFlow. It is very important that
the trace levels are used correctly when traces are implemented. Here are some guidelines:

-->
<add name="TraceLevel" value="3" /> <!-- DCS Trace Level (only affects Traces at DCS Level) -->
<add name="General" value="3" /> <!-- Traces that do not fit into other categories -->

</switches>
</system.diagnostics>
<appSettings>
<add key="DisableDCSTrace" value="false" />
<add key="LogFileDirectory" value="C:\TEMP" />

Richtig: Ich muss diesen und noch mehrere Einträge von false auf true setzen.
Endschuldige bitte das nicht korrekte Posting. Wie ich das mit der Code-Formatierung hinbekomme habe ich noch nicht kappiert.

gruss der Nohouse
Bitte warten ..
Mitglied: bastla
10.08.2009 um 23:18 Uhr
Hallo Nhouse303!

Da Du Dich offfensichtlich um die "mehreren" Einträge selbst kümmern willst, nur ein Vorschlag für "diesen" Eintrag:
01.
@echo off & setlocal 
02.
 
03.
set "Datei=FWA.txt" 
04.
set "R=%temp%\Repl.vbs" 
05.
 
06.
set  "Von=<add key=""DisableDCSTrace"" value=""false"" />" 
07.
set "Nach=<add key=""DisableDCSTrace"" value=""true"" />" 
08.
>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile("%Datei%").ReadAll:fso.CreateTextFile("%Datei%",True).Write Replace(T,"%Von%","%Nach%") 
09.
cscript //nologo %R%
Beachte bitte, dass die Anführungszeichen in der "Von"- bzw "Nach"-Angabe verdoppelt werden müssen und Groß-/Kleinschreibung berücksichtigt wird.

Es wird übrigens keine Sicherungskopie (Temporärdatei) erstellt, sondern "in" der Originaldatei ersetzt.

Grüße
bastla

P.S.: Wenn Du für diesen Kommentar "Mit Zitat" anklickst, kannst Du die Verwendung der "<code>"-Tags sehen ...
Bitte warten ..
Mitglied: Nohouse303
10.08.2009 um 23:46 Uhr
Hallo, wenn du einen Vorschlag für alle meine Einträge hast bin ich auch nicht traurig. (
Aber das was du gepostet hast ist VB-Script. Das ist für mich leider ein No go.

Gruss und gute Nacht.

Ps.: Ich hoffe du hast noch eine Idee.
Bitte warten ..
Mitglied: bastla
11.08.2009 um 00:45 Uhr
Hallo Nohouse303!
Aber das was du gepostet hast ist VB-Script.
Gepostet habe ich Batch - das VBScript wird vom Batch erzeugt ...

... anyhow, versuch es damit:
01.
@echo off & Setlocal 
02.
 
03.
:: Defintition 
04.
set Datei=FWA.txt 
05.
set Neudatei=Zeile_neu.txt 
06.
 
07.
::Ersetzung 
08.
set "Alt=\^<add key=\"DisableDCSTrace\" value=\"false\" /\^>" 
09.
set "Neu=^<add key="DisableDCSTrace" value="true" /^>" 
10.
call :Replace 
11.
 
12.
goto :eof 
13.
 
14.
:Replace 
15.
:: Jede Zeile der Datei auslesen und an u_Prog. übergeben; dabei Leerzeilen erhalten 
16.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Datei%"') do set "Zeile=%%j" & call :processline 
17.
:: Originaldatei wieder herstellen 
18.
move "%Neudatei%" "%Datei%" 
19.
goto :eof 
20.
 
21.
:processline 
22.
if not defined Zeile (>>"%Neudatei%" echo\) & goto :eof 
23.
set "Zeile=%Zeile:<=^<%" 
24.
set "Zeile=%Zeile:>=^>%" 
25.
:: Nach String suchen 
26.
echo "%Zeile%"|findstr /i /c:"%Alt%">nul && set "Zeile=%Neu%" 
27.
>>"%Neudatei%" echo %Zeile% 
28.
goto :eof
Was die anderen Einträge angeht: Durch wiederholte Verwendung der Zeilen 8 - 10 können auch mehrere Ersetzungen vorgenommen werden ...

Noch kurz zur Schreibweise des Suchbegriffes (%Alt%): Es müssen nicht nur (wie auch beim Ersetzungsstring %Neu%) die Umleitungszeichen "<" und ">" (durch "^") maskiert werden, sondern zusätzlich für die Verwendung mit "findstr" auch Anführungszeichen bzw "^" - in diesem Fall allerdings durch einen vorangestellten "\" ...

Grüße
bastla
Bitte warten ..
Mitglied: Nohouse303
11.08.2009 um 09:48 Uhr
Moin Moin,
vielen Dank erstmal. Wir müssten nur noch eine Kleinigkeit lösen.
Ich habe es mit IF versucht bekomme ich aber nicht hin.

Problem:
In der FWA.txt gibt es Zeilen ohne Inhalt. Wenn ich die Batch laufen lasse, wird an den Stellen
immer Echo ist angeschaltet eingetragen. Die Datei entspricht damit nicht dem Original.

Beispiel:

the trace levels are used correctly when traces are implemented. Here are some guidelines:
ECHO ist eingeschaltet (ON).
Error:

Das Progi muss im Prinzip nur einen Zeilensprung machen, wenn kein Eintrag in der Zeile ist. Aber wie?

Gruss der Nohouse303
Bitte warten ..
Mitglied: Biber
11.08.2009 um 10:09 Uhr
Moin NoHouse303,

ändere bastlas Zeile 27 so ab:
>>"%Neudatei%" echo\%Zeile% 
Grüße
Biber
Bitte warten ..
Mitglied: bastla
11.08.2009 um 11:02 Uhr
@Biber
Danke für die Ergänzung - diese sollte aber nur nötig sein, wenn die Zeile "ohne Inhalt" nicht völlig leer ist (dieser Fall wird bereits durch Zeile 22 behandelt), sondern zumindest ein Leerzeichen enthält.

Grüße
bastla
Bitte warten ..
Mitglied: Nohouse303
11.08.2009 um 11:11 Uhr
Hallo Biber, hallo Bastla.

Vielen Dank für Euren Input.
Es funktioniert tadellos.

Gruss der Nohouse.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
XML
gelöst XML Datei per Skript ändern (12)

Frage von chrisen zum Thema XML ...

Batch & Shell
gelöst Datum per batch ändern in Tagen (2)

Frage von crawnby zum Thema Batch & Shell ...

Batch & Shell
gelöst XML-Datei: Pfade suchen, verlinkte Dateien kopieren und Pfade ändern (4)

Frage von ELEVATOR zum Thema Batch & Shell ...

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

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

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...