You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:01:19