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

求助:完善批量脚本,遍历文件/文件夹并按磁盘大小重命名

解决方案

问题1:遍历所有文件、文件夹及子目录

借助PowerShell的Get-ChildItem -Recurse命令可以递归遍历目标目录下的所有文件与文件夹,同时直接获取每个项的完整路径和磁盘占用大小,无需单独编写.ps1文件,嵌入CMD命令即可实现。

问题2:FOR /F中执行多命令的正确写法

CMD的FOR /F语法里,DO后要执行多个命令需注意两点:

  • 用&连接命令,或用()包裹命令块
  • 开启延迟变量扩展(setlocal enabledelayedexpansion),避免循环内变量被提前解析,确保每次循环读取变量最新值

修正后的完整脚本

@ECHO OFF
setlocal enabledelayedexpansion
set "targetDir=E:\Desktop\Folder"
set "maxbytesize=1"

:: PowerShell递归遍历所有项,输出「路径|大小」格式内容
FOR /F "delims=| tokens=1,2" %%a IN ('
    PowerShell -ExecutionPolicy Bypass -Command "Get-ChildItem -Path '%targetDir%' -Recurse | ForEach-Object { $size = if ($_.PSIsContainer) { (Get-ChildItem $_.FullName -Recurse -File | Measure-Object -Property Length -Sum).Sum } else { $_.Length }; Write-Output ('{0}|{1}' -f $_.FullName, $size) }"
') DO (
    set "itemPath=%%a"
    set "sizeOnDisk=%%b"
    :: 修正原脚本逻辑:大小大于1字节时重命名
    if !sizeOnDisk! GTR %maxbytesize% (
        :: 区分文件与文件夹的重命名逻辑
        if exist "!itemPath!\" (
            ren "!itemPath!" "%%~na-DELETED%%~xa"
        ) else (
            ren "!itemPath!" "%%~na-DELETED%%~xa"
        )
    )
)

endlocal
EXIT

关键说明

  • 延迟变量扩展:用!变量名!替代%变量名%,确保循环内变量值实时更新
  • PowerShell逻辑:文件直接取$_.Length作为大小;文件夹则递归计算其下所有文件总大小(若需文件夹自身占用大小,可替换为(Get-ItemProperty $_.FullName).Length)
  • 重命名规则:通过%%~na获取名称、%%~xa获取扩展名,重命名后格式为原名称-DELETED(文件保留扩展名)

内容的提问来源于stack exchange,提问作者ShaunTheBaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:30:20