lupora
Goto Top

Anfrage Ordner Auflistungs Skript

Hallo zusammen,

ich habe ein Skript was einen Ordner durchsucht und alle Ordner samt Unterordner mit der jeweiligen Anzahl der Dateien auflistet.

Output ist also eine TXT die so ausschaut:

0001107096 35 Dateien
0001107412 25 Dateien
0001115080 35 Dateien


Jetzt hätte ich gerne, dass er neben jedem Ordnernamen noch das Erstelldatum listet.
z.b.

Ordnername 35 Dateien 14.12.2019

Kann jemand das Skript unten entsprechend anpassen? face-smile


@echo off &setlocal

set "root=PfadZumOrdnerDasAufgelistetWerdenSoll"

test.txt type nul
for /f "delims=" %%a in ('dir /ad /b "%root%" 2^>nul') do (
set "folder=%root%\%%~a"
set /a n=0
setlocal enabledelayedexpansion
for /f "delims=" %%b in ('dir /a-d /b "!folder!" 2^>nul') do (
set /a n+=1
)
set "folder=%%~a "
>>test.txt echo !folder:~,40! !n! Dateien
endlocal
)

Content-ID: 523670

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

Ausgedruckt am: 25.11.2024 um 18:11 Uhr

TK1987
TK1987 09.12.2019 aktualisiert um 16:35:18 Uhr
Goto Top
Bitte Code immer im Codeblock posten.
Zitat von @Lupora:
Jetzt hätte ich gerne, dass er neben jedem Ordnernamen noch das Erstelldatum listet.
Muss es wirklich das Erstelldatum sein, oder reicht auch das Änderungsdatum?
setlocal EnableDelayedExpansion muss übrigens nur einmalig für das gesamte Script aktiviert werden.

Falls Änderungsdatum in Ordnung ist:
@echo off
setlocal enabledelayedexpansion

set "root=PfadZumOrdnerDasAufgelistetWerdenSoll"  

>test.txt type nul
cd /d "%root%"  
for /f "delims=" %%a in ('dir /ad /b 2^>nul') do (  
	set "folder=%%~a"  
	set datum=%%~ta
	echo !datum:~0,10!
	set n=0
	for /f "delims=" %%b in ('dir /a-d /b "!folder!" 2^>nul') do (  
		set /a n+=1
		)
	set "folder=%%~a "  
	>>"%~dp0\test.txt" echo !folder:~,40! !n! Dateien !datum:~0,10!  
	)

Das wirkliche Erstelldatum kann bei CMD zwar theoretisch mittels wmic abgerufen werden, da dies in der Praxis jedoch insbesondere bei mehreren Ordnern recht lange dauert, würde ich hier stattdessen eher einen Powershell-Befehl einfügen, der direkt alles übernimmt:
@echo off
set "root=PfadZumOrdnerDasAufgelistetWerdenSoll"  

powershell ls -dir '%root%' ^| %% { $_.name+' '+(ls -file $_.FullName).length+' Dateien '+$_.CreationTime.ToString('dd.MM.yyyy') } ^| Out-File -Encoding Default test.txt  
Lupora
Lupora 10.12.2019 um 07:46:22 Uhr
Goto Top
Kann man das Powersheel Skript noch so anpassen, dass es auch durch Unterordner durchsucht und diese ebenfalls mit auflistet?
TK1987
TK1987 10.12.2019 um 07:58:39 Uhr
Goto Top
Kein Problem.
@echo off
set "root=PfadZumOrdnerDasAufgelistetWerdenSoll"  

powershell ls -dir '%root%' ^| %% { $_.name+' '+(ls -r -file $_.FullName).length+' Dateien '+$_.CreationTime.ToString('dd.MM.yyyy') } ^| Out-File -Encoding Default test.txt  
Lupora
Lupora 10.12.2019 um 08:00:41 Uhr
Goto Top
Ok, noch ein seltsames Verhalten: Bei manchen Ordnern scheint er falsch zu zählen.
Anbei ein Bild. Im Schnitt sind in den Ordnern zwischen 20-40 Dateien. Manchmal zählt er aber plötzlich riesige Dateimengen (z.B. 19342).
Wenn ich den Ordner öffne ist meist nur eine Datei drin.

Kannst sich das jemand erklären?

Hinweis: Ich scanne auf einem Netzlaufwerk. Den Pfad habe ich wie folgt angegeben:

set "root=\\192.168.1.7\d\folderx"
clipboard01
Lupora
Lupora 10.12.2019 um 08:11:57 Uhr
Goto Top
Und noch kleiner Nachtrag. geht zusätzlich zum Datum auch die Uhrzeit des Erstelldatums?

Also die Uhrzeit wann der Ordner erstellt wurde? face-smile
TK1987
TK1987 10.12.2019 aktualisiert um 08:45:14 Uhr
Goto Top
Zitat von @Lupora:
Ok, noch ein seltsames Verhalten: Bei manchen Ordnern scheint er falsch zu zählen.
Anbei ein Bild. Im Schnitt sind in den Ordnern zwischen 20-40 Dateien. Manchmal zählt er aber plötzlich riesige Dateimengen (z.B. 19342).
Wenn ich den Ordner öffne ist meist nur eine Datei drin.

Kannst sich das jemand erklären?
Jo, mein Fehler. Mit length zeigt er die Dateigröße an, wenn nur ein Element vorhanden ist. Hier muss natürlich stattdessen count hin.

Zitat von @Lupora:
Und noch kleiner Nachtrag. geht zusätzlich zum Datum auch die Uhrzeit des Erstelldatums?
Klar geht das. Und sag doch gleich, dass du das Ganze als Excelliste ausgegeben haben willst face-wink
@echo off
set "root=PfadZumOrdnerDasAufgelistetWerdenSoll"  

powershell ls -dir '%root%' ^| %% { $_^|Add-Member NoteProperty 'Anzahl Dateien' (ls -r -file $_.FullName).count;$_ } ^| select Name,'Anzahl Dateien',Creationtime ^| Export-Csv -e default -d ';' -nti test.csv