我有以下文件:
> 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* 然后得到一个错误: 但文件在那里,测试路径~\zzz返回true。 这是Move-Itemcmdlet中的错误还是预期的行为?如果这是意料之中的事,我为什么要得到它?Move-Item -Path ~* -Include "xxx*", "yyy*" -Destination D:temp
Move-Item : Cannot move item because the item at '~zzz' does not exist.
好的。。。事实上,这是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".