Любой язык - [решено] Средний размер файла в папке (без учета подпапок)

Ответить
Аватара пользователя
Trueman777

Любой язык - [решено] Средний размер файла в папке (без учета подпапок)

Сообщение Trueman777 »

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

Только корневой каталог, без файлов в подпапках.



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



Спасибо.
Аватара пользователя
Georgio

Re: Любой язык - [решено] Средний размер файла в папке (без учета подпапок)

Сообщение Georgio »

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







Код:

Код: Выделить всё

@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

Re: Любой язык - [решено] Средний размер файла в папке (без учета подпапок)

Сообщение Iska »

Цитата Trueman777:



Подскажите скрипт, если такой есть, как узнать средний размер файла в папке (файлов много)? Среднее арифметическое,
Любой язык - [решено] Средний размер файла в папке (без учета подпапок)







WSH

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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 & " "
	WScript.Quit 1
End If
WScript.Quit 0









Пакетный файл

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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 ^
	exit /b 1
)
endlocal
exit /b 0







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




Цитата Trueman777:



но можно до кучи и среднее геометрическое
Любой язык - [решено] Средний размер файла в папке (без учета подпапок)




Нельзя.




Цитата Trueman777:



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







WSH

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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 & "  [ [ …]]"
	WScript.Quit 1
End If
WScript.Quit 0
Ответить

Вернуться в «Скриптовые языки администрирования Windows»