Jump to content

Alle Dateien eines Ordners nach Datum durchsuchen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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?

 

Link zu diesem Kommentar

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 von lefg
Link zu diesem Kommentar

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 von Cybquest
Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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 } }

}
Link zu diesem Kommentar

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)
Link zu diesem Kommentar

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?

Link zu diesem Kommentar

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}
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...