簡體   English   中英

Windows命令行 - 確定文件夾內容大小並另存為數值

[英]Windows Command Line - Determine Folder Contents Size and save as numerical value

我是命令行編程的新手,並且有一個我想創建的腳本。 我需要做的一件事是確定文件夾內容的大小,並使用變量保存數值以便稍后進行比較。

我正在運行Windows 7命令行,一些文件可能大於2GB。

感謝您提供的任何幫助。

令人驚訝的是,使用純本地批​​處理解決這個簡單問題是多么困難。

編輯 - 此答案已編輯為包括所有子文件夾的累積文件大小。

DIR / S命令提供文件夾及其子文件夾中所有文件的總大小,但輸出會根據您的計算機區域設置(語言)而更改。 FIND命令可以隔離包含文件夾大小的行,FOR / F用於解析結果。 每個文件夾有一個“文件”行,加上包含總計的最后一個條目。 最后一個SET命令將取代先前的值。 最后,變量擴展搜索和替換用於消除數千個分隔符。

這將獲得美國計算機上給定文件夾中的總字節數。 應在第一個參數中提供文件夾的路徑。 采用 ”。” 對於當前目錄。

@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

以上內容必須針對不同的語言環境進行更改。 例如,“文件”將針對不同語言進行更改,而某些國家/地區使用“。” 而不是“,”作為千位分隔符。

但是如果你想稍后將大小與其他值進行比較,那只能讓你到達一半,因為IF語句只能比較2147483647(~2千兆字節)的數字。 大於2147483647的任何數字都被視為2147483647.解決該問題的方法是將數字用零填充到一個恆定寬度,該寬度“保證”大於您將運行的任何數字。 然后強制IF通過在比較中包含非數字字符來進行字符串比較。 我喜歡使用數字寬度為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/

從robocopy / L src dst搜索一行開頭的字符串文字“Bytes” ,/ L將阻止實際文件被復制並將其設置為本地變量

另一種方法是使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM