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

Aus Konfigurations Dateien eine Zeichenfolge auslesen und hinter den Dateinamen schreiben

Frage Entwicklung Batch & Shell

Mitglied: tommhii

tommhii (Level 1) - Jetzt verbinden

22.07.2012, aktualisiert 19:48 Uhr, 2743 Aufrufe, 21 Kommentare

mit einer find Abfrage lese ich aus vielen XML Konfigurations Dateien eine Versionsnummer aus wenn diese vorhanden ist soll der Dateiname in eine Datei geschrieben werden, aus den Dateien die jetzt in der ergebnis.log stehen möchte ich als info für mich den Servernamen hinter den Dateinamen schreiben um zu wissen welcher server die gleiche Versionsnummer hat , alles soll dann wieder in eine Datei geschrieben werden.

Folgendes Problem beschäftigt mich , es wäre schön wenn mir jemand einen tip geben könnte.
Ich habe in einen Ordner ca 10 xml Dateien aus denen lese ich eine bestimmte zeichenfolge aus. Wenn die Datei diese Zeichenfolge (25 , 30 ,10) enthält setze ich eine 1 an den Dateinamen und schreibe den Dateinamen in eine Datei

01.
 Find /C "25 , 30 ,10" *.xml | Find "XML: 1" > ergebnis.log > >
soweit klappt das ja, aber nun möchte ich von allen Dateien die in die ergebnis.log geschrieben wurden die Zeichenfolge "Servername" auslesen und den ausgelesenen Servername an den Dateinamen anhängen.
die Ausgabe sollte dann so in etwa aussehen

7238459.xml servername
4348940.xml servername

in jeder xml Datei steht ein anderer Servername. Der Servername der aus der xml Datei ausgelesen wurde sollte auch hinter dem richtigen Dateinamen stehen. Ich möchte automatisiert aus der Datei ergebnis.log
die einzelnen Dateien ansprechen die dort stehen.
wie kann man das machen? und den Wert der Abfrage hinter den Dateinamen in der Liste (ergebnis.log) schreibt.


VG
tommhi
Mitglied: bastla
22.07.2012, aktualisiert 23.07.2012
Hallo tommhii!

Soferne der Servername in einer eigenen Zeile so
<Servername>DerServer</Servername>
in der Datei steht, sollte sich das ganze Vorhaben etwa so umsetzen lassen (ungetestet):
01.
@echo off & setlocal 
02.
set "Version=25 , 30 ,10" 
03.
set "Tag=Servername" 
04.
set "Log=ergebnis.log" 
05.
 
06.
del "%Log%" 2>nul 
07.
for /f "delims=" %%i in ('findstr /mc:"%Version%" *.xml') do ( 
08.
    for /f "tokens=2 delims=<>" %%a in ('findstr /i "%Tag%" "%%i"') do >>"%Log%" echo %%i %%a 
09.
)
Grüße
bastla

[Edit] Suche nach "Servername" [Edit2] und Apostroph [/Edit2] ergänzt [/Edit]
Bitte warten ..
Mitglied: tommhii
23.07.2012 um 07:30 Uhr
Hallo bastla,

ja die Zeile Servername steht so in der Datei. Wo fragst du aber in dem Script nach dem Servernamen, in der Datei stehen natürlich noch andere Werte drin wie Version und Servername.

VG
tommhi
Bitte warten ..
Mitglied: bastla
23.07.2012 um 08:27 Uhr
Hallo tommhii!

Sorry - hatte ich gestern nur so zwischen Tür und Angel hingeschrieben - ist jetzt aber oben dabei ...

Grüße
bastla
Bitte warten ..
Mitglied: tommhii
23.07.2012, aktualisiert um 11:09 Uhr
Hallo bastla,

ich hab es mal getestet, aber es wird keine log Datei geschrieben und es kommt auch keine Fehler Meldung.


<Servername>DerServer</Servername> 
<Version>dieVersion</Version> 
<Hersteller>derHersteller</Hersteller> 
> 
Das sind jetzt nur 3 Einträge aus so einer xml Datei, aber nicht alle. Bis zu ca. 40 Einträge befinden sich in so einer xml -Datei die durchsucht werden soll.

VG
tommhi
Bitte warten ..
Mitglied: bastla
23.07.2012 um 12:03 Uhr
Hallo tommhii!

Ich habe jetzt noch das (hoffentlich) letzte fehlende Teilchen ("'") oben ergänzt ...

Grüße
bastla
Bitte warten ..
Mitglied: tommhii
23.07.2012 um 13:00 Uhr
Hallo bastla,

immernoch keine Reaktion von dem Script ,es entsteht immernoch keine .log .

VG
tommhi
Bitte warten ..
Mitglied: bastla
23.07.2012, aktualisiert um 13:59 Uhr
Hallo tommhii!

