d3luxe
Goto Top

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!

Content-Key: 111687

Url: https://administrator.de/contentid/111687

Printed on: April 18, 2024 at 23:04 o'clock

Member: bastla
bastla Mar 17, 2009 at 19:31:09 (UTC)
Goto Top
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":
@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  
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:
@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  
Falls es noch mehr Dateitypen werden sollten, wäre eine Schleife angebracht:
@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  
)
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]
Member: bastla
bastla Mar 17, 2009 at 20:06:19 (UTC)
Goto Top
... aber da ja eigentlich nach "dir" gefragt war face-wink:
@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
Grüße
bastla
Member: d3luxe
d3luxe Mar 17, 2009 at 20:16:01 (UTC)
Goto Top
nochmal danke für die antworten :D ich werd herumexperimentieren und mir die für meinen zweck beste mehtode heraussuchen! Das mit dem "dir" sieht am besten aus :D die Typen kann ich ja erweitern? weil ich werde diese nehmen:

.bak1
.bak2
.bat
.cmd
.com
.dll
.ini2
.pif
.reg
.ren
.scr
.sys
.vbs
.vir
.exe
.bin
.wsf
.vbe
.dat

Das ganze soll mal ein scanner werden der die dateien der letzten zeit auflistet und ein script ausführen kann :D Das script das es einlesen kann muss ich auch erst noch erschaffen :D
Member: bastla
bastla Mar 17, 2009 at 20:22:27 (UTC)
Goto Top
Hallo d3luxe!
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
oder
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
Member: d3luxe
d3luxe Mar 17, 2009 at 20:25:00 (UTC)
Goto Top
ich makiere das ganze mal noch nicht als gelöst erst werde ich versuchen das ganze umzusetzen! Was mein problem ist, es soll auf jedem PC laufen und nicht jeder pc hat 2 partitionen oder festplatten! Deswegen kann ich das ganze nicht auf C:\ lassen? Die logs usw.?
Member: bastla
bastla Mar 17, 2009 at 20:35:27 (UTC)
Goto Top
Hallo d3luxe!
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
Member: d3luxe
d3luxe Mar 17, 2009 at 20:40:41 (UTC)
Goto Top
Also die xcopy Methode gibt kein Log aus! ich habe die Pfade entsprechend meines pcs angepasst aber es gibt nirgends ein log!

[code]@echo off & setlocal
set "Quelle=E:\test"
set "Typen=exe dll bat"
set /a Monate=3
set "Log=E:\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 echo %%~ti %%i >> "%Log%"
)
pause[/code]

die >> "%Log%" echo %%~ti %%i Methode hat nicht funktioniert deswegen hatte ich das umgeändert! Aber es hat nichts geändert! es stürzt nicht ab es läuft bis zum pausebefehl durch!

Die dir methode teste ich gleich!

Die DIR methode läuft durch aber es kommt, Datei nicht gefunden!

Muss %Quelle% das sein was ich scannen möchte?

Achja.. wie mache ich so Codes?
Member: bastla
bastla Mar 17, 2009 at 20:53:14 (UTC)
Goto Top
Hallo d3luxe!
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%
aus? Vorausgesetzt habe ich
17.03.2009
oder
Di 17.03.2009
Zur Kontrolle kannst Du auch noch am Ende des Batches ein %Datum% ausgeben lassen - sollte bei der Variante "xcopy"
12-17-2008
und bei der "dir"-Version
2008-12-17
ergeben.

Schließlich wäre noch ein Test mit
for %i in (E:\metin2accs\*.*) do @echo %~ti %i
von der Kommandozeile sinnvoll - das Ergebnis sollte ein Ausgabeformat der Art
17.03.2009 21:45 E:\metin2accs\test.txt
haben.

Grüße
bastla
Member: d3luxe
d3luxe Mar 17, 2009 at 20:59:27 (UTC)
Goto Top
Danke für deine antwort!

Ich weiß woran es lag... Bei Quelle musste ich C:\ angeben da hattest du etwas verwechselt weil in E:\metin2accs lagen keine .exe .dll oder .bat dateien darum auch kein log!
Ich habe das jetzt geändert und beide Varianten funktionieren die DIR und die xcopy methode ^^ Danke für deine antwort! Ich werde die DIR methode nutzen da ich sie auf allen systemen anwenden kann und nicht nur an denen mit partitionen!
Member: d3luxe
d3luxe Apr 02, 2009 at 17:43:17 (UTC)
Goto Top
Ich glaube deine Methode berücksichtigt nur den Monat.. aber es ignoriert das Jahr :D da landen Sachen von 2002 usw. im log ^^ fällt dir da noch was ein wie man das genauer filtern kann?
Member: bastla
bastla Apr 02, 2009 at 17:55:17 (UTC)
Goto Top
Hallo d3luxe!
fällt dir da noch was ein
Am ehesten, wenn Du meine obigen Datumsformat-Fragen geklärt haben wirst ...

Grüße
bastla