我正在尝试让PowerShell在执行命令之前评估变量,例如:
$OutputPath = "C:\Temp"
Get-ChildItem -include *.mp3 | Move-Item -Destination $OutputPath
但是,Move-Item cmdlet尝试按字面解释,因此不会移动。每当我直接输入路径时,脚本都能正常工作,但我需要能够用变量控制路径。我该怎么做?
答案 0 :(得分:3)
这个答案可能会发展,但正如你的问题所在,我看到一个很大的问题,遗憾的是记录不清。 -Include
和-Exclude
仅在与-Recurse
合作时才会执行其预期的功能。没有它就可以使用0结果。在你的情况下,这意味着没有任何东西通过管道,Move-Item
没有被执行。
目前,您只是过滤*.mp3
这是基本的,只能与-filter
参数一起使用。虽然您不需要我也建议您指定-Path
,以便移动您想要的文件。
Get-ChildItem -Filter *.mp3 | Other-Stuff ...
您在评论中提到了以下错误:
Move-Item : Cannot create a file when that file already exists.
该错误非常具体。无论是从以前的测试还是对新名称的疏忽,文件确实已经存在。你可以做的两件事来帮助解决这个问题是使用-WhatIf
开关,它应该引用详细信息流上的文件路径,这样你才能知道文件的最终位置。
其次,如果您了解数据风险,则使用-Force
,以便新文件覆盖该文件。使用Copy-Item
并不是什么大问题,因为原始文件仍然存在。 Move-Item
的错误可能是永久性的。