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

XML Datei per Inhalt umbenennen

Frage Entwicklung Batch & Shell

Mitglied: JMS979

JMS979 (Level 1) - Jetzt verbinden

22.04.2013, aktualisiert 19:36 Uhr, 1997 Aufrufe, 10 Kommentare

Hallo,

Zur Archivierung unserer Abgasuntersuchungen wollte ich mir ne kleine Batch Datei basteln...

Die Übergabe der Daten erfolgt auf einer 3,5Zoll Diskette. Dort liegt z. B. diese
Beispiel XML Datei


ich möchte den Dateinamen durch Inhalte dieser XML ändern...

und zwar

1. <REGISTRATION>
und weil dieser Dateiname auch mehrmals vorkommen kann

2. <START_TEST>


Mein Traum sieht also (für die Beispiel XML) etwa so aus


WN-PT 101_01.12.2012 10:21.xml

Den Code den ich hier bisher fand


01.
:ProcessFile 
02.
set "Titel=" & set "Episode=" 
03.
for /f "tokens=3 delims=<>" %%t in ('findstr /i "<title>" %1^|findstr /iv "<title></title>"') do set "Titel=%%t" 
04.
for /f "tokens=3 delims=<>" %%e in ('findstr /i "<episode_number>" %1^|findstr /iv "<episode_number></episode_number>"') do set "Episode=%%e" 
05.
set "NameNeu=%~n1" 
06.
if defined Titel set "NameNeu=%NameNeu%_%Titel%" 
07.
if defined Episode set "NameNeu=%NameNeu%_%Episode%" 
08.
echo ren %1 "%NameNeu%%~x1" 
09.
goto :eof
ist leider nicht zielführend, der Inhalt von <REGISTRATION> wird erst bei "Tokens=17 bewertet...
an <START_TEST> komme ich so gar nicht ran, bei Tokens=31 ist Schluss!??




Der gesamte Ablauf der Archivierung würde (für mich) wenn die Umbenennung funktioniert wie folgt aussehen...

1. Diskette stecken und Archiv.Bat aufrufen
2. Archiv.Bat ruft das QS Programm auf und wartet bis dieses beendet ist (... wait) (das Programm ändert die Dateiendung nach einlesen in BAK)
3. Diskette auf Festplatte (Hilfsordner??) verschieben (move)
4. BAK in XML zurückschreiben

5. Dateinamen "logisch" umbenennen

6. alle Dateien in Archivordner verschieben...



1-4 und 6 bekomme ich hin nur an 5. scheitere ich.



Für die Hilfe bedanke ich mich im Voraus


Gruß Jens
Mitglied: Endoro
22.04.2013 um 19:29 Uhr
Hallo Jens,

das ist eine putzige XML: alles in einer Zeile.
Bist du sicher, dass du die richtig kopiert hast?


Gruss!
Bitte warten ..
Mitglied: JMS979
22.04.2013 um 19:36 Uhr
ich hab versucht sie so Original wie möglich zu belassen...

Ist nach ASA Network Standard (für Werkstattvernetzung)aufgebaut...

im Internet Explorer wird die Datei auch mit ihrer Struktur angezeigt...

in Phase5.6 kann ich sie nicht öffnen...


mit dem Programm kann man ein vollwertiges Duplikat erzeugen...


Gruß
Bitte warten ..
Mitglied: JMS979
22.04.2013, aktualisiert um 20:06 Uhr
Hab eben nochmal eine Datei direkt von Diskette hochgeladen

hier ein 2. Beispiel

könnte evtl. (nach hinten heraus...) etwas anders aufgebaut sein (OBD AU) aber die betreffenden Felder sind vorhanden...


Gruß Jens
Bitte warten ..
Mitglied: Endoro
22.04.2013, aktualisiert um 20:53 Uhr
Hallo,

Doppelpunkte sind nicht im Dateinamen erlaubt, habe ich durch Punkt ersetzt.

01.
@echo off &setlocal 
02.
set "xmlfile=19134803.XML" 
03.
set LF=^ 
04.
 
05.
 
06.
REM die beiden Zeilen über dieser MÜSSEN frei und leer bleiben !! 
07.
for /f "usebackqdelims=" %%i in ("%xmlfile%") do set "xmlline=%%i" 
08.
setlocal enabledelayedexpansion 
09.
set "xmlline=%xmlline:><=>!LF!<%" 
10.
for /f "tokens=1,2delims=<>" %%i in ("!xmlline!")do ( 
11.
	if "%%i" equ "REGISTRATION" set "REGISTRATION=%%j" 
12.
	if "%%i" equ "START_TEST" set "START_TEST=%%j" 
13.
)  
14.
set "START_TEST=%START_TEST::=.% 
15.
set "newxml=%REGISTRATION%_%START_TEST%.xml" 
16.
ren "%xmlfile%" "%newxml%" 
17.
endlocal
Den Dateinamen fügst du als "xmlfile" ein. Und auf die zwei Leerzeilen achten, sonst geht's nicht.

