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-Key: 661663

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

Printed on: April 23, 2024 at 15:04 o'clock

Member: TK1987
Solution TK1987 Mar 11, 2021 updated at 10:44:57 (UTC)
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
Member: erikro
erikro Mar 11, 2021 at 10:41:57 (UTC)
Goto Top
Moin,

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

Das war's.

hth

Erik
Mitglied: 147669
147669 Mar 11, 2021 updated at 10:50:36 (UTC)
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  
Member: Nohouse303
Nohouse303 Mar 11, 2021 at 12:17:03 (UTC)
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
Mitglied: 147669
147669 Mar 11, 2021 updated at 15:12:09 (UTC)
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  
Member: erikro
erikro Mar 11, 2021 at 12:31:41 (UTC)
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
Member: TK1987
Solution TK1987 Mar 11, 2021 updated at 12:46:54 (UTC)
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  
Member: Nohouse303
Nohouse303 Mar 11, 2021 at 12:43:10 (UTC)
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
Member: Nohouse303
Nohouse303 Mar 11, 2021 at 12:53:04 (UTC)
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
Member: Nohouse303
Nohouse303 Mar 19, 2021 at 15:55:40 (UTC)
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
Mitglied: 147669
147669 Mar 19, 2021 updated at 16:20:59 (UTC)
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 |  ..............