Windows命令行 - 确定文件夹内容的大小和保存为数值(Windows Command Line

2019-10-17 18:28发布

我在命令行编程的新手,并有一个剧本,我想创建。 有一两件事,我需要做的就是确定一个文件夹中的内容的大小并保存一个变量的数值进行比较后。

我运行Windows 7的命令行和一些文件可能大于2GB。

谢谢你提供的任何援助。

Answer 1:

令人惊讶的是它是多么的困难与纯净,天然批来解决这个简单的问题。

编辑 -这个答案已经被编辑成包括所有子文件夹的累计文件大小。

该DIR / S命令对文件夹及其子文件夹中的所有文件的总大小,而是取决于你的计算机上的输出变化的区域设置(语言)。 查找命令可以分离含有该文件夹大小的行,并FOR / F用于解析的结果。 有一个“文件(S)”每个文件夹线,再加上含有总计最后的条目。 最后一组命令将取代之前的值。 最后,变量扩展搜索和替换是用来消除千位分隔符。

这将让美国的计算机上的某个文件夹中的总字节数。 应在第一个参数提供的文件夹的路径。 采用 ”。” 当前目录。

@echo off
setlocal
for /f "tokens=3" %%A in ('dir "%~1\"^|find "File(s)"') do set size=%%A
set "size=%size:,=%"
echo Folder "%~f1" contains %size% bytes

上述将不得不改变对不同的地区。 例如,“文件(S)”将改变为不同的语言,以及一些国家使用“” 代替“”为千位分隔符。

但是,如果你想在以后的大小与一些其他的价值,因为IF语句只能作为比较大的数字作为2147483647(〜2千兆字节),只有让你走了一半。 周围的问题是左板用零即“保证”比任何号码,您将运行在更大的宽度恒定数量任何大于2147483647视为2147483647的方式。 然后迫使如果要做通过在比较非数字字符的字符串比较。 我喜欢用引号为15位数字(〜999兆兆字节)的数值宽度。

@echo off
setlocal
for /f "tokens=3" %%A in ('dir "%~1\"^|find "File(s)"') do set size=%%A
set "size=%size:,=%"
echo Folder "%~f1" contains %size% bytes

:: Left pad the width to 15 digits
set "paddedSize=000000000000000%size%"
set "paddedSize=%paddedSize:~-15%"

:: Compare the size to 1 Terabyte
if "%paddedSize%" gtr "001099511627776" echo The folder is larger than 1 Terabyte

注意:DIR命令忽略备用数据计算总文件大小时流。 交换数据流被隐藏,可以对NTFS卷上的文件相关内容。 见http://www.bleepingcomputer.com/tutorials/windows-alternate-data-streams/以获取更多信息。



Answer 2:

搜索字符串“字节”从ROBOCOPY / L SRC DST一行的开头 时,/ L将防止复制实际的文件并将其设置为一个局部变量



Answer 3:

另一种方法是使用compact /s .compact工具没有翻译,因此应以同样的方式每一个Windows机器上工作:

@echo off
pushd "%~1"

for /f %%s in ('compact /s ^| find " total bytes"') do (
    set _size=%%s
)

echo folder size is : %_size:,=% bytes
popd


文章来源: Windows Command Line - Determine Folder Contents Size and save as numerical value