【问题标题】:Pipelined copy-item doesnt work after a file is renamed重命名文件后流水线复制项不起作用
【发布时间】:2017-08-07 03:10:37
【问题描述】:

我对 PowerShell 还是很陌生。

我创建了一个 PowerShell 脚本,它根据特定标准从一个文件夹中大量非常相似的文件中识别出一个特定的 Mp3 文件:

  1. 是最近创建的文件吗
  2. 这是一个 MP3 文件
  3. 文件名中有一定的字符集。

然后将文件重命名为今天的日期,并在文件名中添加一些其他文本:

$AudioDir = "\\Server\Audio\"

$MediaDir = "\\Server2\Media\"

$LatestMP3 = Get-ChildItem -Path $AudioDir "*NEW.MP3" | Sort-Object CreationTime | Select-Object -Last 1

Get-ChildItem -path $AudioDir $LatestMP3 |Rename-Item -newname {(GET-DATE).ToString("yyyy-MM-dd") + " NewAUDIO.mp3"} 

这部分工作完美,但下一步不行。我想将该重命名的文件复制到另一台服务器上的另一个文件夹 ($MediaDir = "\\Server2\Media\")

我在试管:

Get-ChildItem -path $AudioDir $LatestMP3 |Rename-Item -newname {(GET-DATE).ToString("yyyy-MM-dd") + " NewAUDIO.mp3"} | Copy-Item -destination $MediaDir

没有错误,文件按预期重命名,但 Copy-Item -destination $MediaDir 什么也不做。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 澄清一下:Copy-Item 步骤在 Powershell ISE 中有效,但在 CMD 或任务计划程序中无效?对于初学者,请尝试将 -Verbose-ErrorAction Stop 添加到 Copy-Item - 这应该会给您更详细的输出。
  • 嗨,对不起,我现在编辑的标题具有误导性。问题是文件重命名后 copy-item -destination $MediaDir 不起作用

标签: powershell pipeline copy-item


【解决方案1】:

默认情况下,Rename-Item CmdLet 不返回任何内容。你必须强迫它进入管道。在管道中使用PassThru 参数,它应该可以正常复制。

Get-ChildItem -path $AudioDir $LatestMP3 |Rename-Item -newname {(GET-DATE).ToString("yyyy-MM-dd") + " NewAUDIO.mp3"} -PassThru | Copy-Item -destination $MediaDir

【讨论】:

  • 非常感谢 SomeShinyObject!这很完美,我也明白为什么。通过每天学习,我在这方面做得更好!
  • 很高兴为您提供帮助。如果我帮助回答了您的问题,请务必点击检查,以显示问题已回答。
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 2018-02-06
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多