Dann stell mal auf "echo on" und schau Dir den Ablauf an bzw, einfacher, teste mal vorweg
findstr /mc:"25 , 30 ,10" *.xml
Grüße
bastla
Bitte warten ..
Mitglied: tommhii
23.07.2012 um 15:12 Uhr
komma war bei der Version an der falschen Stelle. Die ergebnis.log wird jetzt erstellt aber hinter dem Dateinamen steht nicht der servername sondern ein anderer Wert.


84087103058740391342603454333.xml /Sig
VG
tommhi
Bitte warten ..
Mitglied: bastla
23.07.2012, aktualisiert um 15:40 Uhr
Hallo tommhii!
hinter dem Dateinamen steht nicht der servername sondern ein anderer Wert.
Das Extrahieren des Servernamens erfolgt auf Basis der geposteten Beispielzeile
<Servername>DerServer</Servername>
indem anhand der Tennzeichen "<" und ">" das zweite entstehende Token "DerServer" gebildet wird - wenn die Zeile anders aussieht (inkl zB Leerzeichen am Zeilenanfang), kann die Zerlegung nicht funktionieren.

Um die Suche nach dem Tag genauer zu formulieren, könntest Du den Suchbegriff in Zeile 3 ergänzen:
set "Tag=set "Tag=^\<Servername\>"
Damit werden dann genau jene Zeilen gefunden, an deren Anfang "<Servername>" steht.

Eine etwas robustere Version (hier muss "<Servername>" nicht am Zeilenanfang stehen) könnte dann noch so aussehen:
01.
@echo off & setlocal 
02.
set "Version=25 , 30 , 10" 
03.
set "Tag=<Servername>" 
04.
set "Log=ergebnis.log" 
05.
 
