manni04
Goto Top

Erstellungsdatum mit Pfad auslesen

Hallo an alle,

ich versuche gerade eine Dateiliste zu erstellen die mir das Erstellungsdatum und Uhrzeit, die Dateigröße und den Pfad ausliest. Ich habe es auch schon soweit gebracht das ich das Datum mit Uhrzeit, die Dateigröße und den Dateinamen erhalte, allerdings bräuchte ich auch noch den Pfad der Datei. Ich hatte bereits eine ähnliche Methode, allerdings habe ich dort nur das Änderungsdatum erhalten:
FOR /F "delims=" %%i in ('dir /b /s  /O-D /A-D *.*') do echo %%~ti§%%~zi§%%~dpi§%%~nxi§%%~xi >>test.txt  
Hier konnte ich am Ende sehr einfach angeben, welche Werte und in welcher Reihenvolge ich die ausgabe haben wollte. Außerdem war es Möglich zwischen den Parametern Trennzeichen einzufügen, das sollte auch gehen. (Hier habe ich das Trennzeichen "§" verwendet)
(die Funktion /Tc im DIR Befehl funktioniert hir anscheinend nicht)

Meine momentane Lösung sieht so aus:
FOR /F "Tokens=1*" %%f in ('dir /s /a-D /Tc ^|find "."') do echo %%f %%g >>test.txt  

Bei meiner jetztigen Funktion kann ich diese Parameter nicht verwenden, kenn mich dazu mit Batch leider zu wenig aus, um es selber zu schaffen. Es wäre außerdem sehr schön wenn ich auch gleich die Dateierweiterung schreiben könnte, ist aber nicht umbeding nötig.

Vielleicht kann mir ja auch einfach jemand eine Liste sagen, in der ich die Parameter für diese Funktion finde, ähnlich wie in der FOR-Hilfe ganz am Ende die Auflistung der Möglichkeiten.

Am Ende sollte es dann in etwa so aussehen:
01.10.2011 22:11 123456 Pfad Datei_mit_Dateierweiterung .txt
01.10.2011 22:12 123456 Pfad Datei2_mit_Dateierweiterung .txt

Hoffe ihr könnt mir helfen. Danke schon mal im Voraus.

Lg manni

Content-ID: 174031

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

Ausgedruckt am: 08.11.2024 um 02:11 Uhr

bastla
bastla 02.10.2011, aktualisiert am 18.10.2012 um 18:48:38 Uhr
Goto Top
Hallo manni04!

War denn dieser "ähnliche" Beitrag (gleich da unten face-wink) wirklich nicht zu finden?

Grüße
bastla
manni04
manni04 02.10.2011 um 00:56:58 Uhr
Goto Top
Sorry hab ich echt übersehen.
Aber irgendwie bekomm ich das nicht zum laufen. Vlt kannst du mir ja sagen was ich falsch mache.

Habe diese Varianten getestet, keine funktioniert bei mir. Hab doppelte Prozentzeichen wie du in deinem Post damals geschrieben hast:

