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

For Schleife mit der Variable im Dateinamen

Frage Entwicklung Batch & Shell

Mitglied: Helix2648

Helix2648 (Level 1) - Jetzt verbinden

01.05.2011 um 10:01 Uhr, 3745 Aufrufe, 7 Kommentare

Guten Morgen,

ich habe das unten genannte Problem und bekomme es nicht gelöst. Ich würde mich über einen Denkanstoß sehr freuen

Das Problem ist, dass ich eine Batch Datei schreiben möchte, die mir automatisch die ereignissanzeige komplett protokolliert und dann löscht.

Nun benötige ich ja variable Dateinamen für den Log und diesen möchte ich mit Hilfe der FOR Variable anlegen.

Beispiel:
01.
@ECHO OFF 
02.
ECHO Protokolliere Ereignissanzeige-Protokoll... 
03.
FOR /F "USEBACKQ DELIMS=" %%l IN (`WEVTUTIL EL`) DO WEVTUTIL EPL "%%l" "C:\Ablage\Temp\Wevtutil\" && "%%l" && ".evtx" 
04.
ECHO Loesche Ereignissanzeige-Protokoll... 
05.
FOR /F "USEBACKQ DELIMS=" %%l IN (`WEVTUTIL EL`) DO WEVTUTIL CL "%%l" 
06.
@ECHO ON
Die Schleife soll also jeden Log-Type durchgehen und dann diesen mit dem entsprechenden Namen ablegen. Sprich, er archiviert den Log-Typ SYSTEM unter C:\Ablage\Temp\System.evtx".

Wie geht das?

Vielen lieben Dank!

Gruß,
Hleix
Mitglied: Skyemugen
01.05.2011 um 10:18 Uhr
Aloha,

nun es scheint mir fast, als hättest du sonst mit VisualBasic zu tun *gg*
FOR /F "USEBACKQ DELIMS=" %%l IN (`WEVTUTIL EL`) DO WEVTUTIL EPL "%%l" "C:\Ablage\Temp\Wevtutil\%%l.evtx"
könnte dein Problem eventuell lösen ;)

mit deinen genutzen Befehlen kann ich sonst nichts anfangen, daher gehe ich davon aus, dass die sonstige Reihenfolge in der Abarbeitung korrekt sein wird, sollte dem nicht so sein ... dann wäre da noch Platz für einen Wurm der mir ohne Frühstück verborgen bleibt

oh noch etwas: was machen die accent graves dort in der Schleife? Das sollten doch eigentlich Apostrophe werden ... ?

greetz André

P.S.: alles nach && wird als zusätzlicher Befehl ausgeführt
Bitte warten ..
Mitglied: 99045
01.05.2011 um 10:32 Uhr
Moin,

falscher Ansatz, daher gelöscht

Was dein Tool WEVTUtil anstellt, weiß wusste ich leider nicht, jetzt weiß ich es.

Gruß
Bitte warten ..
Mitglied: Helix2648
01.05.2011 um 10:47 Uhr
Hallo zusammen,

vielen Dank erst einmal für die Antworten.

Bzgl. der Frage von Skyemugen: Die Accent Graves brauchst du, damit die FOR Schleife "wevtutil epl" als Befehl ausführt (usebackq). Aber leider funktioniert dein Tip nicht. Er meckert immer rum, dass er den Pfad nicht findet.

Also kurz mal generell zur Erklärung was ich vor habe... Das Tool wevtutil dient zum Verwalten der Ereignissanzeige auf Kommandozeilenebene. Der Befehl "wevtutil el" z.B. listet alle Channels auf, die protokolliert werden. Das heisst, dass ich mit der zweiten Schleife das Programm aufrufe und jeden Channel der Variable %l zuordne und dann mit "wevtutil cl [Variable]" lösche.

Wenn ich nun vorher den Channel sichern will, dann müsste ich z.B. den folgenden Befehl benutzen:

01.
wevtutil epl SYSTEM C:Ablage\Temp\System.evtx
Da ich ja aber nun mit der Schleife alle Channels sichern möchte (jeweils eine Datei pro Channel) muss ich also den Dateinamen anhand der Variable definieren.

01.
wevtutil epl [Variable] C:\Ablage\Temp\[Variable].evtx
Somit wäre der Ansatz von Kaputtnick (toller Name übrigens ) nicht notwendig.

Ich hoffe, dass ich das soweit verständlich rüber bringen konnte.
Bitte warten ..
Mitglied: bastla
01.05.2011 um 11:56 Uhr
Hallo Helix2648!

