2016-11-03 2 views
0

Ich habe eine Software, die nach einer Datei namens "report.txt" sucht. Die Textdateien haben jedoch nicht alle den Namen report.txt und ich muss Hunderte von Unterordnern durchlaufen.Rename-Element in mehreren Unterordnern

Szenario:

J:\Logs 
26-09-16\log.txt 
27-09-16\report270916.txt 
28-09-16\report902916.txt 

ich durch alle Unterverzeichnisse für die Dateien *.txt in J:\logs suchen möchten, und benennen Sie sie report.txt.

habe ich versucht, diese aber es beschwerten sich über den Weg:

Get-ChildItem * | 
Where-Object { !$_.PSIsContainer } | 
Rename-Item -NewName { $_.name -replace '_$.txt ','report.txt' } 

Antwort

1

Get-ChildItem * wird Ihre aktuelle Pfad erhalten, so ist das in stattdessen lassen Sie den Pfad, den Sie Get-ChildItem -Path "J:\Logs" und recurse hinzufügen möchten definieren verwenden, weil wir die Dateien in alle wollen die Unterordner.

Dann lassen Sie sich den Einsatz die include und file Parameter von Get-ChildItem statt Where-Object

Dann, wenn wir Rohr hinzufügen, dass zu ForEach, können wir das Rename-Item für jedes Objekt verwenden, in dem das Objekt seine $_ umbenennen und Die NewName wird report.txt sein.

Get-ChildItem -Path "J:\Logs" -include "*.txt" -file -recurse | ForEach {Rename-Item -Path $_ -NewName "report.txt"} 

Wir können diese schneiden ein wenig in Einzeiler Art und Weise mit einem paar Aliase nach unten und stützen sich auf Position, anstatt dass jeder einzelnen Parameter

gci "J:\Logs" -include "*.txt" -file -recurse | % {ren $_ "report.txt"} 
+0

Danke, das ist genau das, was ich wollte. :) – Andy

Verwandte Themen