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

Другие вопросы по тегам