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

PowerShell脚本修改需求:按文件大小筛选复制并保留目录结构

PowerShell脚本修改需求:按文件大小筛选复制并保留目录结构

嗨,我来帮你调整这个PowerShell脚本,完美解决你的需求!

首先梳理下你的核心诉求:

  • 取消对.exe、.zip的一刀切排除,只要文件小于100MB就允许复制
  • 完全保留源目录的层级结构(哪怕子目录嵌套10层也没问题)
  • 脚本要适配多用户使用,减少硬编码的麻烦

修改后的完整脚本

# 自动获取当前用户名(替代硬编码,多用户使用更友好)
$username = $env:USERNAME
$date = (Get-Date).ToString("yyyy-MM-dd")

# 目标根目录:自动对应用户+日期路径
$DestRoot = "Z:\data\$username\$date"
# 稳妥创建目录,已存在也不会报错
New-Item -ItemType Directory -Path $DestRoot -Force | Out-Null

# 源路径:自动对应用户的目标文件夹
$SourcePath = "C:\users\$username\Documents\Foldername"

# 遍历源路径下所有文件,筛选小于100MB的,再按原结构复制
Get-ChildItem -Path $SourcePath -File -Recurse | Where-Object {
    # 100MB = 100 * 1024 * 1024 = 104857600 字节
    $_.Length -lt 104857600
} | ForEach-Object {
    # 计算文件相对于源路径的相对路径,用来保留目录层级
    $relativePath = $_.FullName.Substring($SourcePath.Length)
    # 拼接目标文件的完整路径
    $destFilePath = Join-Path -Path $DestRoot -ChildPath $relativePath
    
    # 先创建目标文件所在的子目录(防止因目录不存在复制失败)
    New-Item -ItemType Directory -Path (Split-Path -Path $destFilePath -Parent) -Force | Out-Null
    
    # 执行复制,-Force可覆盖已存在的文件(不需要可移除)
    Copy-Item -Path $_.FullName -Destination $destFilePath -Force
}

关键修改点说明

  1. 自动适配多用户:用$env:USERNAME替代硬编码的用户名,不同用户运行脚本时会自动匹配自己的路径,无需手动修改。
  2. 健壮的目录创建:用New-Item -Force代替mkdir,避免因目标目录已存在导致脚本报错中断。
  3. 按大小灵活筛选:用Where-Object替代原来的-Exclude规则,只限制文件大小,不管扩展名——这样小体积的.exe、.zip就能正常复制了。
  4. 完整保留目录结构:通过计算文件的相对路径,把每个文件复制到目标目录对应的子路径下,完美复刻源文件夹的层级关系。

可选调整

  • 如果还是习惯硬编码用户名,把$username = $env:USERNAME改成具体用户名即可,比如$username = "wally"。
  • 要调整文件大小限制,修改104857600这个数值就行(比如50MB对应52428800)。

备注:内容来源于stack exchange,提问作者Wally

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:12:45