Powershell 1.0 - Dateien umbenennen schlägt fehl, wenn Skript in einem anderen Verzeichnis ist

StackOverflow https://stackoverflow.com/questions/3072432

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

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top