Batch, mit DIR nur .exe und .dll dateien aus gewissem zeitraum auflisten
Also nach meinem letzten threat hab ich jetzt nochmal einen neuen gemacht da es ja ein anderes thema ist... sollte das nicht richtig sein sagt mir bescheid!
Also ich möchte mit dem DIR befehl eine art Log datei erstellen die alle .exe und .dll dateien die in den letzten 3 monaten erstellt, bearbeitet wurden enthält!
Soll ich da ein ganz normales log machen und das später irgendwie nachbearbeiten oder gibt es einen parameter für den DIR befehl mit dem man das alles machen kann? Wenn es kein parameter gibt erklärt mir bitte wie ich das bearteite!
Also ich möchte mit dem DIR befehl eine art Log datei erstellen die alle .exe und .dll dateien die in den letzten 3 monaten erstellt, bearbeitet wurden enthält!
Soll ich da ein ganz normales log machen und das später irgendwie nachbearbeiten oder gibt es einen parameter für den DIR befehl mit dem man das alles machen kann? Wenn es kein parameter gibt erklärt mir bitte wie ich das bearteite!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 111687
Url: https://administrator.de/contentid/111687
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
11 Kommentare
Neuester Kommentar
Hallo d3luxe!
Da bin ich im anderen Thread etwas zu spät gekommen ...
Du könntest anstelle von "dir" den Befehl "xcopy" ein wenig "zweckentfremden":
Das "Ziel" (es wird ja wegen des "/L" nicht wirklich kopiert) muss mit einem "\" enden und darf nicht gleich mit der Quelle sein oder unterhalb davon liegen (daher am besten ein anderes Laufwerk wählen).
Mit dynamischem Datum sähe das etwa so aus:
Falls es noch mehr Dateitypen werden sollten, wäre eine Schleife angebracht:
Noch als Anmerkung: Falls auch die Dateigröße benötigt wird: %%~zi
Grüße
bastla
[Edit] Datum im ersten Beispiel auf Dezember - sollten ja nur 3 Monate sein - korrigiert [/Edit]
Da bin ich im anderen Thread etwas zu spät gekommen ...
Du könntest anstelle von "dir" den Befehl "xcopy" ein wenig "zweckentfremden":
@echo off & setlocal
set "Quelle=D:\Ein Ordner"
set "Datum=12-17-2008
set "Log=D:\Logdatei.txt"
set "Ziel=C:\"
if exist "%Log%" del "%Log%"
for /f "delims=" %%i in ('xcopy /s /y /d:%Datum% /L "%Quelle%\*.exe" "%Ziel%" ^|findstr /v /c:"Datei(en) kopiert"') do >>"%Log%" echo %%~ti %%i
for /f "delims=" %%i in ('xcopy /s /y /d:%Datum% /L "%Quelle%\*.dll" "%Ziel%" ^|findstr /v /c:"Datei(en) kopiert"') do >>"%Log%" echo %%~ti %%i
Mit dynamischem Datum sähe das etwa so aus:
@echo off & setlocal
set "Quelle=D:\Ein Ordner"
set /a Monate=3
set "Log=D:\Logdatei.txt"
set "Ziel=C:\"
set "T=%date:~-10,2%"
set /a M=1%date:~-7,2%-%Monate%
set "J=%date:~-4%
if %M% leq 100 (
set /a M+=12
set /a J-=1
)
set "Datum=%M:~-2%-%T%-%J%"
if exist "%Log%" del "%Log%"
for /f "delims=" %%i in ('xcopy /s /y /d:%Datum% /L "%Quelle%\*.exe" "%Ziel%" ^|findstr /v /c:"Datei(en) kopiert"') do >>"%Log%" echo %%~ti %%i
for /f "delims=" %%i in ('xcopy /s /y /d:%Datum% /L "%Quelle%\*.dll" "%Ziel%" ^|findstr /v /c:"Datei(en) kopiert"') do >>"%Log%" echo %%~ti %%i
@echo off & setlocal
set "Quelle=D:\Ein Ordner"
set "Typen=exe dll bat"
set /a Monate=3
set "Log=D:\Logdatei.txt"
set "Ziel=C:\"
set "T=%date:~-10,2%"
set /a M=1%date:~-7,2%-%Monate%
set "J=%date:~-4%
if %M% leq 100 (
set /a M+=12
set /a J-=1
)
set "Datum=%M:~-2%-%T%-%J%"
if exist "%Log%" del "%Log%"
for %%a in (%Typen%) do (
for /f "delims=" %%i in ('xcopy /s /y /d:%Datum% /L "%Quelle%\*.%%a" "%Ziel%" ^|findstr /v /c:"Datei(en) kopiert"') do >>"%Log%" echo %%~ti %%i
)
Grüße
bastla
[Edit] Datum im ersten Beispiel auf Dezember - sollten ja nur 3 Monate sein - korrigiert [/Edit]
... aber da ja eigentlich nach "dir" gefragt war :
Grüße
bastla
@echo off & setlocal
set "Quelle=D:\Ein Ordner"
set "Typen=*.exe *.dll"
set /a Monate=3
set "Log=D:\Logdatei.txt"
set "T=%date:~-10,2%"
set /a M=1%date:~-7,2%-%Monate%
set "J=%date:~-4%
if %M% leq 100 (
set /a M+=12
set /a J-=1
)
set "Datum=%J%-%M:~-2%-%T%"
if exist "%Log%" del "%Log%"
pushd "%Quelle%"
for /f "delims=" %%i in ('dir /s /b /a-d %Typen%') do (
for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if %%c-%%b-%%a geq %Datum% >>"%Log%" echo %%~ti %%i
)
popd
bastla
Hallo d3luxe!
oder
Grüße
bastla
die Typen kann ich ja erweitern?
Falls die Liste zu lang würde (hab ich selbst noch nicht mit so vielen Typen versucht), könntest Du ja mehrere Schleifen hintereinander ausführen - lässt sich auch in jeweils eine einzige Zeile packen:for %%a in (%Typen%) do for /f "delims=" %%i in ('xcopy /s /y /d:%Datum% /L "%Quelle%\*.%%a" "%Ziel%" ^|findstr /v /c:"Datei(en) kopiert"') do >>"%Log%" echo %%~ti %%i
for /f "delims=" %%i in ('dir /s /b /a-d %Typen%') do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if %%c-%%b-%%a geq %Datum% >>"%Log%" echo %%~ti %%i
Das mit dem "dir" sieht am besten aus
Die "xcopy"-Version sollte aber schneller sein ...Grüße
bastla
Hallo d3luxe!
Wenn das gesamte Laufwerk C: durchsucht werden soll, kann tatsächlich "C:\" nicht als Ziel angegeben werden (Fehler: Zyklische Kopie nicht möglich).
Abgesehen davon darf die "Quelle" nicht mit einem "\" enden, sodass dafür also nur "C:" anzugeben wäre.
Das oben Gesagte gilt nicht für die "dir"-Variante - die sollte überall funktionieren ...
Grüße
bastla
nicht jeder pc hat 2 partitionen oder festplatten!
Du kannst als "Ziel" des "xcopy" auch eine Freigabe (als UNC-Pfad) angeben.Wenn das gesamte Laufwerk C: durchsucht werden soll, kann tatsächlich "C:\" nicht als Ziel angegeben werden (Fehler: Zyklische Kopie nicht möglich).
Abgesehen davon darf die "Quelle" nicht mit einem "\" enden, sodass dafür also nur "C:" anzugeben wäre.
Das oben Gesagte gilt nicht für die "dir"-Variante - die sollte überall funktionieren ...
Grüße
bastla
Hallo d3luxe!
Wie sieht bei Dir die Ausgabe eines
aus? Vorausgesetzt habe ich
oder
Zur Kontrolle kannst Du auch noch am Ende des Batches ein %Datum% ausgeben lassen - sollte bei der Variante "xcopy"
und bei der "dir"-Version
ergeben.
Schließlich wäre noch ein Test mit
von der Kommandozeile sinnvoll - das Ergebnis sollte ein Ausgabeformat der Art
haben.
Grüße
bastla
wie mache ich so Codes?
Anstelle der eckigen Klammern "<" und ">" verwenden (bzw ansehen)die >> "%Log%" echo %%~ti %%i Methode hat nicht funktioniert deswegen hatte ich das umgeändert!
Daran sollte es keinesfalls liegen ...Wie sieht bei Dir die Ausgabe eines
echo %date%
17.03.2009
Di 17.03.2009
12-17-2008
2008-12-17
Schließlich wäre noch ein Test mit
for %i in (E:\metin2accs\*.*) do @echo %~ti %i
17.03.2009 21:45 E:\metin2accs\test.txt
Grüße
bastla