PowerShell脚本求助:批量分迁指定数量随机文件至子文件夹
解决PowerShell脚本仅生成空文件夹、未完成文件迁移的问题
原脚本的核心问题
- 未实现随机选取文件的需求,仅按默认顺序遍历所有JPG文件
- 每次循环重复执行
New-Item创建文件夹,属于冗余操作且逻辑混乱 - 没有限制迁移文件总数,会移走源目录下所有JPG,不符合“随机选取n个文件”的要求
- 直接用字符串拼接路径,容易出现格式错误
修正后的脚本(满足随机选文件、分迁到随机命名子文件夹的需求)
# 配置参数 $filesPerFolder = 5000 # 每个子文件夹存放的文件数量 $totalFilesToMove = 15000 # 总共要迁移的文件总数(需为filesPerFolder的整数倍) $sourcePath = "D:\source" $destPath = "E:\Dest" # 从源目录随机选取指定数量的JPG文件 $randomFiles = Get-ChildItem -Path "$sourcePath\*.jpg" -File | Get-Random -Count $totalFilesToMove # 将随机选中的文件按指定数量分组 $fileGroups = $randomFiles | Group-Object -Property { [math]::Floor($_.Index / $filesPerFolder) } foreach ($group in $fileGroups) { # 生成唯一随机子文件夹名称(用GUID保证不重复) $subFolderName = [guid]::NewGuid().ToString() $subFolderPath = Join-Path -Path $destPath -ChildPath $subFolderName # 创建子文件夹(仅当不存在时执行) New-Item -Path $subFolderPath -ItemType Directory -Force | Out-Null # 移动当前组的文件到目标子文件夹 Move-Item -Path $group.Group.FullName -Destination $subFolderPath }
关键改进说明
- 用
Get-Random -Count实现随机抽取指定数量的文件 - 通过
Group-Object自动将文件按设定数量分组,无需手动计数 - 采用GUID生成随机子文件夹名,确保名称唯一无冲突
- 用
Join-Path拼接路径,避免字符串拼接导致的路径格式错误 - 仅在处理每组文件时创建一次子文件夹,消除冗余操作
内容的提问来源于stack exchange,提问作者Venki
相关产品推荐
相关产品推荐

