nohouse303
Goto Top

Batch zur Ausgabe von Erstelldatum und Dateinamen mit Pfad

Hallo und guten Tag,

ich habe wiedermal eine Herausforderung die ich alleine nicht lösen kann.
Diverse Ansätze habe ich im Netz und im Forum gefunden.
Leider lösen alle samt meine Aufgabe nur zum Teil.

Ich möchte eine Datei schreiben die mir alle Pfade durchsucht und die Dateien mit Pfadangaben und dem Erstelldatum in eine z.B. CSV-Datei schreibt.
Die Schwierigkeit liegt jetzt darin, das einige Dateien im n-ten Unterverzeichnis liegen und ggf. dann noch einen langen Dateinamen haben.
Somit kommt wohl die Batch an die Windowsgrenzen von maximal 260 erlaubten Zeichen.
D. h. der Dateiname oder das Datum wird dann nicht mehr ausgegeben.

Z. B. Dateipfad mit Datei

D:\Test\11111111111111111111111111111111111111111111111111111111111111111111111 - Kopie\12345678\33333\4444\555555\6666\7777777\8888888\9999\aaaaa\bbbbbbb\ccccccccc\dddddddddd\eeeeeeeeeeeeeee\fffffffffffffffffffffff\gggggggggggggg\hhhhhhhhhhhhhhhhhhh\4444\1212121212121212121212.txt

Gewünschte Ausgabe

15.05.2020 D:\Test\11111111111111111111111111111111111111111111111111111111111111111111111 - Kopie\12345678\33333\4444\555555\6666\7777777\8888888\9999\aaaaa\bbbbbbb\ccccccccc\dddddddddd\eeeeeeeeeeeeeee\fffffffffffffffffffffff\gggggggggggggg\hhhhhhhhhhhhhhhhhhh\4444\1212121212121212121212.txt

Wäre Klasse wenn sich dem mal jemand annehmen könnte.

Gruß Nohouse

Content-ID: 661663

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

Ausgedruckt am: 20.11.2024 um 05:11 Uhr

TK1987
Lösung TK1987 11.03.2021 aktualisiert um 11:44:57 Uhr
Goto Top
Moin,

Zitat von @Nohouse303:
Die Schwierigkeit liegt jetzt darin, das einige Dateien im n-ten Unterverzeichnis liegen und ggf. dann noch einen langen Dateinamen haben.
Somit kommt wohl die Batch an die Windowsgrenzen von maximal 260 erlaubten Zeichen.
In dem Fall mit Batch dann kaum noch lösbar --> Powershell
$Pfad = 'C:\Test'  
Get-Childitem -Recurse -File $Pfad | Select CreationTime,Fullname | Export-CSV -NoTypeInformation -delimiter ' ' -Enc utf8 "C:\Dateien.csv"  

Gruß Thomas
erikro
erikro 11.03.2021 um 11:41:57 Uhr
Goto Top
Moin,

get-childitem -recurse | select creationtime,fullname | export-csv test.csv

Das war's.

hth

Erik
147669
147669 11.03.2021 aktualisiert um 11:50:36 Uhr
Goto Top
Aber nur wenn man das in Windows 10 vorher auch freischaltet sonst scheitert die PS auch an den langen Pfaden
.NET hatte es ja bekanntlich lange auch nicht so mit langen Pfaden...
New-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name LongPathsEnabled -Value 1 -PropertyType DWORD -Force  
Nohouse303
Nohouse303 11.03.2021 um 13:17:03 Uhr
Goto Top
Moin,
Klasse krasse schnelle Antworten.
PS ist zwar gar nicht so meins aber Thomas Schnipsel funktioniert klasse da keine Leerverzeichnisse ausgegeben werden.

Funktioniert bei mir auf zwei verschiedenen W10 Clients auch wenn der LongPathsEnabled auf 0 ist.

Schöner wäre noch das Ganze ohne Uhrzeit und in zwei Spalten in der CSV-Datei. Geht das?

