在DOS批处理文件中计算目录大小

时间:2013-07-25 23:45:01

标签: windows batch-file dos

我编写了一个Batch文件,用于从提供的目录列表中获取磁盘空间。将字节转换为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 :: 

请更正上述代码。

2 个答案:

答案 0 :(得分:0)

@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
    )
)

答案 1 :(得分:0)

您收到的文字723,234,123由于,

而未转换为数字

在aritmetic之前删除:

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