06.
set "Suche=%Tag:<=\<%" 
07.
set "Suche=%Suche:>=\>%" 
08.
del "%Log%" 2>nul 
09.
for /f "delims=" %%i in ('findstr /mc:"%Version%" *.xml') do ( 
10.
    for /f "delims=" %%a in ('findstr /i "%Suche%" "%%i"') do set "Zeile=%%a" & call :ProcessLine "%%i" 
11.
12.
goto :eof 
13.
 
14.
:ProcessLine 
15.
for /f "tokens=2 delims=<>" %%s in ("%Zeile:*%Tag%=%") do >>"%Log%" echo %~1 %%s 
16.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: tommhii
30.07.2012 um 09:40 Uhr
hallo bastla,

sorry ich kann mich erst jetzt melden war eine woche nicht da. Danke erstmal für deine Mühe.
Leider geht es auch so nicht. Mit diesen Script werden nur noch 6 xml Dateinamen in das log geschrieben vorher waren es 56 . und so sieht das ergebnis aus :
53898011342591595702.xml /Sig woher das /Sig kommt weiss ich nicht. eigentlich sollte da der Servername stehen.

VG
Tommhii
Bitte warten ..
Mitglied: bastla
30.07.2012 um 11:28 Uhr
Hallo tommhii!

Ersetze das Unterprogramm ab Zeile 14 durch
01.
:ProcessLine 
02.
call set "Zeile=%%Zeile:*%Tag%=%%" 
03.
for /f "delims=<>" %%s in ("%Zeile%") do >>"%Log%" echo %~1 %%s 
04.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: tommhii
30.07.2012, aktualisiert um 13:19 Uhr
Hallo bastla,

das mit dem Servernamen passt jetzt, aber warum findet er nur 6 Dateinamen, wo er doch mit dem vorgehenden Script 56 gefunden hat.


VG
tommhi
Bitte warten ..
Mitglied: bastla
30.07.2012, aktualisiert um 15:36 Uhr
Hallo tommhii!

Bau mal zwischen Zeile 9 und 10 ein
01.
echo "%%i" 
02.
findstr /i "Servername" "%%i" 
03.
findstr /i "\<Servername\>" "%%i" 
04.
echo ------------------------------------
und starte den Batch aus der CMD-Shell - es werden jetzt für alle Dateien, die die richtige Versionsnummer enthalten, die Zeilen mit "Servername" bzw mit "<Servername>" angezeigt - daraus solltest Du dann Rückschlüsse ziehen könen ...

Grüße
bastla
Bitte warten ..
Mitglied: tommhii
30.07.2012 um 16:37 Uhr
hallo bastla,

ich hab das eingefügt vor dem 1. goto :eof, aber in der log Datei stehen wieder nur die 6 Dateinamen . So sieht es ja gut aus aber es müssten laut der Version 56 Dateien sein.

VG
tommhi
Bitte warten ..
Mitglied: bastla
30.07.2012 um 17:07 Uhr
Hallo tommhii!
ich hab das eingefügt vor dem 1. goto :eof
Da anscheinend
zwischen Zeile 9 und 10
nicht verständlich genug war: Füge die genannten Zeilen vor der Zeile mit der einzelnen Klammer, die vor dem ersten "goto :eof" steht, ein ...

Grüße
bastla
Bitte warten ..
Mitglied: tommhii
31.07.2012, aktualisiert um 07:58 Uhr
Hallo bastla,

ich habe es so eingefügt aber das Ergebnis bleibt das gleiche.
01.
 @echo off & setlocal 
02.
set "Version=25, 30, 10" 
03.
set "Tag=<Servername>" 
04.
set "Log=ergebnis.log" 
05.
set "Suche=%Tag:<=\<%" 
06.
set "Suche=%Suche:>=\>%" 
07.
del "%Log%" 2>nul 
08.
for /f "delims=" %%i in ('findstr /mc:"%Version%" *.xml') do ( 
09.
    for /f "delims=" %%a in ('findstr /i "%Suche%" "%%i"') do set "Zeile=%%a" & call  
10.
:ProcessLine "%%i" 
11.
echo "%%i" 
12.
findstr /i "Servername" "%%i" 
13.
findstr /i "\<Servername\>" "%%i" 
14.
echo ------------------------------------ 
15.
16.
goto :eof 
17.
:ProcessLine 
18.
call set "Zeile=%%Zeile:*%Tag%=%%" 
19.
for /f "delims=<>" %%s in ("%Zeile%") do >>"%Log%" echo %~1 %%s 
20.
goto :eof
VG
tommhi
Bitte warten ..
Mitglied: bastla
31.07.2012 um 11:12 Uhr
Hallo tommhii!
aber das Ergebnis bleibt das gleiche.
Falls Du damit den Inhalt der "ergebnis.log" meinst, kann das ja auch nicht anders sein - es wird ja nur ausgegeben, was mit den jeweiligen Suchvarianten gefunden wird, damit Du anhand dieser Ausgabe Rückschlüsse ziehen kannst; wie schon erwähnt liefert die Zeile 12 alle Zeilen, in denen "Servername" enthalten ist, und die Zeile 13 (stärker einschränkend) nur Zeilen, in denen "<Servername>" steht ...

Falls Du nicht, wie empfohlen, direkt aus der CMD-Shell testest, füge noch unmittelbar vor Zeile 16
pause
ein, damit Du die Ausgabe lesen kannst - mehr kann ich Dir, ohne Deine Dateien zu kennen, nicht anbieten ...

Grüße
bastla
Bitte warten ..
Mitglied: tommhii
31.07.2012 um 12:01 Uhr
Hallo bastla,

in dem Ordner wo sämtliche xml Dateien stehen habe ich eine Suche mit diesem Script gemacht dann bekomm ich 56 Einträge in die Ergebnis.log
01.
@echo off & setlocal 
02.
> set "Version=25 , 30 ,10" 
03.
> set "Tag=Servername" 
04.
> set "Log=ergebnis.log" 
05.
>  
06.
> del "%Log%" 2>nul 
07.
> for /f "delims=" %%i in ('findstr /mc:"%Version%" *.xml') do ( 
08.
>     for /f "tokens=2 delims=<>" %%a in ('findstr /i "%Tag%" "%%i"') do 
09.
> >>"%Log%" echo %%i %%a 
10.
> ) 
11.
> 

Nehme ich das letzte Script dann erhalte ich nur 6 Einträge in der Ergebnis.log. Im ersten Script hat er nur den Servernamen nicht angehangen an den Dateinamen. Also kann es doch nicht an der Suchvariante liegen.

Die Suche nach der Version ist doch in jedem Script gleich.

VG
tommhi
Bitte warten ..
Mitglied: bastla
31.07.2012 um 12:16 Uhr
Hallo tommhii!
Die Suche nach der Version ist doch in jedem Script gleich.
Wenn Du meinst ...

Dann passe einfach dieses Script an und gut ist.

Grüße
bastla
Bitte warten ..
Mitglied: tommhii
31.07.2012 um 13:34 Uhr
Hallo bastla!

ich hab mal eine pause zwischen zeile 11 und 12 also nach dem
01.
 echo "%%i"

eingefügt und da lese ich folgendes :
Die Datei "er>♣? " kann nicht gefunden werden
"4567399923636373.xml"
Drücken Sie eine beliebige Taste...

liegt das vielleicht an dem 3. Set.
er hört immer nach den ersten 13 Dateien auf und schreibt die ersten 6 gefundenen Dateinamen in die ergebnis.log. warum hört er na 13 Dateien auf, obwohl da noch einige mehr stehen.

VG
Tommhi
Bitte warten ..
Mitglied: bastla
31.07.2012 um 14:53 Uhr
Hallo tommhii!
warum hört er na 13 Dateien auf, obwohl da noch einige mehr stehen.
Wie schon gesagt: Da ich Deine Dateien nicht kenne, kann ich Dir diese Frage auch nicht beantworten - die Besonderheiten der Datei 14 musst Du selbst herausfinden ...

Grüße
bastla
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
Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...