Powershell: Почему Rename-Item не работает как конвейерная команда? - PullRequest
0 голосов
/ 15 ноября 2018

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

 Get-ChildItem -Path $folderpath -Filter $folderfile | Move-Item - 
Destination $destination | sleep 5  | Out-File -FilePath $logpath -Append

Если я попытаюсь сделать переименование как часть переданных команд, он просто не будет работать.Где-нибудь за пределами этого, и это будет работать для одной итерации файлового наблюдателя, а затем не более.Почему переименование не будет работать как переданная команда?

Get-ChildItem -Path $folderpath -Filter $folderfile | Move-Item -Destination $destination | Rename-Item $destination$folderfile -NewName $newname  | Out-File -FilePath $logpath -Append

1 Ответ

0 голосов
/ 15 ноября 2018

Move-Item не выводится в конвейер по умолчанию.Используйте переключатель -PassThru :

-PassThru
Возвращает объект, представляющий элемент, с которым вы работаете.По умолчанию этот командлет не создает никаких выходных данных.

Это перенаправит его непосредственно в Rename-Item, и вам нужно указать только -NewName:

Get-ChildItem -Path $folderpath -Filter $folderfile | 
Move-Item -Destination $destination -PassThru |
Rename-Item -NewName $newname -PassThru |
Out-File -FilePath $logpath -Append

Также,вам даже не нужно использовать Rename-Item, а просто переместить его непосредственно в конечный целевой каталог + имя (при условии, что $destination - это путь к каталогу):

Get-ChildItem -Path $folderpath -Filter $folderfile | 
Move-Item -Destination (Join-Path $destination $newname) -PassThru |
Out-File -FilePath $logpath -Append
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...