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.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
переключиться, но имел тот же результат
2 ответа
Свойство Name дает вам только имя файла без пути. Вы, вероятно, хотите использовать свойство FullName. Вы также можете упростить это, поскольку Rename-Item принимает входные данные конвейера для исходного файла:
gci E:\logs *.log | rename-item -newname {$_.FullName + ".old"}
Также обратите внимание, что gci (get-childitem) позволяет вам фильтровать элементы, которые он выводит, используя -Filter
parmater. Этот параметр является позиционным параметром (2), поэтому вам даже не нужно указывать имя параметра.
Похоже, что он не находит его, потому что он не в пути DOS.
viperjay