Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage Entwicklung Batch & Shell

GELÖST

Auflistung aller Dateien aus einem Verzeichnis, die gestern erstellt oder verändert wurden

Mitglied: imebro

imebro (Level 2) - Jetzt verbinden

18.03.2010, aktualisiert 13:52 Uhr, 6407 Aufrufe, 12 Kommentare

Hallo,

ich möchte gerne alle Dateien aus einem Verzeichnis inkl. der Unterverzeichnisse auflisten lassen, die am Vortag erstellt bzw. verändert wurden.
Die Liste soll dann in eine TXT-Datei geschrieben werden.

In der TXT-Datei soll der Datei-Pfad, das Erstellungsdatum und die Größe jeder Datei ausgegeben werden.

Bisher habe ich es so versucht - mit einem "Trick" über den Befehl XCOPY:

@echo off
set jahr=%date:~-4%
set monat=%date:~-7,2%
set /a tag=%date:~-10,2%-1
xcopy /D:%monat%-%tag%-%jahr% /L /S S:\archiv\*.* > d:\1.txt
start d:\1.txt

So wird jedoch nur der Dateipfad inkl. Dateiname aufgelistet. Ich benötige aber auch die Größe der einzelnen Dateien

Ein weiterer Versuch mit dem Befehl "DIR":

@echo off
dir /s /o:s /t:w s:\archiv\*.* > d:\dir.txt
start d:\dir.txt

Hiermit werden zwar Datum, Zeit, Größe und Pfad aufgelistet... aber ich weiß nicht, wie man hierbei nur die veränderten oder neuen Dateien vom Vortag auflisten läßt.

Bin gespannt auf Eure Vorschläge

Gruss
Ingo
Mitglied: bastla
18.03.2010 um 18:36 Uhr
Hallo imebro!

Etwa so:
01.
@echo off & setlocal  
02.
set "Basis=s:\archiv" 
03.
set "Liste=D:\dir.txt" 
04.
 
05.
set "G=%temp%\Gestern.vbs" 
06.
>%G% echo WScript.Echo DateAdd("d",-1, Date) 
07.
for /f %%i in ('cscript //nologo %G%') do set "Gestern=%%i"  
08.
 
09.
>"%Liste%" echo Erstellt am: %Gestern% 
10.
for /r "%Basis%" %%i in (.) do for /f "tokens=1-3*" %%a in ('dir /a-d /tc "%%i" 2^>nul^|findstr /b "%Gestern%"') do >>"%Liste%" echo %%~fi\%%~nxd;%%~a %%~b;%%c 
11.
>>"%Liste%" echo\ 
12.
>>"%Liste%" echo Geändert am: %Gestern% 
13.
for /r "%Basis%" %%i in (.) do for /f "tokens=1-3*" %%a in ('dir /a-d "%%i" 2^>nul^|findstr /b "%Gestern%"') do findstr /c:"%%~fi\\%%~nxd" "%Liste%">nul || >>"%Liste%" echo %%~fi\%%~nxd;%%~a %%~b;%%c 
14.
"%Liste%"
Geschwindigkeitsrekorde solltest Du Dir aber nicht erwarten ...

Grüße
bastla
Bitte warten ..
Mitglied: imebro
19.03.2010 um 09:14 Uhr
Hallo Bastla,

vielen Dank für Deine Mühe.
Zwar verstehe ich 90% des Inhaltes leider nicht... aber ich habe es eben getestet.

Funktioniert recht gut und zeigt alle Infos an.
Wäre nur schön, wenn z.B. die einzelnen Angaben (Größe etc.) etwas voneinander getrennt angezeigt würden.
Und... wenn das ganze dann auch nach der Dateigröße sortiert werden könnte innerhalb "erstellt am" und "geändert am".

Hast da noch eine Idee?

Schönen Gruß
imebro
Bitte warten ..
Mitglied: bastla
19.03.2010 um 16:14 Uhr
Hallo imebro!

