Powershell 1.0-当脚本位于其他目录中时,重命名文件失败

Powershell 1.0-当脚本位于其他目录中时,重命名文件失败,powershell,scripting,powershell-1.0,Powershell,Scripting,Powershell 1.0,我正在尝试批量重命名旧日志文件,但只有当脚本存储在与日志文件相同的文件夹中时,脚本才对我有效。代码如下: cls $file = gci E:\logs |? {$_.extension -eq ".log" |% {rename-item $_ ($_.Name + ".old")} 当我从E:\logs运行这个脚本时,它运行得很好。但是,当我从C:\Scripts运行此脚本时,会出现以下错误: Rename-Item: Cannot rename because item at 'my.l

我正在尝试批量重命名旧日志文件,但只有当脚本存储在与日志文件相同的文件夹中时,脚本才对我有效。代码如下:

cls
$file = gci E:\logs |? {$_.extension -eq ".log" |% {rename-item $_ ($_.Name + ".old")}
当我从
E:\logs
运行这个脚本时,它运行得很好。但是,当我从C:\Scripts运行此脚本时,会出现以下错误:

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

我还尝试将
移动项
命令与
-literalpath
开关一起使用,但得到了相同的结果

听起来好像找不到它,因为它不在dos路径中


viperjay

Name属性只提供文件名而不提供路径。您可能希望改用FullName属性。您还可以简化此操作,因为重命名项接受源文件名的管道输入:

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

还请注意,gci(get childitem)允许您使用
-filter
参数筛选它输出的项目。此参数是一个位置参数(2),因此您甚至不必指定参数名称。

wow,这比我刚才所做的要简单。它也可以在任何目录下工作。泰!