Невозможно связать аргумент с параметром NewName, так как это пустая строка

Get-ChildItem -Name *.txt | Rename-Item -NewName { $_.name -replace '\.txt','.log' }

У меня есть 3 текстовых файла в моем текущем пути, я использую этот фрагмент кода, найденный в последнем примере...

get-help rename-item -full

(Powershell версии 2.0). По какой-то причине я продолжаю получать следующую ошибку:

Rename-Item : Cannot bind argument to parameter 'NewName' because it is an empty string.
At line:1 char:40
+ Get-ChildItem -Name *.txt | Rename-Item <<<<  -NewName { $_.name -replace 
'\.txt','.log' }
+ CategoryInfo          : InvalidData: (testfile3.txt:PSObject) [Rename-Item], 
ParameterBindingValidationException
+ FullyQualifiedErrorId : 
ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.Rena
meItemCommand

Ясно, что моя форма изменения .txt в .log не является пустой строкой, и это точно соответствует тому же коду, что и в последнем примере командлета rename-item от Microsoft.


person JoeDaHobo    schedule 15.09.2014    source источник


Ответы (1)


Либо не используйте параметр -Name, так как он выводит только строки, содержащие полный путь, либо не ссылайтесь на свойство Name:

Get-ChildItem -Name *.txt | Rename-Item -NewName { $_ -replace '\.txt','.log' }
person Keith Hill    schedule 15.09.2014
comment
Спасибо, еще вопрос, как мне понять, что свойство Name выводит файл только в виде строки? - person JoeDaHobo; 15.09.2014
comment
Вы можете посмотреть справку man Get-ChildItem -Parameter Name или передать вывод через Get-Member, например. Get-ChildItem -Name *.txt | Get-Member. - person Keith Hill; 15.09.2014