带有 -Include 参数的移动项引发错误"item does not exist"



我有以下文件:

> dir ~
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a----        26-Oct-18   5:30 PM        2   xxx1
-a----        26-Oct-18   5:30 PM        2   xxx2
-a----        26-Oct-18   5:30 PM        2   xxx3
-a----        26-Oct-18   5:31 PM        2   yyy1
-a----        26-Oct-18   5:31 PM        2   yyy2
-a----        26-Oct-18   5:31 PM        2   yyy3
-a----        26-Oct-18   5:33 PM        2   zzz

我想将xxx*yyy*

Move-Item -Path ~* -Include "xxx*", "yyy*" -Destination D:temp

然后得到一个错误:

Move-Item : Cannot move item because the item at '~zzz' does not exist.

但文件在那里,测试路径~\zzz返回true

这是Move-Itemcmdlet中的错误还是预期的行为?如果这是意料之中的事,我为什么要得到它?

好的。。。事实上,这是Windows PowerShell引擎中的一个错误。GitHub上存在问题。PowerShell 6.0中通过调用SessionState.Path.GetResolvedPSPathFromPSPath的正确重载并传递cmdlet上下文对象修复了此问题。

您不需要-Include。只需像这样传递通配符参数

$tmp = "D:temp"
Move-Item "yyy*", "xxx*" -Destination "$tmp"

上面的示例假设您的PowerShell位于放置"xxx"one_answers"yyy"文件的目录中,否则您需要在通配符前面写入路径

是的,这有点令人困惑,但如果你阅读了整个帮助文本,你正在尝试做什么,Move Item的前面是管道中的Get ChildItem,是的,它确实显示了-include,但它在管道的Get-ChildItem一侧(左侧(。

因此,作为一种最佳实践,Razorfen所说的只是问你需要/想要什么。在做这种破坏性的事情之前,一定要做一次非破坏性/有影响力的健全性检查(即帮助文件文本中显示的Get-ChildItem(,以确保你得到了你想要的东西。

事实上,您是以这种方式传入列表的,即使您只使用扩展名进行传递,也会发生同样的错误。

Move-Item -Path 'D:FileSource*' -Include '*.txt' -Destination 'D:FileDestination' -Verbose -WhatIf
# Results
What if: Performing the operation "Move File" on target "Item: D:FileSourceDataSet.txt Destination: D:FileDestinationDataSet.txt".
What if: Performing the operation "Move File" on target "Item: D:FileSourceinput.txt Destination: D:FileDestinationinput.txt".
Move-Item : Cannot move item because the item at 'D:FileSourceprocessesoutput.csv' does not exist.
At line:1 char:1
+ Move-Item -Path 'D:FileSource*' -Include '*.txt' -Destination 'D:F ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [Move-Item], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand

因此,完全符合工作要求。

Get-ChildItem -Path 'D:FileSource*' | Move-Item -Include '*.txt' -Destination 'D:FileDestination' -Verbose -WhatIf
What if: Performing the operation "Move File" on target "Item: D:FileSourceDataSet.txt Destination: D:FileDestinationDataSet.txt".
What if: Performing the operation "Move File" on target "Item: D:FileSourceinput.txt Destination: D:FileDestinationinput.txt".
What if: Performing the operation "Move File" on target "Item: D:FileSourceprocessesoutput.csv Destination: D:FileDestinationprocessesoutput.csv".

相关内容

  • 没有找到相关文章

最新更新