PowerShell 1.0-スクリプトが別のディレクトリにある場合、ファイルの名前変更は失敗します

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

質問

古いログファイルの名前を変更しようとしていますが、スクリプトはログファイルと同じフォルダーに保存されている場合にのみ機能します。これがコードです:

cls
$file = gci E:\logs |? {$_.extension -eq ".log" |% {rename-item $_ ($_.Name + ".old")}

このスクリプトを実行したとき E:\logs, 、うまく機能します。ただし、C:スクリプトからこのスクリプトを実行すると、このエラーが発生します。

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

私も使用しようとしました Move-Item でコマンド -literalpath 切り替えが同じ結果がありました

役に立ちましたか?

解決

名前のプロパティは、パスのないファイル名だけを提供します。おそらく、代わりにFullNameプロパティを使用したいと思うでしょう。 Rename-Itemがソースファイル名のパイプライン入力を受け入れるため、これを簡素化することもできます。

gci E:\logs *.log | rename-item -newname {$_.FullName + ".old"}

また、GCI(get-childitem)を使用すると、 -Filter パルメイター。このパラメーターは位置パラメーター(2)であるため、パラメーター名を指定する必要さえありません。

他のヒント

DOSパスにないために見つけていないように聞こえます。

Viperjay

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top