Powershell:为什么Rename-Item不能用作管道命令?

时间:2018-11-15 14:15:03

标签: powershell powershell-v2.0 pipeline

在此脚本中,大多数情况下都能正常运行。但是,重命名操作仅在这些管道命令之外起作用

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

如果我尝试将重命名作为管道命令的一部分进行操作,则根本无法正常工作。除此以外的任何地方,它将对filewatcher的单个iteratrion起作用,然后不再起作用。为什么重命名不能用作管道命令?

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

1 个答案:

答案 0 :(得分:4)

Move-Item默认不输出到管道。使用 -PassThru 开关:

  

-PassThru
    返回一个表示您正在使用的项目的对象。默认情况下,此cmdlet不会生成任何输出。

它将直接通过管道传送到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