Viel Spass noch und Gruss!
Bitte warten ..
Mitglied: JMS979
22.04.2013, aktualisiert um 21:00 Uhr
genial und rasend schnell


so ziemlich genau das Ergebnis das ich seit Wochen suche....



kann man auch mehrere Dateien (ganzen Ordner mit XML) bearbeiten ??? *.XML???


Gruß und danke erstmal
Bitte warten ..
Mitglied: Endoro
22.04.2013, aktualisiert um 21:48 Uhr
Hallo,

eine Forschleife mehr und ein paar Fehlerprüfungen:
01.
@echo off &setlocal 
02.
set "xmlfile=" 
03.
set LF=^ 
04.
 
05.
 
06.
REM die beiden Zeilen über dieser MÜSSEN frei und leer bleiben !! 
07.
for /f "delims=" %%i in ('dir /b /a-d *.xml ^|sort /r') do set "xmlfile=%%~i"&call:process 
08.
goto:eof 
09.
 
10.
:process 
11.
for /f "usebackqdelims=" %%i in ("%xmlfile%") do set "xmlline=%%i" 
12.
setlocal enabledelayedexpansion 
13.
set "xmlline=%xmlline:><=>!LF!<%" 
14.
for /f "tokens=1,2delims=<>" %%i in ("!xmlline!")do ( 
15.
	if "%%i" equ "REGISTRATION" set "REGISTRATION=%%j" 
16.
	if "%%i" equ "START_TEST" set "START_TEST=%%j" 
17.
)  
18.
if not defined REGISTRATION echo "%xmlfile%": REGISTRATION nicht gefunden.&goto:eof 
19.
if not defined START_TEST echo "%xmlfile%": START_TEST nicht gefunden.&goto:eof 
20.
set "START_TEST=%START_TEST::=.%" 
21.
set "newxml=%REGISTRATION%_%START_TEST%.xml" 
22.
if not exist "%newxml%" (ren "%xmlfile%" "%newxml%") else echo "%newxml%" existiert schon.  
23.
endlocal 
24.
goto:eof 
25.
 
26.
endlocal
Gruss!
Bitte warten ..
Mitglied: JMS979
22.04.2013 um 21:54 Uhr
Ich bin sehr dankbar das ich hier Hilfe bekomme... (komme mir fast schon blöd vor "nur" LKW reparieren zu können )


beim aktuellen Code werden nur 9 Dateien umbenannt...

evtl. helfen mehrere Dateien zum testen 204 Stück


Danke Gruß Jens
Bitte warten ..
Mitglied: colinardo
22.04.2013, aktualisiert um 23:10 Uhr
Hallo Jens,

falls du auch VBS nutzen kannst hier eine Lösung die funktioniert:

Einfach den Speicherort der XML-Dateien und den Backup-Ordner in Zeile 2 und 3 angeben, als *.vbs abspeichern, doppelklick, fertig.

01.
Dim strRegistration, strStartTest, strNewFileName, xmlSourceFolder 
02.
xmlSourceFolder = "A:\XMLFiles\" 
03.
strBackupPath = "V:\Test\Backup\" 
04.
Set fso = WScript.CreateObject("Scripting.Filesystemobject") 
05.
Set xmlSourceFolder = fso.GetFolder(xmlSourceFolder) 
06.
 
07.
For Each xmlFile In xmlSourceFolder.Files 
08.
	If LCase(Right(xmlFile.Name,3)) = "xml" Then 
09.
		Set objXmlFile = fso.OpenTextFile(xmlFile.Path) 
10.
		strContent = objXmlFile.ReadAll() 
11.
		 
12.
		Set myRegExp = New RegExp 
13.
		myRegExp.IgnoreCase = True 
14.
		myRegExp.Pattern = "<REGISTRATION>(.*)</REGISTRATION>" 
15.
		Set myMatches = myRegExp.Execute(strContent) 
16.
		If myMatches.Count >= 1 Then 
17.
			Set myMatch = myMatches(0) 
18.
			If myMatch.SubMatches.Count >= 1 Then 
19.
				strRegistration = myMatch.SubMatches(0) 
20.
			End If 
21.
		End If 
22.
		 
23.
		myRegExp.Pattern = "<START_TEST>(.*)</START_TEST>" 
24.
		Set myMatches = myRegExp.Execute(strContent) 
25.
		If myMatches.Count >= 1 Then 
26.
			Set myMatch = myMatches(0) 
