在此脚本中,大多数情况下都能正常运行。但是,重命名操作仅在这些管道命令之外起作用
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
答案 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