(Batch): "Find" Befehl nach aktuellem Datum filtern
Guten Morgen an alle,
für die Dokumentation der Server-Updates habe ich eine winzige *.Bat-Datei geschrieben, welche mir alle installierten Updates in eine Text-Datei schreibt.
Natürlich benötige ich hier nicht die Updates von vor 5 Jahren, sondern nur die, die zuletzt installiert wurden, bzw. nur die vom selben Tag.
Meine Batch sieht Momentan so aus:
1. Problem:
Ist es möglich, nicht nur die Zeile herauszufiltern, in der das Datum gefunden wurde, sondern auch die drei Zeilen darüber?
2. Problem:
ich möchte nicht jedes mal die Batch an den aktuellen Tag anpassen. Gibt es ein "Date-Code", der einfach das aktuelle Datum verwendet und einfügt?
Also Quasi
Für hilfreiche Antworten wäre ich sehr dankbar!
Gruß
für die Dokumentation der Server-Updates habe ich eine winzige *.Bat-Datei geschrieben, welche mir alle installierten Updates in eine Text-Datei schreibt.
Natürlich benötige ich hier nicht die Updates von vor 5 Jahren, sondern nur die, die zuletzt installiert wurden, bzw. nur die vom selben Tag.
Meine Batch sieht Momentan so aus:
dism /online /get-Packages > C:\Update.txt
find /i "30.11.2017" C:\Update.txt > C:\Update_today.txt
echo Vorgang abgeschlossen
pause
goto :eof
1. Problem:
Ist es möglich, nicht nur die Zeile herauszufiltern, in der das Datum gefunden wurde, sondern auch die drei Zeilen darüber?
2. Problem:
ich möchte nicht jedes mal die Batch an den aktuellen Tag anpassen. Gibt es ein "Date-Code", der einfach das aktuelle Datum verwendet und einfügt?
Also Quasi
find "%current_date%" C:\...
Für hilfreiche Antworten wäre ich sehr dankbar!
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 356760
Url: https://administrator.de/contentid/356760
Ausgedruckt am: 26.11.2024 um 07:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo,
schau Dir mal folgendes an:
Die
In Zeile 19 wird der Datumsvergleich ausgeführt, wenn Du hier z.B. nur Monat und Jahr berücksichtigen möchtest, kannst Du das entsprechend abändern.
Die Zeilen 20-24 geben die Daten der Treffer im CSV-Format aus (pro Datensatz eine Zeile, getrennt durch Semikolon). Wenn Du lieber das Listenformat möchtest, ersetze die Zeilen 20-24 durch folgenden Code:
Die
ACHTUNG!!!
Die Ausgabedatei wird auf einem deutschen Windows mit der Zeichencodierung OEM850 erstellt. Da ein Package den Status "Abgelöst" haben kann (die zweite Spalte in der CSV-Datei) wird dieser Wert in Excel oder einem Editor mit ANSI-Zeichencodierung nicht korrekt dargestellt (das ö macht Probleme). Die Datei sollte am besten nur mit weiteren Batchscripts weiterverarbeitet werden.
Grüße
Friemler
schau Dir mal folgendes an:
@echo off & setlocal
:: ------------- Konfiguration ---------------
set "OutFile=D:\Update_today.txt"
:: -------------------------------------------
set "Day="
set "Month="
set "Year="
for /f "tokens=1-3 delims=." %%a in ("%DATE%") do (
set "Day=%%a"
set "Month=%%b"
set "Year=%%c"
)
(for /f "tokens=1-4 delims=|" %%a in ('dism /online /get-Packages /format:table') do (
for /f "tokens=1-3 delims=. " %%x in ("%%d") do (
if "%%x" equ "%Day%" if "%%y" equ "%Month%" if "%%z" equ "%Year%" (
for /f %%l in ("%%a") do (set /p "=%%l;" < NUL)
for /f %%l in ("%%b") do (set /p "=%%l;" < NUL)
for /f %%l in ("%%c") do (set /p "=%%l;" < NUL)
for /f %%l in ("%%d") do (set /p "=%%l;" < NUL)
echo(
)
)
)) > "%OutFile%"
Die
FOR
-Schleife in den Zeilen 11-15 zerlegt das aktuelle Datum in seine Bestandteile, dabei wird allerdings vom deutschen Datumsformat ausgegangen (dd.MM.yyyy). Das gleiche gilt für die FOR
-Schleife in Zeile 18.In Zeile 19 wird der Datumsvergleich ausgeführt, wenn Du hier z.B. nur Monat und Jahr berücksichtigen möchtest, kannst Du das entsprechend abändern.
Die Zeilen 20-24 geben die Daten der Treffer im CSV-Format aus (pro Datensatz eine Zeile, getrennt durch Semikolon). Wenn Du lieber das Listenformat möchtest, ersetze die Zeilen 20-24 durch folgenden Code:
for /f %%l in ("%%a") do echo %%l
for /f %%l in ("%%b") do echo %%l
for /f %%l in ("%%c") do echo %%l
for /f %%l in ("%%d") do echo %%l
echo(
Die
FOR
-Schleifen in den beiden Code-Blöcken dienen dazu, die umschließenden Leerzeichen zu entfernen.ACHTUNG!!!
Die Ausgabedatei wird auf einem deutschen Windows mit der Zeichencodierung OEM850 erstellt. Da ein Package den Status "Abgelöst" haben kann (die zweite Spalte in der CSV-Datei) wird dieser Wert in Excel oder einem Editor mit ANSI-Zeichencodierung nicht korrekt dargestellt (das ö macht Probleme). Die Datei sollte am besten nur mit weiteren Batchscripts weiterverarbeitet werden.
Grüße
Friemler
Moin,
ggf. hilft dir die Powershell weiter:
https://www.pdq.com/blog/using-get-childitem-find-files/ -> Finding Old Files
Kombiniert mit der Funtkion outfile bekommst du den KRam dann sicherlich auch in eine Textdatei geschrieben
Gruß
em-pie
ggf. hilft dir die Powershell weiter:
https://www.pdq.com/blog/using-get-childitem-find-files/ -> Finding Old Files
Get-ChildItem | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-3)}
Kombiniert mit der Funtkion outfile bekommst du den KRam dann sicherlich auch in eine Textdatei geschrieben
... | Out-File C:\yout\Path\result.txt
Gruß
em-pie