27.
			If myMatch.SubMatches.Count >= 1 Then 
28.
				strStartTest = Replace(myMatch.SubMatches(0),":","") 
29.
			End If 
30.
		End If 
31.
		 
32.
		strNewFileName = strRegistration & "_" & strStartTest & ".xml" 
33.
		fso.CopyFile xmlFile.Path, strBackupPath & strNewFileName 
34.
	End If 
35.
Next 
36.
Set myRegExp = Nothing 
37.
Set fso = Nothing 
38.
wscript.echo "Backup fertig!"
Grüße Uwe
Bitte warten ..
Mitglied: Endoro
22.04.2013, aktualisiert um 23:48 Uhr
Hallo,

der Grund, warum es nicht ging, ist einfach, aber heimtückisch. Wenn eine ASU dokumentiert wurde, wird die Zeilenlänge über 11.000 Zeichen lang, und damit kann Batch nicht mehr umgehen. Die Grenze liegt bei 8183 Zeichen und durch meine Ersetzung wird die Zeichenkette länger. Also habe ich die mal nach 6000 Zeichen gekürzt und damit hat es dann bei allen XML's geklappt!
01.
@echo off &setlocal 
02.
set "xmlfile=" 
03.
set LF=^ 
04.
 
05.
 
06.
REM die beiden Zeilen über dieser MÜSSEN frei und leer bleiben !! 
07.
for /f "delims=" %%i in ('dir /b /a-d *.xml ^|sort /r') do set "xmlfile=%%~i"&call:process 
08.
goto:eof 
09.
 
10.
:process 
11.
set "xmlline=" 
12.
for /f "usebackqdelims=" %%i in ("%xmlfile%") do if not defined xmlline set "xmlline=%%i" 
13.
setlocal enabledelayedexpansion 
14.
if not "!xmlline:~6000,1!"=="" set "xmlline=!xmlline:~0,6000!" 
15.
set "xmlline=%xmlline:><=>!LF!<%" 
16.
for /f "tokens=1,2delims=<>" %%i in ("!xmlline!")do ( 
17.
	if "%%i" equ "REGISTRATION" set "REGISTRATION=%%j" 
18.
	if "%%i" equ "START_TEST" set "START_TEST=%%j" 
19.
)  
20.
if not defined REGISTRATION echo "%xmlfile%": REGISTRATION nicht gefunden.&goto:fin 
21.
if not defined START_TEST echo "%xmlfile%": START_TEST nicht gefunden.&goto:fin 
22.
set "START_TEST=%START_TEST::=.%" 
23.
set "newxml=%REGISTRATION%_%START_TEST%.xml" 
24.
if not exist "%newxml%" (ren "%xmlfile%" "%newxml%") else echo "%newxml%" existiert schon.  
25.
:fin 
26.
endlocal 
27.
goto:eof 
28.
endlocal
Gruss!
Bitte warten ..
Mitglied: JMS979
22.04.2013 um 23:27 Uhr
Mensch ihr seid wirklich klasse!!!!!


Vielen Dank für die schnelle Hilfe...
hätt ich mal gleich nach fachgerechter Hilfe gesucht...



Gruß Jens
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Inhalt von XML-Dateien ändern
gelöst Frage von Kedi123Batch & Shell14 Kommentare

Hallo zusammen, wir haben täglich viele XML-Dateien, die unter anderem jeweils eine Festplattengröße in Byte enthalten (Zeile 16). Um ...

Batch & Shell
Dateien nach Inhalt umbenennen
gelöst Frage von IcemaniacBatch & Shell4 Kommentare

Hallo Community, ich hoffe Ihr könnt mir weiter helfen. Ich habe in einem Ordner hunderte txt-Dateien auf einem Windows-PC, ...

VB for Applications
Inhalt einer XML Datei Script ändern
gelöst Frage von chris27584VB for Applications4 Kommentare

Hallo zusammen, in folgendem Script <?xml version="1.0"?> -<SkClientConfig xmlns:xsi=" xmlns:xsd=" <LastServerIndex>1</LastServerIndex> <LastUser>11111</LastUser> <LastWorkplace>2358</LastWorkplace> -<SerializableFont> <FontValue>Microsoft Sans Serif; 8,25pt</FontValue> </SerializableFont> ...

Batch & Shell
PDF Dateien nach Inhalt einer TXT Datei umbenennen
gelöst Frage von Chris1979Batch & Shell2 Kommentare

Hallo zusammen, ich stehe gerade vor einem Problem und hätte eine Frage zur Umsetzung. Ich bin mit der Batch ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 8 StundenWindows 102 Kommentare

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 10 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner3 Kommentare

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 1 TagRouter & Routing

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

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

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

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

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...