Umbenennung von mehreren Dateinamen in veschiedenen Verzeichnissen per PowerShell

BenoitM

Cadet 3rd Year
Registriert
März 2012
Beiträge
44
Hallo,

ich bin auf der Suche nach dem Fehler in meinem PowerShell-Script bzw. nach einer alternativen Lösung für das Umbenennen von .log und .txt Dateien nach dem bestimmten Schema - von 00001 beginnend (5-stellig) - bis keine .log oder .txt Dateien mehr in diesem Verzeichnis sind.
Also alle .log und .txt Dateien innerhalb eines Verzeichnisses - zuvor sortiert - von 00001 beginnend, fortlaufend umbenennen.

Die Verzeichnis bzw. Dateistruktur sieht ca. wie folgt aus:


C:\PFAD_ÜBERORDER\VerzeichnisN+1\Verzeichnis_0001\Ungewünschter_Dateiname(8794563).txt
C:\PFAD_ÜBERORDER\VerzeichnisN+1\Verzeichnis_0002\Ungewünschter_Dateiname(1235474567).log
etc.


C:\PFAD_ÜBERORDER\VerzeichnisN+2\Verzeichnis_0001\Ungewünschter_Dateiname(190283).txt
C:\PFAD_ÜBERORDER\VerzeichnisN+2\Verzeichnis_0002\Ungewünschter_Dateiname(89180).log
C:\PFAD_ÜBERORDER\VerzeichnisN+2\Verzeichnis_0003\Ungewünschter_Dateiname(901901190210).log
C:\PFAD_ÜBERORDER\VerzeichnisN+2\Verzeichnis_0004\Ungewünschter_Dateiname(901901190210).log


C:\PFAD_ÜBERORDER\VerzeichnisN+3\Verzeichnis_0001\Ungewünschter_Dateiname(190283).log
C:\PFAD_ÜBERORDER\VerzeichnisN+3\Verzeichnis_0002\Ungewünschter_Dateiname(190283).log
C:\PFAD_ÜBERORDER\VerzeichnisN+3\Verzeichnis_0003\Ungewünschter_Dateiname(190283).log
etc.
usw. mit VerzeichnisN+4; Verzeichnis N+5; etc.

Statisch in dieser Aufstellung ist daher der der Teil C:\PFAD_ÜBERORDNER
Die Verzeichnisname (VerzeichnisN+1; usw.) sind unterschiedlich. Dies sollte jedoch ohnehin irrelevant sein, da die Rename-Funktion nur innerhalb eines Ordner greifen soll.

Mein Ansatz für dieses Problem sieht bisher so aus:

Code:
$path = "C:\PFAD_ÜBERORDNER" # Quellverzeichnis
$DIRlist = gci -path $path -recurse -type directory
$list = gci -path $path -recurse | ? {$_.extension -eq ".log";".txt"}
$name = "{0:D5}" -f ($runs + 1)

Rename-Item ($list + $name) -NewName $name

Gibt folgende Fehlermeldung:

Code:
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS H:\> $path = "C:\PFAD_ÜBERORDNER"
# Quellverzeichnis
PS H:\> $DIRlist = gci -path $path -recurse -exclude *.log, *.txt
PS H:\> $list = gci -path $path -recurse | ? {$_.extension -eq ".txt";".log"}
PS H:\> $name = "{0:D5}" -f ($runs + 1)
PS H:\>
PS H:\> Rename-Item ($list + $name) -NewName $name
[COLOR="#FF0000"]Rename-Item : Cannot convert 'System.Object[]' to the type 'System.String' requ
ired by parameter 'Path'. Specified method is not supported.
At line:1 char:12
+ Rename-Item <<<<  ($list + $name) -NewName $name
    + CategoryInfo          : InvalidArgument: (:) [Rename-Item], ParameterBin
   dingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Comma
   nds.RenameItemCommand[/COLOR]
PS H:\>

Habt ihr eine Lösung?
 
Beim ersten Hingucken erkenne ich, dass dir eine Schleife fehlt. Foreach $i in $list eben.

Du versuchst, wenn man das mal so hinschreibst, beim Rename, nen Array aufzulösen, dort sagt er eben nein zu.
 
Wie genau würdest du das in die Codezeilen einbauen?
 
Zurück
Oben