Vielleicht solltest Du die Ausgabe von "wevtutil el" (einmal genauer betrachten und dann) etwas einschränken (dann natürlich auch in Zeile 5) - ungetestet:
FOR /F "DELIMS=" %%I IN ('WEVTUTIL EL^|FINDSTR /V "\/"') DO WEVTUTIL EPL "%%I" "C:\Ablage\Temp\Wevtutil\%%I.evtx"
Falls aber tatsächlich alle angeboteten Logs gespeichert werdem sollen, müssten die in den Namen enthaltenen "/" in etwas "Dateinamentauglicheres" umgewandelt werden.
BTW:
Die Accent Graves brauchst du, damit die FOR Schleife "wevtutil epl" als Befehl ausführt (usebackq).
... aber da Du hier "usebackq" nicht benötigst ...

Grüße
bastla

[Edit] "Escapen" von "/" nachgetragen und Anzahl der "'" auf 2 reduziert [/Edit]
Bitte warten ..
Mitglied: Skyemugen
01.05.2011 um 13:35 Uhr
Zitat von Helix2648:
Die Accent Graves brauchst du, damit die FOR Schleife "wevtutil epl" als Befehl ausführt (usebackq).

Aloha,

ich seh schon: Vor dem Frühstück arbeitet mein Hirn nur auf Standby ... ich habe doch allen Ernstes usebackq völlig ausgeblendet beim Denken *pfeif* - Sonntagvormittag eben *gg*

greetz André
Bitte warten ..
Mitglied: Friemler
01.05.2011 um 13:59 Uhr
Hallo Helix2648,

wie bastla schon bemerkt hat, müssen die Namen der Event Channels, die das Zeichen / enthalten, angepasst werden, da Datei- und Verzeichnisnamen dieses Zeichen nicht enthalten dürfen. Hier mein Vorschlag, der das umsetzt:
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
set "OutputPath=C:\Ablage\Temp\Wevtutil" 
06.
 
07.
 
08.
echo Protokolliere Ereignissanzeige-Protokoll... 
09.
 
10.
for /f "delims=" %%l in ('wevtutil el') do ( 
11.
  call :ProcessChannel "%%l" 
12.
13.
 
14.
echo Loesche Ereignissanzeige-Protokoll... 
15.
 
16.
for /f "delims=" %%l in ('wevtutil el') do ( 
17.
  echo wevtutil cl "%%l" 
18.
19.
 
20.
exit /b 
21.
 
22.
 
23.
 
24.
:ProcessChannel 
25.
  set "Param=%~1" 
26.
  set "SubChannel=%Param:*/=%" 
27.
  call set "Channel=%%Param:/%SubChannel%=%%" 
28.
 
29.
  if "%SubChannel%" neq "" if "%SubChannel%" neq "%Channel%" ( 
30.
    echo md "%OutputPath%\%Channel%" 
31.
    echo wevtutil epl "%~1" "%OutputPath%\%Channel%\%SubChannel%.evtx" 
32.
  ) else ( 
33.
    echo wevtutil epl "%~1" "%OutputPath%\%Channel%.evtx" 
34.
35.
exit /b
Kurze Erläuterung:
Für jeden Channel, der das Zeichen / enthält, wird im Zielverzeichnis ein Unterverzeichnis erstellt. Der eigentliche Eventprotokoll-Export wird dann nach dem benannt, was nach dem / kommt.

Das ganze wird durch die Stringersetzungen in Zeile 26 und 27 erreicht. Zeile 26 schreibt in die Variable SubChannel alles, was hinter dem / kommt. Zeile 26 maskiert in der Variablen Param den Teil, der der Variablen SubChannel mit voranstehendem / entspricht und weist den Rest der Variablen Channel zu. Siehe dazu auch die Hilfe zum SET-Befehl.

Zeile 29 ist praktisch eine AND-Operation auf die zwei IF-Befehle.

Das ganze funktioniert nur, wenn, wie bei meinen Eventprotokollen, das Zeichen / nur einmal im Namen eines Channels vorkommt.

Die ECHO-Befehle in den Zeilen 17, 30, 31 und 33 dienen nur zur Ausgabe dessen, was passieren würde und müssen entfernt werden, damit das Script seinen Job macht.

Gruß
Friemler
Bitte warten ..
Mitglied: bastla
01.05.2011 um 14:47 Uhr
@Friemler
Wenn wirklich sämtliche Logs gespeichert werden sollen, würde ich einfach "/" durch zB "_" ersetzen (dann spielt auch die Anzahl enthaltener "/" keine Rolle) und mir damit auch die Unterordner ersparen ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung!

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
Batch: Variable Expansion in einer FOR-Schleife (9)

Frage von .Sessl zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
gelöst Selected Gridview Value in Variable schreiben (4)

Frage von reissaus73 zum Thema Batch & Shell ...

Batch & Shell
Schleife mit todos CMD

Frage von TommyDerWalker zum Thema Batch & Shell ...

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

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...