Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
GELÖST

Erstellungsdatum mit Pfad auslesen

Frage Entwicklung Batch & Shell

Mitglied: manni04

manni04 (Level 1) - Jetzt verbinden

01.10.2011, aktualisiert 18.10.2012, 3309 Aufrufe, 27 Kommentare

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:
01.
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:
01.
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
Mitglied: bastla
02.10.2011, aktualisiert 18.10.2012
Hallo manni04!

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

Grüße
bastla
Bitte warten ..
Mitglied: manni04
02.10.2011 um 00:56 Uhr
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:

01.
(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 
02.
(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 
03.
(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
Bitte warten ..
Mitglied: bastla
02.10.2011 um 01:02 Uhr
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]
Bitte warten ..
Mitglied: manni04
02.10.2011 um 01:14 Uhr
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
Bitte warten ..
Mitglied: bastla
02.10.2011 um 01:27 Uhr
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
Bitte warten ..
Mitglied: rubberman
02.10.2011 um 01:30 Uhr
Hallo manni04,

bei mir funktioniert bastlas Zeile. Allerdings sehr langsam.
Probier mal folgendes:
01.
@echo off 
02.
call :proc "%cd%" 
03.
pause 
04.
goto :eof 
05.
 
06.
:proc 
07.
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 
08.
for /f "delims=" %%i in ('dir /ad /b "%~1"') do call :proc "%~1\%%i" 
09.
goto :eof 
Die Paragraphen kannst du natürlich auch durch Leerzeichen ersetzen.

Grüße
rubberman
Bitte warten ..
Mitglied: bastla
02.10.2011, aktualisiert 18.10.2012
@rubberman
Allerdings sehr langsam.
... deswegen auch mein seinerzeitiger Kommentar dazu ...

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
02.10.2011 um 01:38 Uhr
@bastla

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

Grüße
rubberman
Bitte warten ..
Mitglied: manni04
02.10.2011 um 01:41 Uhr
@ 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
Bitte warten ..
Mitglied: bastla
02.10.2011 um 01:44 Uhr
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 ...

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
02.10.2011 um 01:46 Uhr
Hallo manni04,

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

Grüße
rubberman

<edit: @bastla Völlig d'accord \>
Bitte warten ..
Mitglied: manni04
02.10.2011 um 01:47 Uhr
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
Bitte warten ..
Mitglied: manni04
02.10.2011 um 01:48 Uhr
@rubberman

Ok danke!

Grüße manni
Bitte warten ..
Mitglied: bastla
02.10.2011 um 02:04 Uhr
@rubberman
Zumindest "call" ließe sich ja vermeiden (ungetestet):
01.
@echo off & setlocal 
02.
set "Ordner=W:\TEMP\" 
03.
set "Liste=D:\test.txt" 
04.
 
05.
pushd "%Ordner%" 
06.
(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%" 
07.
for /f "delims=" %%a in ('dir /s /b /ad') do ( 
08.
    pushd "%%a" 
09.
    for /f "tokens=1-3*" %%f in ('dir /a-d /-c /tc /4 2^>nul^|findstr /vbc:" "') do echo %%f§%%g§%%h§%%~a§%%i 
10.
    popd 
11.
)>>"%Liste%" 
12.
popd
- ist allerdings nicht so schön wie Deine Rekursion.

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

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
02.10.2011 um 02:21 Uhr
@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
Bitte warten ..
Mitglied: bastla
02.10.2011 um 02:29 Uhr
@rubberman
Könnte daran liegen, dass bei mir die Liste bei jedem Durchlauf neu erstellt wird ...

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
02.10.2011 um 02:35 Uhr
@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

Grüße
rubberman
Bitte warten ..
Mitglied: manni04
04.10.2011 um 22:01 Uhr
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
Bitte warten ..
Mitglied: bastla
04.10.2011 um 22:09 Uhr
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
Bitte warten ..
Mitglied: manni04
04.10.2011 um 22:15 Uhr
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
Bitte warten ..
Mitglied: bastla
04.10.2011 um 22:26 Uhr
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
Bitte warten ..
Mitglied: manni04
04.10.2011 um 22:43 Uhr
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
Bitte warten ..
Mitglied: bastla
04.10.2011 um 22:50 Uhr
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 ...

Grüße
bastla
Bitte warten ..
Mitglied: manni04
04.10.2011 um 23:09 Uhr
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
Bitte warten ..
Mitglied: manni04
04.10.2011 um 23:25 Uhr
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
Bitte warten ..
Mitglied: bastla
05.10.2011 um 07:56 Uhr
Hallo manni04!

Setz an den Anfang des Batches die Zeile
chcp 1252>nul
Grüße
bastla
Bitte warten ..
Mitglied: manni04
05.10.2011 um 19:31 Uhr
Hallo bastla!

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

Grüße
manni
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...