Gruss der Torsten
147669
147669 11.03.2021 aktualisiert um 16:12:09 Uhr
Goto Top
Zitat von @Nohouse303:
Funktioniert bei mir auf zwei verschiedenen W10 Clients auch wenn der LongPathsEnabled auf 0 ist.
Wohl inzwischen Standard auch ohne Key. MS ändert ja gerne mal was ...
Schöner wäre noch das Ganze ohne Uhrzeit und in zwei Spalten in der CSV-Datei. Geht das?
Jepp
ls 'D:\Ordner' -File -Recurse | select @{n='CreationDate';e={$_.CreationTime.toString('g')}},FullName | export-csv 'D:\export.csv' -Delimiter ";" -NoType -Encoding UTF8  
erikro
erikro 11.03.2021 um 13:31:41 Uhr
Goto Top
Moin,

get-childitem -Recurse -File $Pfad | select @{l="created";e={$_.creationtime.tostring("dd.MM.yy")}},fullname | Export-CSV -NoTypeInformation -delimiter ' ' -Enc utf8 "C:\Dateien.csv"  

hth

Erik
TK1987
Lösung TK1987 11.03.2021 aktualisiert um 13:46:54 Uhr
Goto Top
Zitat von @Nohouse303:
PS ist zwar gar nicht so meins aber Thomas Schnipsel funktioniert klasse da keine Leerverzeichnisse ausgegeben werden.
Vielmehr werden überhaupt keine Verzeichnisse ausgegeben (ist also equivalent zu dir /s /b /a-d in cmd), schließlich hast du ja nur von Dateien gesprochen.
Schöner wäre noch das Ganze ohne Uhrzeit und in zwei Spalten in der CSV-Datei. Geht das?
Klar geht das. Das mit den 2 Zeilen hängt aber vom verwendeten Office ab. Excel trennt Csv-Dateien z.B. standardmäßig bei Semikolon, daher müsste bei Export-CSV dann -delimiter ';' hin.

Zitat von @147669:
 ls 'D:\Ordner' -File -Recurse | select @{n='CreationDate';e={$_.CreationTime.Date}},FullName | export-csv 'D:\export.csv' -Delimiter ";" -NoType -Encoding UTF8  
Nicht ganz, so gibt er ja die Uhrzeit immer noch mit aus (nur halt als Mitternacht).
 ls 'D:\Ordner' -File -Recurse | select @{n='CreationDate';e={$_.CreationTime.ToString('dd.MM.yyyy')}},FullName | export-csv 'D:\export.csv' -Delimiter ";" -NoType -Encoding UTF8  
Nohouse303
Nohouse303 11.03.2021 um 13:43:10 Uhr
Goto Top
mmmmmhhhh,

Schmitzkatz funktioniert. Aber:

Ausgabe:
29.10.2020 00:00:00 D:\test\blablub.txt

Zeit ist noch drin und bei allen Dateien auf 00:00:00

Grins
Nohouse303
Nohouse303 11.03.2021 um 13:53:04 Uhr
Goto Top
Das war der richtig TK1987

Fehlte nur noch ne Klammer zu:

 ls 'D:\Ordner' -File -Recurse | select @{n='CreationDate';e={$_.CreationTime.ToString('dd.MM.yyyy')}},FullName | export-csv 'D:\export.csv' -Delimiter ";" -NoType -Encoding UTF8  

Klasse!!!

Vielen Dank
Nohouse303
Nohouse303 19.03.2021 um 16:55:40 Uhr
Goto Top
Halllo,
ich muss leider nochmal nachfassen.

Wie muss ich den Code verändern/erweitern wenn ich nachfolgende Dateileichen auch mit listen will/muss.

~$blabla.pptm
~$blub.xlsm

Danke und Gruss

Torsten
147669
147669 19.03.2021 aktualisiert um 17:20:59 Uhr
Goto Top
Zitat von @Nohouse303:

Halllo,
ich muss leider nochmal nachfassen.

Wie muss ich den Code verändern/erweitern wenn ich nachfolgende Dateileichen auch mit listen will/muss.

~$blabla.pptm
~$blub.xlsm

Danke und Gruss

Torsten
Du musst in dem Fall noch ein -Force an Get-Childitem anhängen da das in der Regel "versteckte" Dateien sind und diese nur gelistet werden wenn man -Force als Parameter setzt. Der Rest bleibt gleich und habe ich hier weg gelassen.
 ls 'D:\Ordner' -File -Recurse -Force |  ..............