(for /f "delims=" %i in ('dir /s /b /a-d C:\') do @for /f "tokens=1-2" %a in ('dir /tc "%i"^|findstr /i /c:"%~nxi"') do @echo %a %b "%~dpi" "%~nxi")>>test.txt  
(for /f "delims=" %%i in ('dir /s /b /a-d C:\') do @for /f "tokens=1-2" %%a in ('dir "%%i"^|findstr /i /c:"%%~nxi"') do @echo %%a %%b %%i)>>test.txt  
(for /f "tokens=1-3*" %%i in (' dir /s /a-d /tc ^|findstr /b [0-9] ') do @echo %%i %%j %%l)>>test.txt  

Grüße
Manni
bastla
bastla 02.10.2011 um 01:02:00 Uhr
Goto Top
Hallo manni04!

Mit Deinen Vorgaben etwa so:
(for /f "delims=" %%i in ('dir /s /b /a-d') do for /f "tokens=1-2" %%a in ('dir /tc "%%i"^|findstr /i /c:"%%~nxi"') do echo %%a %%b§%%~zi§%%~dpi§%%~nxi)>test.txt
Grüße
bastla

[Edit] >> auf > reduziert, um eine vorhandene "test.txt" zu überschreiben [/Edit]
manni04
manni04 02.10.2011 um 01:14:06 Uhr
Goto Top
Hallo bastla

Danke für die raschen Antworten, aber jedes mal wenn ich die Batch-Datei starte, wird sie sofort wieder geschlossen obwohl ich am Ende eine PAUSE gesetzt hab. Es wird auch keine Datei erstellt.
Direkt in der CMD-Shell wird die Datei erstellt allerdings ist die Ausgabe nicht ganz korrekt:

02.10.2011 01:11õ225õW:\Temp\Neuer Ordner\õtest.txt

Anscheinend werden alle Leerzeichen durch dieses Sonderzeichen ersetzt, kann man das auch noch umgehen?

Grüße manni
bastla
bastla 02.10.2011 um 01:27:31 Uhr
Goto Top
Hallo manni04!
Anscheinend werden alle Leerzeichen durch dieses Sonderzeichen ersetzt
Nö - "dieses Sonderzeichen" ist das gewünschte "§" - allerdings als ANSI-Zeichen (ich hatte den Code direkt im Browser ergänzt) - wenn Du das Ergebnis im Editor ansiehst, sollte es passen (ansonsten verwende eben "õ") ...

Bei mir läuft's übrigens (in der geposteten Fassung) als Batch (wobei ich ein vorhergehendes "@echo off" vorausgesetzt hatte - ansonsten die "@" der "Originalfassung" beibehalten) ...

Grüße
bastla
rubberman
rubberman 02.10.2011 um 01:30:45 Uhr
Goto Top
Hallo manni04,

bei mir funktioniert bastlas Zeile. Allerdings sehr langsam.
Probier mal folgendes:
@echo off
call :proc "%cd%"  
pause
goto :eof

:proc
for /f "tokens=1-3*" %%f in ('dir /a-d /-c /tc /4 "%~1"^|findstr /vbc:" "') do >>"test.txt" echo %%f§%%g§%%h§%~1§%%i  
for /f "delims=" %%i in ('dir /ad /b "%~1"') do call :proc "%~1\%%i"  
goto :eof 
Die Paragraphen kannst du natürlich auch durch Leerzeichen ersetzen.

Grüße
rubberman
bastla
bastla 02.10.2011, aktualisiert am 18.10.2012 um 18:48:38 Uhr
Goto Top
@rubberman
Allerdings sehr langsam.
... deswegen auch mein seinerzeitiger Kommentar dazu ... face-wink

Grüße
bastla
rubberman
rubberman 02.10.2011 um 01:38:30 Uhr
Goto Top
@bastla

Mein Ansatz "geht" auch nur face-wink
Zig mal CALL und FINDSTR hinterlassen ihre Spuren, was die Laufzeit solcher Scripts angeht.

Grüße
rubberman
manni04
manni04 02.10.2011 um 01:41:54 Uhr
Goto Top
@ bastla
Ja stimmt funktioniert wirklich, hatte anscheinend irgendwo einen Fehler drinnen. @echo off war immer drinnen.

@rubberman
Die Lösing ist ja auch sehr interessant, scheint auch wirklich schneller zu sein. Auf jeden Fall kommt aber das selbe Ergebnis raus, das ist das wichtigste ;)

Danke auf jeden Fall für eure Hilfe und die raschen Antworten.

PS: wenn ich den Pfad, der durchsucht werden soll, angeben möchte, funktioniert das wenn ich in der 2. Zeile von rubbermans Scrip das "cd" durch den Pfad austausche?

Grüße
manni
bastla
bastla 02.10.2011 um 01:44:22 Uhr
Goto Top
Hallo manni!
funktioniert das wenn ich in der 2. Zeile von rubbermans Scrip das "cd" durch den Pfad austausche?
In der Zeit, die Du für das Posten dieser Frage gebraucht hast, hättest Du das schon testen können ... face-wink

Grüße
bastla
rubberman
rubberman 02.10.2011 um 01:46:56 Uhr
Goto Top
Hallo manni04,

ja, einfach "%cd%" durch bspw. "c:\dein\verzeichnis" ersetzen, sollte funktionieren.

Grüße
rubberman

<edit: @bastla Völlig d'accord face-wink \>
manni04
manni04 02.10.2011 um 01:47:18 Uhr
Goto Top
Hallo bastla

Hab ich eh auch getestet, wollte nur sicher gehen dass das dann auch wirklich funktioniert (vorallem bei größeren Verzeichnissen), war mir nicht ganz sicher.

Grüße manni
manni04
manni04 02.10.2011 um 01:48:28 Uhr
Goto Top
@rubberman

Ok danke!

Grüße manni
bastla
bastla 02.10.2011 um 02:04:47 Uhr
Goto Top
@rubberman
Zumindest "call" ließe sich ja vermeiden (ungetestet):
@echo off & setlocal
set "Ordner=W:\TEMP\"  
set "Liste=D:\test.txt"  

pushd "%Ordner%"  
(for /f "tokens=1-3*" %%f in ('dir /a-d /-c /tc /4 2^>nul^|findstr /vbc:" "') do echo %%f§%%g§%%h§%Ordner%§%%i)>"%Liste%"  
for /f "delims=" %%a in ('dir /s /b /ad') do (  
    pushd "%%a"  
    for /f "tokens=1-3*" %%f in ('dir /a-d /-c /tc /4 2^>nul^|findstr /vbc:" "') do echo %%f§%%g§%%h§%%~a§%%i  
    popd
)>>"%Liste%"  
popd
- ist allerdings nicht so schön wie Deine Rekursion. face-smile

Der Pfad für die "Liste" muss übrigens immer vollständig angegeben werden ...

Grüße
bastla
rubberman
rubberman 02.10.2011 um 02:21:16 Uhr
Goto Top
@bastla

Die Idee ist gut, du erwischt aber irgendwie nicht die gesamte Tiefe der Verzeichnisstruktur.
Im Test:
4704 Dateien bei meinem Script
2352 Dateien bei deinem Script

Grüße
rubberman
bastla
bastla 02.10.2011 um 02:29:10 Uhr
Goto Top
@rubberman
Könnte daran liegen, dass bei mir die Liste bei jedem Durchlauf neu erstellt wird ... face-wink

Grüße
bastla
rubberman
rubberman 02.10.2011 um 02:35:54 Uhr
Goto Top
@bastla

Vollkommen richtig. Nachdem ich die Datei vor dem Lauf gelöscht habe, spucken mir beide Scripts auch die gleiche Anzahl Dateien aus. Brett vorm Kopf -- ich glaube ich geh erst mal 'ne Stunde schlafen face-wink

Grüße
rubberman
manni04
manni04 04.10.2011 um 22:01:02 Uhr
Goto Top
Hallo nochmal,

vlt kann mir ja nochmal einer von euch helfen, hätte nämlich gerne gewusst, wo ich die Parameter für die Ausgabe finden kann, also welche Möglichkeiten ich noch habe, als die bereits verwendeten.
Oder vlt kann mir ja auch einer einfach kurz zusammenschreiben was es sonst noch gibt.

Grüße
manni
bastla
bastla 04.10.2011 um 22:09:35 Uhr
Goto Top
Hallo manni04!
vlt kann mir ja nochmal einer von euch helfen
Vlt - wenn Du erklären könntest, was Du genau wissen willst (und - weil das oben in etwa so angeklungen ist - nein: ein Pendant zu "%%~ti", welches das Erstellungsdatum verwendet, gibt es nicht) ...

Grüße
bastla
manni04
manni04 04.10.2011 um 22:15:01 Uhr
Goto Top
Hallo bastla

Wollte einfach nur sehen was es noch für Möglichkeiten gibt, falls ich dieses Skript später mal erweitern möchte, also in welcher Hilfe von Batch ich das finden kann, bzw unter welchem Befehl.
Möchte nur wissen ob ich die Zeichenkette "%%f§%%g§%%h§%~1§%%i" um weitere Parameter erweitern kann.

In meinem ursprünglichen Skript habe ich die Parameter in der Batch-Hilfe vom Befehl FOR gefunden, diese funktionieren da ja aber nicht mehr, deshalb frage ich.

Lg
manni
bastla
bastla 04.10.2011 um 22:26:13 Uhr
Goto Top
Hallo manni04!

Welche weiteren Parameter sollten das den sein? %%f bis %%i entsprechen einfach den 4 (oder genauer 3 + 1 für den dann noch folgenden Rest) Teilen ("tokens") in welche die "dir"-Zeile, zB
02.10.2011  12:30            86.376 Nur als Test.txt
anhand des (Default-)Trennzeichens "Leerzeichen" zerlegt wird ...
... die Parameter in der Batch-Hilfe vom Befehl FOR gefunden, diese funktionieren da ja aber nicht mehr
Das ist so nicht ganz richtig - wenn sich eine Schleifen- oder Parameter- (wie zB %1) Variable auf eine konkrete Datei bezieht, kannst Du sehr wohl (innerhalb der Schleife oder im aufgerufenen Unterprogramm) noch zB "%%~za" oder etwa "%~dp1" verwenden.

Grüße
bastla
manni04
manni04 04.10.2011 um 22:43:55 Uhr
Goto Top
Hallo bastla!

Welche weiteren Parameter sollten das den sein?

Dachte nur das man da z.B. noch das Änderungsdatum oder ähnliches dazu ausgeben könnte.

Das ist so nicht ganz richtig - wenn sich eine Schleifen- oder Parameter- (wie zB %1) Variable auf eine konkrete Datei bezieht, kannst Du sehr wohl (innerhalb der Schleife oder im aufgerufenen Unterprogramm) noch zB "%%~za" oder etwa "%~dp1" verwenden.

Ok, dazu kenn ich mich dann leider zu wenig in Batch aus um das umzusetzen, aber trotzdem danke für die Hilfe.

Grüße
manni
bastla
bastla 04.10.2011 um 22:50:54 Uhr
Goto Top
Hallo manni04!
Dachte nur das man da z.B. noch das Änderungsdatum oder ähnliches dazu ausgeben könnte.
Mit "Änderungsdatum" kann ich etwas anfangen - bei meinem letzten Vorschlag wäre das zB "%%~ti" (da vorher in den betrachteten Ordner "%%a" gewechselt wurde, genügt der Dateiname in "%%i" als Bezug auf die Datei) ...

... "ähnliches" ist mir aber zu nebulos ... face-wink

Grüße
bastla
manni04
manni04 04.10.2011 um 23:09:33 Uhr
Goto Top
Hallo bastla

... bei meinem letzten Vorschlag wäre das zB "%%~ti" (da vorher in den betrachteten Ordner "%%a" gewechselt wurde, genügt der Dateiname in "%%i" als Bezug auf die Datei) ...

Wie gesagt sogut kenn ich mich dann leider auch nicht aus, aber trotzdem danke.

... "ähnliches" ist mir aber zu nebulos ...

Damit hab ich einfach nur die restlichen Parameter der FOR-Schleife gemeint, aber is nicht so wichtig. War nur interesse halber.

Lg manni
manni04
manni04 04.10.2011 um 23:25:24 Uhr
Goto Top
Jetzt ist mir noch aufgefallen, dass Umlaute und Sonderzeichen falsch dargestellt werden. Kennst du dafür auch eine Lösung, den Zeichensatz gleich in Batch umzuwandeln?

Meine Testdatei "ÜüÄäÖöß!§$%&()=`´'#;µ²³{}^°.txt" und das Ergebnis "šŽ„™”á!õ$%&()=`ï'#;æýü{}^ø.txt"

Grüße
manni
bastla
bastla 05.10.2011 um 07:56:59 Uhr
Goto Top
Hallo manni04!

Setz an den Anfang des Batches die Zeile
chcp 1252>nul
Grüße
bastla
manni04
manni04 05.10.2011 um 19:31:58 Uhr
Goto Top
Hallo bastla!

Super, funktioniert einwandfrei. Danke für die tolle Hilfe!

Grüße
manni