Zwar verstehe ich 90% des Inhaltes leider nicht...
In der Kurzfassung:
Nachdem per eingebettetem VBScript die Berechnung des gestrigen Datums auf etwas weniger wackelige Beine gestellt (und dieses Datum in der Variablen %Gestern% gespeichert) wurde, geht die "for /r"-Schleife, ausgehend von %Basis%, jeden (Unter-)Ordner einzeln durch.

Innerhalb der Schleife wird ein "dir"-Befehl (mit Ausschluss von Ordnern und jeweils benötigter Datumsangabe) ausgeführt und gefiltert, sodass nur noch Zeilen (= Dateien) mit dem Datum lt %Gestern% erhalten bleiben.

Die um den "dir"-Befehl gewickelte "for /f"-Schleife zerlegt schließlich die Ausgabe, sodass Datum (%%a), Uhrezit (%%b), Größe (%%c) und Dateiname (%%d) getrennt zur Verfügung stehen. Die beim Zusammensetzen des Pfades (der Ordner befindet sich in %%i) verwendete Schreibweise "%%~nxd" für den Dateinamen wäre hier gar nicht erforderlich (stammt noch von einer alternativen Variante) und ließe sich auf %%d verkürzen.

Schließlich wird für die gestern geänderten Dateien noch geprüft, ob sie bereits (als "erstellt") in der Liste aufscheinen und daher nicht nochmals angeführt werden müssen ...

