Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Средний размер файла в папке (без учета подпапок) (http://forum.oszone.net/showthread.php?t=291276)

Trueman777 19-11-2014 21:51 2432214

Средний размер файла в папке (без учета подпапок)
 
Подскажите скрипт, если такой есть, как узнать средний размер файла в папке (файлов много)? Среднее арифметическое, но можно до кучи и среднее геометрическое :)
Только корневой каталог, без файлов в подпапках.

Также интересует выяснение среднего размера группы конкретных выбранных (/выделенных) файлов, не через общий размер, выданный Проводником, деленный на количество. И не через сторонние файл-менеджеры.

Спасибо.

Kazun 19-11-2014 22:25 2432238

PowerShell:
Код:

Get-ChildItem -File -Force | Measure-Object Length -Average

Georgio 20-11-2014 05:05 2432351

Код пакетного файла:


Код:

@echo off

set "dir=I:\Downloads"

pushd "%dir%"

::================================================================================================================

rem Код работает очень быстро.
rem Средний размер файла определяется с помощью JS (для решения проблемы "2147483648").
rem Результат выводится в виде: "количество_файлов<пробел>общий_рамер_файлов_в_байтах<пробел>средний_размер_файла_в_байтах".
rem ""delims=FilesBytes: ""-- для удобства запоминания по аналогии с "findstr "Files Bytes"".

for /f "delims=FilesBytes: " %%i in ('"chcp 1252>nul& robocopy . %random% /bytes /l /nfl /ndl /njh| findstr "Files Bytes""') do set /a n+=1& call set x%%n%%=%%i
mshta "javascript:new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write('%x1% %x2% '+%x2%/%x1%);close();"| more

::================================================================================================================

popd

pause>nul
exit /b


.

Iska 20-11-2014 14:28 2432553

Цитата:

Цитата Trueman777
Подскажите скрипт, если такой есть, как узнать средний размер файла в папке (файлов много)? Среднее арифметическое, »

WSH
Код:

Option Explicit

Dim strSourceFolder

Dim objFolder
Dim objFile

Dim lngTotalSize


If WScript.Arguments.Count = 1 Then
        strSourceFolder = WScript.Arguments.Item(0)
       
        With WScript.CreateObject("Scripting.FileSystemObject")
                If .FolderExists(strSourceFolder) Then
                        With .GetFolder(strSourceFolder)
                                If .Files.Count <> 0 Then
                                        lngTotalSize = 0
                                       
                                        For Each objFile In .Files
                                                lngTotalSize = lngTotalSize + objFile.Size
                                        Next
                                       
                                        WScript.Echo FormatNumber(lngTotalSize / .Files.Count)
                                Else
                                        WScript.Echo "Nothing found."
                                End If
                        End With
                Else
                        WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
                        WScript.Quit 2
                End If
        End With
Else
        WScript.Echo "Usage: " & WScript.ScriptName & " <Source folder>"
        WScript.Quit 1
End If

WScript.Quit 0


Пакетный файл
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=%~1

if defined sSourceFolder (
        if exist "%sSourceFolder%\." (
                pushd "%sSourceFolder%"
               
                >nul 2>&1 dir /b /a:-d "*.*" && (
                        set /a iTotalSize = 0
                        set /a iTotalCount = 0
                       
                        for /f "usebackq delims=" %%i in (
                                `2^>nul dir /b /a:-d "*.*"`
                        ) do (
                                set /a iTotalSize += %%~zi
                                set /a iTotalCount += 1
                        )
                       
                        set /a iAverage = iTotalSize / iTotalCount
                        echo !iAverage!
                ) || echo Nothing found.
               
                popd
        ) else (
                echo Can't find source folder [%sSourceFolder%].
                exit /b 2
        )
) else (
        echo Usage: %~nx0 ^<Source folder^>
        exit /b 1
)

endlocal
exit /b 0


Достаточно просто перетащить папку на скрипт или пакетный файл (или на их ярлык) из Проводника.

Цитата:

Цитата Trueman777
но можно до кучи и среднее геометрическое »

Нельзя.

Цитата:

Цитата Trueman777
Также интересует выяснение среднего размера группы конкретных выбранных (/выделенных) файлов, не через общий размер, выданный Проводником, деленный на количество. »

WSH
Код:

Option Explicit

Dim strArgument

Dim lngTotalSize
Dim lngTotalCount


If WScript.Arguments.Count <> 0 Then
        With WScript.CreateObject("Scripting.FileSystemObject")
                lngTotalSize = 0
                lngTotalCount = 0
               
                For Each strArgument In WScript.Arguments
                        If .FileExists(strArgument) Then
                                lngTotalSize = lngTotalSize + .GetFile(strArgument).Size
                                lngTotalCount = lngTotalCount + 1
                        Else
                                WScript.Echo "Can't find file [" & strArgument & "]."
                        End If
                Next
               
                If lngTotalCount <> 0 Then
                        WScript.Echo FormatNumber(lngTotalSize / lngTotalCount)
                Else
                        WScript.Echo "Nothing found."
                End If
        End With
Else
        WScript.Echo "Usage: " & WScript.ScriptName & " <File1> [<File2> [<File3> …]]"
        WScript.Quit 1
End If

WScript.Quit 0


Trueman777 21-11-2014 07:20 2433004

Спасибо.
/решено.


Время: 13:26.

Время: 13:26.
© OSzone.net 2001-