Move-Item -排除引发冗余错误

Move-Item -排除引发冗余错误

我正在从目录中移动一组文件,并使用-exclude修饰符排除带有 .gpg 扩展名的文件:

Move-Item -path $encrypted_folder\*.* -EXCLUDE *.gpg -destination $final_dir

虽然通过移动每个非 .gpg 文件可以正常工作,但每次Move-Item遇到 .gpg 文件时都会出现以下错误:

Move-Item : Cannot move item because the item at 'C:\Users\ThisUser\Documents\PGP Encryption test\UUID\xxxx.gpg' does not exist.
At C:\Users\ThisUser\Documents\PGP Encryption test\yyyy.ps1:41 char:1
+ Move-Item -path $encrypted_folder\*.* -EXCLUDE *.gpg -destination $final_dir
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Move-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand

当我将命令设置为排除 .gpg 项目(这些项目肯定存在)时,为什么它会抱怨无法移动 .gpg 项目,因为它不存在?排除正在发生,并且对-include.gpg 文件的后续命令运行正常,但我对命令中的错误不满意-exclude

答案1

我将把该表达式重写如下:

gci $encrypted_folder\*.* -exclude *.gpg | move-item -destination $final_dir  

您还可以使用where-object和构建更复杂的过滤器-match/notmatch例如,仅排除扩展前具有 4 个或更多字符的那些

gci |? name -notmatch '^.{4,}\.gpg$' | [rest of processing here]

解释

正如评论中指出的,此处报告了此错误:https://github.com/PowerShell/PowerShell/issues/2385。我也可以在 PS 4 中复制它:

$psversiontable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.42000
BuildVersion                   6.3.9600.18728
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

New-Item -Name "foo.txt" -ItemType File
New-Item -Name "bar.txt" -ItemType File
Move-Item -Path ".\*" -Destination "move.txt" -Exclude "bar*"

Move-Item : Cannot move item because the item at 'C:\temp\test\bar.txt' does not exist.
At line:1 char:1
+ Move-Item -Path ".\*" -Destination "move.txt" -Exclude "bar*"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Move-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand

尚未发布的版本 6 已修复此问题(https://github.com/PowerShell/PowerShell/tree/v6.0.0-beta.5)。

相关内容