anarcy 10 Geschrieben 24. Januar 2013 Melden Teilen Geschrieben 24. Januar 2013 Hallo, ich bin momentan über einen kleinen Script welches alle TXT-Files eines Ordners durchsucht (nach dem aktuellen Datum) und dann die komplette Zeile in eine andere TXT Datei kopiert. FOR /R C:\Temp\testlog (hier liegen die Txt Datein) find "time" >> C:\Temp\Logile.txt So ungefähr hab ich mir das gedacht. Hintergrund ich habe mehrere Logfiles welche ich nach dem aktuellen Datum durchsuchen lassen will und mir dann die komplette Zeile in einen andere Textdatei speichern lassen will. Diese Datei wird dann per Mail an mich gesendet- Täglich- ! (Das habe ich schon!) Hat da jemand vllt. eine Idee oder ein Script-Beispiel? Zitieren Link zu diesem Kommentar
4077 30 Geschrieben 24. Januar 2013 Melden Teilen Geschrieben 24. Januar 2013 Warum nutzt Du nicht die Powershell? Das wäre meine persönliche Wahl. Irgendwas mit Get-ChildItem -Path <Pfad> -Recurse | Where-Object {$_.LastWriteTime -lt (get-date).adddays(-1)} | out-file (hier noch Parameter nachschauen, die ich gerade nicht im Kopf habe) sollte das erledigen Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 24. Januar 2013 Melden Teilen Geschrieben 24. Januar 2013 (bearbeitet) Hallo Willst Du eigentlich das Verezeichnis durchsuchen nach Datum oder tatsächlich die Dateien selbst? Mit Dir *.txt werden die Textdateien des aktuellen Verzeichnisses gelistet mit Datum und Uhrezeit. Kannst Du dieses in eine For-Schleife einzubauen, eventuell in eine For /f mit der Option Token? bearbeitet 25. Januar 2013 von lefg Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 25. Januar 2013 Melden Teilen Geschrieben 25. Januar 2013 (bearbeitet) Wie wär's mit sowas in der Art: # Aktuelle Dateien in Verzeichnis listen und Links verschicken $date=Get-Date $path="C:\Temp\Logs\" $files=dir $path | where {($date - $_.LastWriteTime).Days -eq 0} foreach($fi in files){ $sMsg = $sMsg + "file://" + $fi.FullName + "`r`n"} Send-Mailmessage -smtpserver Meinserver.domain.de -to "Ich@domain.de" -from "Log@domain.de" -subject "Aktuelle Logs" -body $sMsg bearbeitet 25. Januar 2013 von Cybquest Zitieren Link zu diesem Kommentar
anarcy 10 Geschrieben 25. Januar 2013 Autor Melden Teilen Geschrieben 25. Januar 2013 Ok! Also ich habe mich jetzt mal an das PS Script hier gehalten: Get-ChildItem -Path C:\Temp\testlog -Recurse | Where-Object {$_.LastWriteTime -lt (get-date).adddays(-1)} | out-file C:\Temp\outfile.txt @Cybquest das hat mir beim aufruf schon ne fehlermeldung gebracht das er $date nicht kennt! ansonsten sieht das super aus! und das mit dem sendmail habe ich schon realisiert! Noch mal genau: in dem Verzeichnis: C:\Temp\testlog liegen mehrer Textdateien (Logfiles) Diese haben am anfang jeder Zeile einen Zeitstempel Ich würde jetzt gerne alles files durchlaufen und immer nach dem aktuellen datum -1 (gestern suchen) wenn gefunden dann den rest der datei bis zum ende kopieren und in ein Textdatei die z.B. eine Ebene tiefer liegt(C:\Temp\) schreiben bzw. anfügen. Ob das jetzt ein Powershell oder Batch-Script ist - ist mir eigentlich egal. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 25. Januar 2013 Melden Teilen Geschrieben 25. Januar 2013 Ach es soll IN den Dateien nach nem Datum gesucht werden... das hab ich falsch verstanden. Zum $date-Fehler: Hast Du die Zuweisung ganz oben "$date=Get-Date" evtl. vergessen? Zitieren Link zu diesem Kommentar
anarcy 10 Geschrieben 28. Januar 2013 Autor Melden Teilen Geschrieben 28. Januar 2013 Hi, ich hab jetzt folgendes. Bräuchte da allerdings noch etwas hilfe. Das mit $item | funktioniert wohl so nicht wie ich das gerne hätte! Hat noch wer ne idee wie er den Code lauffähig bekommt?! :p $items = Get-ChildItem -Path "C:\Temp\testlog" foreach ($item in $items) { get-content $item | { if($_ -match "Suchbedingung"){ $_ | out-file out.txt -append } } } Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 28. Januar 2013 Melden Teilen Geschrieben 28. Januar 2013 Was willst du mit der Pipe machen? Dir fehlt wohl ein foreach-object (oder kurz %). Zitieren Link zu diesem Kommentar
ducke 11 Geschrieben 28. Januar 2013 Melden Teilen Geschrieben 28. Januar 2013 Kleiner Vorschlag meinerseits: $logpath = "c:\logfiles" #Mußt du natürlich anpassen $filter = "*.txt" $date = get-date -Format "yyyy-MM-dd" #welches datumsformat haben die logeinträge? $logmatches = dir $logpath -Filter $filter | Select-String -Pattern $date -AllMatches Send-MailMessage -SmtpServer "smtpserver.local" -From "du@email.de" -to "empfaenger@email.de" -Subject "Daily Logs" -Body ($logmatches | Out-String) Zitieren Link zu diesem Kommentar
anarcy 10 Geschrieben 28. Januar 2013 Autor Melden Teilen Geschrieben 28. Januar 2013 Ahhhhhh! Super! das wars. $items = Get-ChildItem -Path "C:\Temp\testlog" foreach ($item in $items) { get-content $item | % { if($_ -match "Suchbedingung"){ $_ | out-file out.txt -append } } } Ja cool! @ducke: Das geht auch gut! Nur noch eine Kleinigkeit fällt mir gerade auf was noch geändert werden müsste. Wenn nach dem Datum gesucht wird nimmt er nur die Zeilen die mit dem Datum beginnen. Für mich besser wäre : er sucht nach dem aktuellen Datum und ab dem Datum bis an das Ende der Datei wird alles in eine Logdatei oder Variable geschrieben. Beispiel: Normal steht am Zeilenanfang immer das Datum :2013-01-23 Aber ab und zu auch nicht! Wenn das Datum gefunden wird ab dann alles Bis ende kopieren und an logfile -append. Geht das? Zitieren Link zu diesem Kommentar
ducke 11 Geschrieben 28. Januar 2013 Melden Teilen Geschrieben 28. Januar 2013 Dein Wunsch sei mir Befehl :) Versuch es mal hiermit: $logpath = "c:\logfile" $filter = "*.txt" $date = [regex]"(?sm)^\d{4}-\d{2}-\d{2}.+?\Z" $logmatches = dir $logpath -Filter $filter | %{[io.file]::ReadAllText($_.FullName)} #$date.Matches($logmatches) | select -ExpandProperty matches $logmatches | Select-String $date | Foreach {$_.Matches} | Foreach {$_.Value} Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.