2016-12-07 7 views
-1

Ich wurde gebeten, eine Liste aller Dateien in einem Ordner und seinen Unterordnern zur Verfügung zu stellen.PowerShell mit Robocopy zum Auflisten von Dateien in CSV

Erste Bemühungen mit Powershell und DOS-Befehle bewiesen, dass es nicht mit Datei-und Ordnernamen, die Windows 256 Länge überschreiten überschritten wurde, entschied ich, ich musste Robocopy verwenden, um eine Liste aller Dateien zu erhalten.

Das funktionierte großartig, aber die Ausgabe wird in einer Textdatei protokolliert. Der größte Teil der Ausgabe ist tabulatorgetrennt, also habe ich einen Weg gefunden, dies in einen csv umzuwandeln.

Das Problem, das ich habe, ist ein Leerzeichen zwischen der Dateigröße und dem Datum. Nach der Konvertierung in CSV die "Dateigröße, Datum und Uhrzeit" alle in der gleichen Spalte existiert, wenn der CSV in Excel geöffnet ist. Es macht mir nichts aus, dass Datum und Uhrzeit in derselben Spalte stehen, aber ich brauche fileszie in einer eigenen Spalte.

Die Frage ist also, wie kann ich den Platz zwischen Dateigröße und Datum mit "," (einschließlich der doublequotes) mit einem Powershell-Befehl ersetzen.

Ich kann nicht alle Leerzeichen ersetzen, da es möglicherweise Räume in einigen der Namensdatei sein

Hoffe, dass ich dies so klar wie möglich erklärt haben.

TIA

+0

Bitte zeigen Sie uns, was Sie getan haben, scriptweise, mit einem [mcve] und Beispieldatensatz zwischen, was 'richtig' und 'falsch' ist, anstatt es ziemlich breit zu beschreiben. Ansonsten ist es schwierig, genau herauszufinden, wie Sie Ihr Problem lösen können. – gravity

Antwort

0

Die Powershell unten verwendet Robocopy eine Verzeichnisliste zu erzeugen, wie Powershell-Objekte:

https://gallery.technet.microsoft.com/scriptcenter/Get-Deeply-Nested-Files-a2148fd7

Es gibt einen Blog-Post ist damit

https://learn-powershell.net/2013/04/01/list-all-files-regardless-of-260-character-path-restriction-using-powershell-and-robocopy/

Mit dem gehen oben können Sie tun:

Get-FolderItem -Path "<yourpath>" | ConvertTo-Csv 
+0

Brilliant, ich wünschte, ich hätte das früher gefunden.Es hat eine Weile gedauert, aber ich bin froh, dass ich es gemacht habe – GTEM

0

So weiß ich, Ihre Frage RoboCopy anfordert, und ich werde Ihnen eine Möglichkeit geben, dass am Boden zu tun, aber imo der beste Weg, mit 255+ char Dateinamen beschäftigen mit dem. Netzbibliothek AlphaFS. Sobald Sie das Modul importieren, ist das Abrufen einer schönen Menge von Objekten nur ein Methodenaufruf. Wenn Sie nur die Namen der Dateien benötigen diese Arbeit:

[Alphaleonis.Win32.Filesystem.Directory]::GetFiles($path) 

Wenn Sie weitere Informationen benötigen, benötigen Sie 2 Zeilen

$d = [Alphaleonis.Win32.Filesystem.DirectoryInfo]($path) 
$d.GetFiles("*","AllDirectories") 

Wenn Ihr angesteckt mit RoboCopy dann können Sie immer tun ein -replace, um die Registerkarten durch Leerzeichen zu ersetzen und dann ein Convertfrom-CSV mit einem Leerzeichen zu machen.

+0

* Der beste Weg, um mit 255+ Char-Dateinamen umzugehen, ist mit der .net-Bibliothek AlphaFS * - befürworten Sie dies gegenüber Windows 10 Anniversary Update mit der 250 Zeichen Grenze Entfernung Einstellung? – TessellatingHeckler

+1

Wenn Sie möchten, dass der Code zu etwas anderem als einer vollständig aktualisierten Kopie von Gewinn 10 übertragbar ist, dann ja –

+0

Wird Ihre Methode versuchen, wenn ich morgen eine Chance bekomme. – GTEM

Verwandte Themen