Move-Item不移动所有文件

问题描述 投票:3回答:1

我有一个闪存驱动器有大约500个mp3文件(赠送或采取)。我试图将文件分成99个随机文件组,并将每个组移动到6个子目录(这是因为我的汽车的播放器限制)

我想要高效并使用我的PowerShell快速执行此操作:

Get-ChildItem -File | Get-Random -Count 99 | % {Move-Item $_.fullname Dir_1}

奇怪的是,我一直发现结果最终会移动75或97个文件而不是精确的99。

最初我假设Get-Random不止一次返回几个文件所以我检查:

(Get-ChildItem -File | Get-Random -Count 99 | Sort-Object -Unique fullname).Count

但我一直得到的输出是99。

我将闪存驱动器切换到第二个 - 相同的结果。手动移动文件按预期工作。使用不同的数字时会显示类似的结果(随机选择11个文件 - 8个移动)。

有什么想法吗?

powershell
1个回答
0
投票

当您使用带有位置参数的Move-Item $_.FullName时,您正在使用-Path参数。此参数使用shell globbing形式,因此路径名中的某些字符的解释方式不同,例如[],您在注释中指出的文件名中会出现这些字符。

您可以通过使用-LiteralPath参数来避免这种情况。

Get-ChildItem -File | Get-Random -Count 99 | % {Move-Item -LiteralPath $_.fullname -Destination Dir_1}

(无论如何,明确参数都是个好主意。)

但比这更好的是利用管道。 -LiteralPath参数可以通过传入管道对象的属性名称绑定,并且它具有别名-PSPath,它恰好也是Get-ChildItem的fileinfo对象上的属性。这无论如何都简化了您的命令:

Get-ChildItem -File | Get-Random -Count 99 | Move-Item -Destination Dir_1
© www.soinside.com 2019 - 2024. All rights reserved.