Powershell 1.0 - Dateien umbenennen schlägt fehl, wenn Skript in einem anderen Verzeichnis ist
-
28-09-2019 - |
Frage
Ich versuche, Batch umbenennen alte Protokolldateien, aber das Skript funktioniert nur für mich, wenn das Skript im selben Ordner wie die Protokolldateien gespeichert werden. Hier ist der Code:
cls
$file = gci E:\logs |? {$_.extension -eq ".log" |% {rename-item $_ ($_.Name + ".old")}
Als ich das Skript von E:\logs
laufen, es funktioniert gut. Allerdings, wenn ich dieses Skript von C ausführen: \ Scripts, es gibt mir diese Fehlermeldung:
Rename-Item: Cannot rename because item at 'my.log.file.log' does not exist.
At C:\Scripts\rename-script.ps1:2 char:92
+ $file = gci E:\logs |? {$_.extension -eq ".log" |% {rename-item $_ ($_.Name + ".old")}
+ CategoryInfo : InvalidOperation (:) [Rename-Item], FSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand
Ich habe auch versucht die Move-Item
Befehl mit dem -literalpath
Schalter hatte aber das gleiche Ergebnis
Lösung
Die Eigenschaft Name gibt Ihnen nur die Dateinamen ohne den Pfad. Sie wollen wahrscheinlich stattdessen die Fullname-Eigenschaft verwenden. Sie können auch diese vereinfachen, da Rename-Item-Pipeline-Eingang für den Quelldateinamen akzeptiert:
gci E:\logs *.log | rename-item -newname {$_.FullName + ".old"}
Sie auch, dass gci beachten (get-childitem) können Sie die Elemente filtern sie die -Filter
parmater Ausgänge. Dieser Parameter ist ein Positionsparameter (2), so dass Sie auch nicht die Parameternamen angeben.
Andere Tipps
Es klingt wie, dass es nicht, es zu finden, weil es nicht in dem DOS-Pfad befindet.
viperjay