Wäre nur schön, wenn z.B. die einzelnen Angaben (Größe etc.) etwas voneinander getrennt angezeigt würden.
Passe einfach in den Zeilen 10 und 13 (zweimal; beim ersten Mal den "\" zwischen Pfad und Dateinamen doppelt!) die entsprechenden Ausgaben
... %%~fi\%%~nxd;%%~a %%~b;%%c
nach Deinen Vorstellungen an ...
Und... wenn das ganze dann auch nach der Dateigröße sortiert werden könnte innerhalb "erstellt am" und "geändert am".
Das könnte (ungetestet) etwa so gehen:
01.
@echo off & setlocal  
02.
set "Basis=s:\archiv" 
03.
set "Liste=D:\dir.txt" 
04.
 
05.
set "G=%temp%\Gestern.vbs" 
06.
>%G% echo WScript.Echo DateAdd("d",-1, Date) 
07.
for /f %%i in ('cscript //nologo %G%') do set "Gestern=%%i"  
08.
 
09.
set UnsortiertE=%temp%\E.txt 
10.
set UnsortiertG=%temp%\G.txt 
11.
 
12.
copy nul %UnsortiertE% >nul  
13.
copy nul %UnsortiertG% >nul 
14.
for /r "%Basis%" %%i in (.) do for /f "tokens=1-3*" %%a in ('dir /a-d /tc "%%i" 2^>nul^|findstr /b "%Gestern%"') do call :ProcessLine "%UnsortiertE%" "%%c" "%%a %%b" "%%~fi\%%d" 
15.
for /r "%Basis%" %%i in (.) do for /f "tokens=1-3*" %%a in ('dir /a-d "%%i" 2^>nul^|findstr /b "%Gestern%"') do findstr /c:"%%c;%%a %%b;%%~fi\\%%d" "%UnsortiertE%">nul || call :ProcessLine "%UnsortiertG%" "%%c" "%%a %%b" "%%~fi\%%d" 
16.
 
17.
>"%Liste%" echo Erstellt am: %Gestern% 
18.
>>"%Liste%" sort %UnsortiertE% 
19.
>>"%Liste%" echo\ 
20.
>>"%Liste%" echo Geändert am: %Gestern% 
21.
>>"%Liste%" sort %UnsortiertG% 
22.
"%Liste%" 
23.
goto :eof 
24.
 
25.
:ProcessLine 
26.
set "Gr=               %~2" 
27.
>>%1 echo %Gr:~-15%;%~3;%~4 
28.
goto :eof
Wenn in der endgültigen Ausgabe die Größe wieder am Zeilenende aufscheinen soll (was ich allerdings ohnehin nicht sehr übersichlich finde), müssten die Temporär-Dateien (%UnsortiertX%) dann nicht nur sortiert, sondern auch nochmals per "for /f"-Schleife zerlegt und neu zusammengesetzt werden. (Noch als Anmerkung dazu: Das verwendete Trennzeichen ";" war eigentlich dazu gedacht, einen einfachen Import in zB Excel zu ermöglichen.)

Grüße
bastla

[Edit] Fehlende Anführungszeichen in den Zeilen 14 und 15 ergänzt und Zeilen 12 und 13 wie unten angeführt geändert [/Edit]
Bitte warten ..
Mitglied: imebro
22.03.2010 um 11:48 Uhr
Hallo Bastla und vielen Dank für Deine weitere Mühe.

Ich habe Deinen Vorschlag eben mal getestet (den letzten mit den 28 Zeilen).
Leider erhielt ich eine Fehlermeldung im DOS-Fenster.

"Findstr: C:\Dokume1~\Ingo-M1~\Lokale1~\Temp\E.txt kann nicht geöffnet werden."

Diese Zeile steht im DOS-Fenster 8 Mal untereinander... weiter passierte nichts.

Hast Du eine Idee?

Danke und Gruß
imebro
Bitte warten ..
Mitglied: bastla
22.03.2010 um 12:50 Uhr
Hallo imebro!

Ändere die Zeilen 12 und 13 auf
copy nul %UnsortiertE% >nul 
copy nul %UnsortiertG% >nul
Grüße
bastla
Bitte warten ..
Mitglied: imebro
23.03.2010 um 10:20 Uhr
Hallo Bastla,

hmmm... irgend was funktioniert da nicht.

Das gestrige und auch heutige Ergebnis in der Datei "dir.txt" ist folgendes (nachdem ich die o.g. Änderungen gemacht habe):

Erstellt am: 22.03.2010

Geändert am: 22.03.2010

Es wurden jedoch definitiv Änderungen im Verzeichnis vorgenommen!!

Gruss
imebro
Bitte warten ..
Mitglied: bastla
23.03.2010 um 11:43 Uhr
Hallo imebro!

Mit den inzwischen hinzugefügten Anführungszeichen in den Zeilen 14 und 15 sollte das besser gehen ...

Grüße
bastla
Bitte warten ..
Mitglied: imebro
23.03.2010 um 13:33 Uhr
ahaaaaa... jetzt klappt´s

Danke Dir bastla für Deine Mühe.

Schönen Gruß
imebro
Bitte warten ..
Mitglied: imebro
25.03.2010 um 09:06 Uhr
Hi Bastla,

hat zwar geklappt... aber ich habe heute mal - bevor ich das DOS-Fenster geschlossen habe - dort rein geschaut.

Da befinden sich 2 Fehlermeldungen (die zweite 3 x untereinander):

Der Befehl "r" ist entweder falsch geschrieben oder konnte nicht gefunden werden
Findstr: Suchzeichenfolge zu lang
Findstr: Suchzeichenfolge zu lang
Findstr: Suchzeichenfolge zu lang

Hast Du dafür noch eine Erklärung?

Und... wo wir schon dabei sind...

Wäre es möglich, die Größenangaben, die ja jeweils am Anfang stehen, in MB anzugeben, anstatt in KB und vielleicht dann den Begriff "MB" oder "Megabyte" dazu zu schreiben?

Danke Dir!
imebro
Bitte warten ..
Mitglied: Biber
25.03.2010 um 09:22 Uhr
Moin imebro,

Der Befehl "r" ist entweder falsch geschrieben oder konnte nicht gefunden werden
Dann wird vermutlich ein Verzeichnis angesprochen, das ein Ampersand ("&") enthält und dieser Verzeichnisname fehlinterpretiert als "mach was mit Vezeichnisname UND führe folgenden Befehl aus".
Findstr: Suchzeichenfolge zu lang
Bei der FindStr /C:-Option ist die Länge des Suchstrings auf maximal 128 Zeichen beschränkt.
Deine Länge (Unterverzeichnisnamen +Datumsangabe) liegt offensichtlich darüber.

P.S. hatte ich schon mal irgendwo erwähnt, dass Batch eigentlich ungeeignet ist für Datums-Arithmetik und das dieses lieber Skriptsprachen machen sollten, die etwas davon verstehen?

Grüße
Biber
Bitte warten ..
Mitglied: imebro
25.03.2010 um 09:50 Uhr
Hallo Biber,

danke für Dein Posting...

Bastla hatte mir ja geholfen... leider weiß ich jetzt nicht, wie ich die Fehler beheben kann.
Grundsätzlich funktioniert alles ja gut - trotz Datums-Arithmetik

Weiter oben steht ja der Code... vielleicht kannst Du mir ja direkt helfen, die Fehler zu beseitigen?

Mit Batch kenne ich mich ja wenigstens ETWAS aus... aber mit Scripts gar nicht.
Hast denn nen Vorschlag, wie ich das per Script lösen kann?

Danke und Gruß
imebro
Bitte warten ..
Mitglied: Biber
25.03.2010 um 10:20 Uhr
Moin imebro,

na ja.... "Fehler beseitigen" ist hier vielleicht der falsche Ansatz.

Zum einen würde ich eher versuchen, die Rahmenbedingungen zu ändern.
  • Wenn es Verzeichnis- oder Dateinamen mit darin enthaltenem "&" gibt - ja hey! das wird immer Probleme machen. Das würde ich ausmerzen.
  • Wenn es in deinem s:\Archiv-Share Verzeichnis/Dateinamen gibt, die länger als 110 Zeichen sind - okay... auch das ist hausgemachtes Leiden. Dann schau dir die drei Fälle an, ob die wirklich einen kompletten Limerick im Namen tragen müssen und mach ggf. einen kürzeren, trockeneren Gag draus.
  • Wenn das nicht geht/nicht sein soll: dann must du eben rekursiv durch die Verzeichnisse - jeweils ins Unterverzeichnis und dort die Dateien abgrasen (dann entfällt die Länge der Unterverzeichnisnamens im FindStr-Suchstring

  • Oder aber - du löst die eigentliche Aufgabe - das Finden aller Dateien von gestern - über ein One-trick-Tool, das auf so etwas spezialisiert ist. Zum Beispiel Horst Schaeffers DelAge32 mit Schalter /PreView oder auch WasFile sollte man/frau dazu benutzen können. Auch die PowerShell kann besser mit Datums-Arithmetik umgehen. oder ein kleiner rekursiver VBS-Schnipsel, der alle Dateien von gestern rausflöht.

Wie gesagt - wenn sich das Werkzeug als suboptimal zur Lösung einer Anforderung unter gegebenen Rahmenbedingungen erweist:
  • nimm ein anderes Werkzeug
  • überprüfe die Anforderung
  • ändere die Rahmenbedingungen

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Hosting & Housing
Wie kann man nachvollziehen wie eine Datei auf einem Webserver erstellt wurde?
Frage von StefanKittelHosting & Housing5 Kommentare

Hallo, ich habe hier einen LAMP-Server (Ubuntu LTS, Apache, PHP, MySQL). Alles ganz frisch. Kein ControlPanel, von Hand konfiguriert. ...

Batch & Shell
Batch soll warten bis Datei erstellt wurde
gelöst Frage von FabixxBatch & Shell2 Kommentare

Hallo liebe Administratoren, ich habe folgende Batch. Diese wandelt eine PDF um und wartet anschließend 15 Sekunden bis die ...

Batch & Shell
Auflistung mit Batch - Dateien weglassen
gelöst Frage von stridingBatch & Shell5 Kommentare

Hallo! Für euch ist das bestimmt ein Kinderspiel, aber ich komme mal wieder nicht weiter. Ich möchte mir ein ...

Server
Als Benutzer Root Datei veraendert
gelöst Frage von TomTheCatServer7 Kommentare

Hallo erstmal, Ich bin neu hier und ich fange erst an mich mit Server zu beschaeftigen. Erstmal meine Daten: ...

Neue Wissensbeiträge
Router & Routing

PfSense als Addon auf QNAP

Information von magicteddy vor 2 StundenRouter & Routing

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 9 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 14 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement22 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS10 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...