【问题标题】:Calculation of directory size in DOS batch file [duplicate]DOS批处理文件中目录大小的计算[重复]
【发布时间】:2013-07-25 23:45:01
【问题描述】:

我编写了一个批处理文件来从提供的目录列表中获取磁盘空间。将字节转换为 KB 或 MB 时,不会打印任何数据。

@echo OFF
REM SQL CALL TO GET THE DIRECTORY LISTING
FOR /F "tokens=*" %%i in (directoryList.txt) DO (
    for /F "tokens=3" %%S in ('dir %%i ^| findstr /c:"File(s)"') do (
        SETLOCAL
        SET /A "sizeKB=%%S/1024"
        SET /A "sizeMB=%sizeKB% / 1024"
        ECHO "Directory :: %%i with size :: %%S "
        ECHO "IN MEGABYTE :: %sizeMB%"
        ENDLOCAL
        PAUSE
    )
)

上述脚本的输出是...

Directory :: D:\xxx with size :: 723,234,123
IN MEGABYTE :: 

请更正上面的代码。

【问题讨论】:

  • 如果您的文件夹大小超过 2GB,所有计算都将失败。

标签: windows batch-file dos


【解决方案1】:
@echo OFF
REM SQL CALL TO GET THE DIRECTORY LISTING
FOR /F "tokens=*" %%i in (directoryList.txt) DO (
    for /F "tokens=3" %%S in ('dir /-c "%%i" ^| findstr /c:"File(s)"') do (
        SETLOCAL ENABLEDELAYEDEXPANSION
        SET /A "sizeKB=%%S/1024"
        SET /A "sizeMB=!sizeKB! / 1024"
        ECHO "Directory :: %%i with size :: %%S "
        ECHO "IN KBYTE :: !sizeKB!"
        ECHO "IN MEGABYTE :: !sizeMB!"
        ENDLOCAL
        PAUSE
    )
)

【讨论】:

  • 请记住,"File(s)" 取决于本地设置。法语fichier(s),波兰语plik(ów)等等。
【解决方案2】:

您收到的文本 723,234,123,由于 , 而未转换为数字

然后在算法之前删除:

SET "sizeB=%%c"
SET "sizeB=!sizeB:,=!"
SET /A "sizeKB=!sizeB!/1024"
...

【讨论】:

  • 在 RGuggisberg 的代码中,他没有得到 , 逗号。
  • 正如您明智地指出的那样,"File(s)" 取决于本地设置。数字格式也(在我的系统中,使用点)。您可以在问题文本中收到的输出中看到逗号。
  • 我的意思是答案,而不是问题。请在命令行查看dir /?
  • 啊啊啊啊!!!好的,对!不知道/-c 开关。 @RGuggisberg 都没有在回答时指出这一点。
猜你喜欢
  • 1970-01-01
  • 2020-01-04
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 2013-10-18
相关资源
最近更新 更多