Powershell 1.0 - переименование файлов не выполняется, когда скрипт находится в другом каталоге - PullRequest
2 голосов
/ 18 июня 2010

Я пытаюсь пакетно переименовать старые файлы журнала, но сценарий работает только для меня, когда сценарий хранится в той же папке, что и файлы журнала.Вот код:

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 ]

5 голосов
/ 18 июня 2010

Свойство Name дает вам только имя файла без пути.Вы, вероятно, хотите использовать свойство FullName.Вы также можете упростить это, поскольку Rename-Item принимает входные данные конвейера для исходного имени файла:

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

Также обратите внимание, что gci (get-childitem) позволяет вам фильтровать элементы, которые он выводит, используя параметр -Filter.Этот параметр является позиционным параметром (2), поэтому вам даже не нужно указывать имя параметра.

0 голосов
/ 18 июня 2010

Похоже, что он не находит его, потому что он не в пути DOS.

viperjay

...