我正在尝试批量重命名旧的日志文件,但是当脚本存储在与日志文件相同的文件夹中时,脚本仅适用于我。这是代码:
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
我也尝试将Move-Item
命令与-literalpath
开关一起使用,但结果相同
答案 0 :(得分:5)
Name属性为您提供没有路径的文件名。您可能希望使用FullName属性。您也可以简化此操作,因为Rename-Item接受源文件名的管道输入:
gci E:\logs *.log | rename-item -newname {$_.FullName + ".old"}
另请注意,gci(get-childitem)允许您使用-Filter
parmater过滤其输出的项目。此参数是位置参数(2),因此您甚至不必指定参数名称。
答案 1 :(得分:0)
听起来它没有找到它,因为它不在dos路径中。
viperjay