【问题标题】:Folder list and its sizes文件夹列表及其大小
【发布时间】:2016-05-12 06:33:05
【问题描述】:

我有一个包含 100 多个子文件夹的父文件夹。我想要一个包含子文件夹及其大小的文本文件。你能帮我建立批处理程序吗?

【问题讨论】:

  • 什么操作系统?
  • 能否请您出示您目前拥有的代码?
  • 您好,Windows7是操作系统。
  • 为了帮助您构建批处理程序,您需要展示您目前拥有的内容,包括准确描述您遇到的问题。否则,这是一个“为我写代码”的请求,这里是题外话......

标签: batch-file


【解决方案1】:

仅适用于没有大小的文件名可以使用此代码-

dir *.* /b /s >> C:\ListOfFile.txt

将您的“C:\”路径更改为您想要保存文件的任何时间。

【讨论】:

  • 谢谢先生。这给出了子文件夹 1、子文件夹 2、子文件夹 3 等输出。我想构建程序来提供每个子文件夹的大小。
【解决方案2】:

虽然你没有表现出任何尝试自己尝试的努力,但我还是决定帮助你,因为这项任务可能不是那么容易完成......

你见过dir /S(列出指定目录及其所有子目录中的文件的命令)的输出吗?它总结了最后的文件总数,包括总大小:

D:\TEMP>dir /S /-C
 Volume in drive D is DATA
 Volume Serial Number is XXXX-XXXX

 Directory of D:\TEMP

2016/05/12  12:00    <DIR>          .
2016/05/12  12:00    <DIR>          ..
               0 File(s)              0 bytes

     Total Files Listed:
               0 File(s)              0 bytes
               2 Dir(s)      ?????????? bytes free

因此我们可以对给定位置的每个目录执行dir /S 命令,使用for /F 循环捕获其输出,检索最后一行之前的行并提取大小值。

下面的纯 脚本——让我们称之为folder_sizes.bat——执行这些步骤:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem // Get provided arguments:
set "FOLDER=%~1"
set "LOG=%~2"

rem // Check provided arguments:
if not defined LOG set "LOG=con"
setlocal EnableDelayedExpansion
>&2 (
    if not defined FOLDER (
        echo(ERROR: no directory specified!
        exit /B 1
    ) else if not exist "!FOLDER!\" (
        rem /* (trailing "\" to check for directory) */
        echo(ERROR: directory not found!
        exit /B 1
    )
)

rem // Process all sub-directories of given directory:
> "!LOG!" (
    for /D %%D in ("!FOLDER!\*") do (
        for /F "skip=10 tokens=3" %%F in ('
            dir /S /-C "%%~fD"
        ') do (
            set "BYTES=!VALUE!"
            set "VALUE=%%F"
        )
        setlocal DisableDelayedExpansion
        set "ITEM=%%~nxD"
        setlocal EnableDelayedExpansion
        rem // Return name and size of sub-directory:
        echo(!ITEM!   !BYTES!
        endlocal
        endlocal
    )
)
endlocal

endlocal
exit /B

要在某个目录(例如D:\TEMP)上运行此脚本,并将日志数据写入当前目录中的文件folder_sizes.log,请使用以下命令行:

folder_sizes.bat "D:\TEMP" ".\folder_sizes.log"

在脚本中,delayed expansion 被切换,以避免与名称中包含感叹号 (!) 的(子)目录相关的问题。

请注意,dir /S 命令的输出取决于语言,因此该脚本可能无法在英语系统以外的系统上提供预期结果。在这种情况下,for /F 循环的选项字符串"skip=10 tokens=3",尤其是token 选项,需要进行相应的调整。

【讨论】:

    【解决方案3】:

    这段代码可以解决问题:

    @echo off
    Title Get Size of Folder and its subfolders
    set "Folder=C:\temp"
    Set Log=Folder_Size.txt 
    (
        echo The size of "%Folder%" is 
        Call :GetSize "%Folder%"
    )> "%Log%"
    For /f "delims=" %%a in ('Dir "%Folder%" /AD /b /s') do ( 
        (
            echo The size of "%%a" is 
            Call :GetSize "%%a"
        )>> "%Log%"
    )
    start "" "%Log%"
    ::***********************************************************************
    :GetSize
    (
    echo wscript.echo GetSize("%~1"^)
    echo Function GetSize(MyFolder^)
    echo    Set fso = CreateObject("Scripting.FileSystemObject"^)
    echo    Set objFolder= fso.GetFolder(MyFolder^)  
    echo    GetSize = FormatSize(objFolder.Size^)
    echo End Function
    echo '*******************************************************************
    echo 'Function to format a number into typical size scales
    echo Function FormatSize(iSize^)
    echo    aLabel = Array("bytes", "KB", "MB", "GB", "TB"^)
    echo    For i = 0 to 4
    echo        If iSize ^> 1024 Then
    echo            iSize = iSize / 1024
    echo        Else
    echo            Exit For
    echo        End If
    echo    Next
    echo    FormatSize = Round(iSize,2^) ^& " " ^& aLabel(i^)
    echo End Function
    echo '*******************************************************************
    )>%tmp%\Size.vbs
    Cscript /NoLogo %tmp%\Size.vbs
    Del %tmp%\Size.vbs
    Exit /b
    ::***********************************************************************
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多