2010-06-18 60 views
2

我想批量重命名旧的日志文件,但脚本只适用于我当脚本存储在与日志文件相同的文件夹。下面是代码:Powershell 1.0 - 重命名文件失败,当脚本在不同的目录

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 

我使用与-literalpath开关Move-Item命令也试过,但有同样的结果

回答

5

Name属性为您提供没有路径的文件名。您可能想改为使用FullName属性。您还可以简化这一点,因为重命名,项目的管道输入的源文件名:

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

还要注意的是GCI(GET-childitem)允许你过滤它输出使用-Filter parmater的项目。该参数是位置参数(2),因此您甚至不必指定参数名称。

+0

哇,这比我在做的事更容易。它也适用于任何目录。 TY! – 2010-06-21 18:08:59

0

这听起来像它没有找到它,因为它不在DOS路径中。

viperjay

相关问题