gpt4 book ai didi

powershell - 移动项目不移动所有文件

转载 作者:行者123 更新时间:2023-12-04 01:38:14 24 4
gpt4 key购买 nike

我有一个闪存驱动器,里面有大约 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 个已移动)。

有什么想法吗?

最佳答案

当您使用 Move-Item $_.FullName使用位置参数,您正在使用 -Path范围。此参数使用一种 shell 通配符,因此路径名中的某些字符的解释不同,例如 [] ,正如您在评论中指出的那样,它存在于您的文件名中。

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

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

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

但比这更好的是利用管道。 -LiteralPath参数可以由传入管道对象的属性名称绑定(bind),它的别名为 -PSPath ,它恰好也是来自 Get-ChildItem 的 fileinfo 对象的一个​​属性.无论如何,这简化了您的命令:
Get-ChildItem -File | Get-Random -Count 99 | Move-Item -Destination Dir_1

关于powershell - 移动项目不移动所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47971857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com