txt Konfigurationsdatei über eine Batchdatei teilen lassen
Hallo,
ich habe mehrere Konfigurationsdateien von Switchen, die um die 20000 Zeilen beinhalten.
Die Dateien heißen BROCADE_IPAdresse.txt.
Innerhalb der Datei befinden sich Konsolenbefehle die immer das gleiche Muster haben, dabei beinhaltet der Konsolenbefehl immer "admin>".
Zum Beispiel: admin> nsshow
Das nsshow zum Beispiel soll danach auch für den Dateinamen dienen, welcher dann so aussehen sollte BROCADE_IPAdresse_nsshow.
Der Inhalt in der Datei sollen die Zeilen zwischen dem Konsolenbefehl und dem nächsten sein.
Die Stelle wo nsshow hier steht müsste aber immer ausgelesen werden, da dort auch andere Befehle stehen können.
Ich hab es bisher nur soweit hinbekommen, das ich über findstr rausgefunden habe in welcher Zeile admin> vorkommt.
Die Dateien sollen am Ende einfach im gleichen Verzeichnis liegen.
Vielleicht kann mir ja hier einer weiterhelfen.
Aerius
ich habe mehrere Konfigurationsdateien von Switchen, die um die 20000 Zeilen beinhalten.
Die Dateien heißen BROCADE_IPAdresse.txt.
Innerhalb der Datei befinden sich Konsolenbefehle die immer das gleiche Muster haben, dabei beinhaltet der Konsolenbefehl immer "admin>".
Zum Beispiel: admin> nsshow
Das nsshow zum Beispiel soll danach auch für den Dateinamen dienen, welcher dann so aussehen sollte BROCADE_IPAdresse_nsshow.
Der Inhalt in der Datei sollen die Zeilen zwischen dem Konsolenbefehl und dem nächsten sein.
Die Stelle wo nsshow hier steht müsste aber immer ausgelesen werden, da dort auch andere Befehle stehen können.
Ich hab es bisher nur soweit hinbekommen, das ich über findstr rausgefunden habe in welcher Zeile admin> vorkommt.
Die Dateien sollen am Ende einfach im gleichen Verzeichnis liegen.
Vielleicht kann mir ja hier einer weiterhelfen.
Aerius
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80040
Url: https://administrator.de/contentid/80040
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
13 Kommentare
Neuester Kommentar
Hi Aerius
Bitte nicht böse sein. Aber ich Check nicht, was Du haben willst.
(Und wenn ich die Zeit/Datum Deiner Frage anschaue, bin ich wohl nicht der einzige...)
Kannst Du Deine Frage vielleicht Umformulieren?
So nach Muster:
- Meine Eingabe (mit kleinem Auszug)
- Gewünschte Ausgabe (wie es Aussehen soll)
Ich denke, das die Lösung eigentlich sehr einfach ist.
Ach ja, was hast Du für ein OS? Windows ja (ist Annahme da FINDSTR), aber welches?
Und sollte es sich bereits erledigt haben, dann markier es als Erledigt. Danke
Bitte nicht böse sein. Aber ich Check nicht, was Du haben willst.
(Und wenn ich die Zeit/Datum Deiner Frage anschaue, bin ich wohl nicht der einzige...)
Kannst Du Deine Frage vielleicht Umformulieren?
So nach Muster:
- Meine Eingabe (mit kleinem Auszug)
- Gewünschte Ausgabe (wie es Aussehen soll)
Ich denke, das die Lösung eigentlich sehr einfach ist.
Ach ja, was hast Du für ein OS? Windows ja (ist Annahme da FINDSTR), aber welches?
Und sollte es sich bereits erledigt haben, dann markier es als Erledigt. Danke
Kannst Du mal den den nachfolgenden Code als *.vbs abspeichern (strPfad und strBrocade anpassen)?
Es wird erstmal ein File per : admin> trennen und neue Files erstellen.
Wenn das so O.K. ist, dann geht es zu Schritt 2.
Es wird erstmal ein File per : admin> trennen und neue Files erstellen.
Wenn das so O.K. ist, dann geht es zu Schritt 2.
Für alle, die mitlesen:
Ich weiss, beim lesen dieses Codes bekommt man Augenkrebs, aber für's erste funktioniert's
Ich weiss, beim lesen dieses Codes bekommt man Augenkrebs, aber für's erste funktioniert's
Dim objFSO, objFile, arrLines
strpfad = "c:\MeinFileOrdner\"
strBrocade = "Brocade_IP.txt"
intZeiger = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strpfad & strBrocade, 1)
arrLines = Split(objFile.ReadAll, vbCrLf): objFile.Close
For i = 0 To UBound(arrLines)
If InStr(1, arrLines(i), ":admin>") <> 0 Then
strFileName = Left(strBrocade, Len(strBrocade) - 4) & "_" & Mid(arrLines(i), InStr(1, arrLines(i), ">") + 2, 50) & ".txt"
objFSO.CreateTextFile (strpfad & strFileName)
ReDim arrCurrent(0)
intZeiger = 1
End If
If intZeiger = 1 Then
intZeiger = 2
ElseIf intZeiger = 2 Then
ReDim Preserve arrCurrent(UBound(arrCurrent) + 1)
arrCurrent(UBound(arrCurrent) - 1) = arrLines(i)
Set objFile = objFSO.OpenTextFile(strpfad & strFileName, 2)
objFile.Write (Join(arrCurrent, vbCrLf)): objFile.Close
End If
Next
O.K.
Versuchs mal damit:
Falls Du noch Fragen zum Script hast, nur zu.
Versuchs mal damit:
Dim objFSO, objFile, objFolder, arrLines, strEingabe, strAusgabe, intZeiger
strEingabe = "c:\MeinFileOrdner"
strAusgabe = "c:\MeinFileOrdner\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strEingabe)
For Each File In objFolder.Files
If InStr(1, LCase(Right(File, 4)), ".txt") <> 0 Then
intZeiger = 0
Set objFile = objFSO.OpenTextFile(File, 1)
arrLines = Split(objFile.ReadAll, vbCrLf): objFile.Close
For i = 0 To UBound(arrLines)
If InStr(1, arrLines(i), ":admin>") <> 0 Then
strFileName = Mid(File.Name, 1, Len(File.Name) - 4) & "_" & Mid(arrLines(i), InStr(1, arrLines(i), ">") + 2, 50) & ".txt"
objFSO.CreateTextFile (strAusgabe & strFileName)
ReDim arrCurrent(0)
intZeiger = 1
End If
If intZeiger = 1 Then
intZeiger = 2
ElseIf intZeiger = 2 Then
ReDim Preserve arrCurrent(UBound(arrCurrent) + 1)
arrCurrent(UBound(arrCurrent) - 1) = arrLines(i)
Set objFile = objFSO.OpenTextFile(strAusgabe & strFileName, 2)
objFile.Write (Join(arrCurrent, vbCrLf)): objFile.Close
End If
Next
Set objFile = Nothing
Set objFolder = Nothing
End If
Next
Das Script so ausführen:
CMD -> cscript ScriptName.vbs
Im Script sind es die Zeilen, wo wscript.echo drinsteht. Kannst natürlich Deine gewünschten Angaben Ausgeben lassen
CMD -> cscript ScriptName.vbs
Im Script sind es die Zeilen, wo wscript.echo drinsteht. Kannst natürlich Deine gewünschten Angaben Ausgeben lassen
Dim objFSO, objFile, objFolder, arrLines, strEingabe, strAusgabe, intZeiger
strEingabe = "p:\scripts\brocade"
strAusgabe = "p:\scripts\brocade\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strEingabe)
For Each File In objFolder.Files
If InStr(1, LCase(Right(File, 4)), ".txt") <> 0 Then
intZeiger = 0 : wscript.echo file
Set objFile = objFSO.OpenTextFile(File, 1)
arrLines = Split(objFile.ReadAll, vbCrLf): objFile.Close
For i = 0 To UBound(arrLines)
If InStr(1, arrLines(i), ":admin>") <> 0 Then
strFileName = Mid(File.Name, 1, Len(File.Name) - 4) & "_" & Mid(arrLines(i), InStr(1, arrLines(i), ">") + 2, 50) & ".txt"
objFSO.CreateTextFile (strAusgabe & strFileName)
ReDim arrCurrent(0)
intZeiger = 1
End If
If intZeiger = 1 Then
intZeiger = 2
ElseIf intZeiger = 2 Then
ReDim Preserve arrCurrent(UBound(arrCurrent) + 1)
arrCurrent(UBound(arrCurrent) - 1) = arrLines(i)
Set objFile = objFSO.OpenTextFile(strAusgabe & strFileName, 2)
wscript.echo arrlines(i)
objFile.Write (Join(arrCurrent, vbCrLf)): objFile.Close
End If
Next
Set objFile = Nothing
Set objFolder = Nothing
End If
Next
Ist nicht getestet.
Aber in etwa so:
Gibt nur ein Kleines Problem... Das Script muss in genau diesem Ordner sein.
Sonst hast Du ja die Möglichkeit eine Variable zu bennen, also wo liegt das Problem?
Aber in etwa so:
strEingabe = cstr(Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\")))
strAusgabe = cstr(Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\"))) & "\"
Gibt nur ein Kleines Problem... Das Script muss in genau diesem Ordner sein.
Sonst hast Du ja die Möglichkeit eine Variable zu bennen, also wo liegt das Problem?