Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI/HTA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
33 / 6 / 0
Регистрация: 18.05.2014
Сообщений: 121
1

Отображение размера файла в kB, MB или GB в зависимости от величины его размера в байтах

14.10.2015, 20:59. Просмотров 3746. Ответов 8
Метки нет (Все метки)

добрый вечер!

У меня есть значение размера файлов в байтах. Подскажите, как отобразить размера файлов в KB MB GB?
Интересует два момента:
1. Значение после запятой 2 знака. значение перед запятой не более 3-х знаков.
2. Исходя от значение размера файлов, автоматически отображать информацию в KB MB GB

И можно ли сделать так, чтобы значение размера фалов был больше 2147483647

Смотрел темы
Тонкости языка, редкие команды и сложные скрипты
Тонкости языка, редкие команды и сложные скрипты
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2015, 20:59
Ответы с готовыми решениями:

Получение фактического размера и размера файла в байтах
Здравствуйте, уважаемые форумчане! Мне необходимо получить фактический размер, занимаемый файлом на...

Изменение размера блока в зависимости от его размера
Ребят в JS я вообще новичок, и при создании блога вышел нюанс, что без js не обойтись. Есть блок,...

Использовать системный вызов stat(2) для вывода на экран размера файла в байтах
помогите L1_stat.c, яка використовує системний виклик stat(2) для виводу на экран розміру файла в...

Отображение содержимого в зависимости от размера экрана
На странице есть два дива, необходимо в зависимости от размеров экрана отображать первый, когда...

8
Эксперт Python
4167 / 3061 / 1006
Регистрация: 28.10.2013
Сообщений: 7,946
15.10.2015, 01:15 2
Условие "чтобы значение размера фалов был больше 2147483647" в расчет не принималось.
Скрипт работает только для файлов до 2 gb.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
setlocal enabledelayedexpansion
set "p=j:\кино" 
 
:: 1 Gb=1073741824 kb   1 Mb=1048576 kb
set Kb=1024
set /a Mb=Kb*Kb
set /a Gb=Kb*Kb*Kb
set /a fsize=0 
 
for %%i in ("%p%\*.*") do (
  call :fsize %%~zi
  echo %%i=!fsize!
)
pause
exit /b
 
:fsize передаем один аргумент -  размер файла в байтах
endlocal
if %1 geq 2147483648 set "fsize=>2 Gb" & goto :eof
if %1 geq %Gb% set /a remin=%1%%Gb/Mb/100   & set /a fsize=%1/Gb & set "fsize=!fsize!.!remin! Gb" & goto :eof
if %1 geq %Mb% set /a remin=%1%%Mb*10/Mb    & set /a fsize=%1/Mb & set "fsize=!fsize!.!remin! Mb" & goto :eof
if %1 geq %Kb% set /a remin=%1%%Kb*10/Kb    & set /a fsize=%1/Kb & set "fsize=!fsize!.!remin! Kb" & goto :eof
if %1 lss %Kb% set "fsize=%1 byte"          & goto :eof
Математика для файлов больше 1 Gb незначительно хромает, но там значения выходят за грань возможного для cmd, поэтому пришлось упростить. И так как остаток выводится в виде одного знака после запятой, то незаметно.
1
3111 / 1305 / 228
Регистрация: 10.12.2013
Сообщений: 4,480
15.10.2015, 02:44 3
Цитата Сообщение от Garry Galler Посмотреть сообщение
Математика для файлов больше 1 Gb незначительно хромает, но там значения выходят за грань возможного для cmd
Я, кстати, давно хочу предложить скинуться всем виндо-мученикам рублей по 200 и отправить
майкрософтовским индусам, может исправят ? а?
0
33 / 6 / 0
Регистрация: 18.05.2014
Сообщений: 121
15.10.2015, 07:15  [ТС] 4
Garry Galler, Большое спасибо!
Подскажите, а если использовать js или vbs, там также будет ограничение 2147483647?
0
Эксперт Python
4167 / 3061 / 1006
Регистрация: 28.10.2013
Сообщений: 7,946
15.10.2015, 12:52 5
lorents,
В js\vbs - нет. Какие там максимальные ограничения я не в курсе, но числа до 999 999 999 999 999 при математических операциях отображаются нормально, а если больше, то в научном формате. (но опять же, может быть это только на моей windows 32-бит, а на 64-битной - другой порядок.)
--------------------
Скрипт в посте выше начинает врать на долях после целого на файлах более 2122317823 байт(2023,999 mb). Поэтому стоит наверно ограничение выставить не в 2147483648, а в 2122317823.
0
33 / 6 / 0
Регистрация: 18.05.2014
Сообщений: 121
15.10.2015, 15:14  [ТС] 6
Garry Galler, Тогда думаю правильней перенести тему в VBScript/JScript/WSH/WMI/HTA.

Уважаемы модераторы перенесите тему в раздел VBScript/JScript/WSH/WMI/HTA
0
Эксперт Python
4167 / 3061 / 1006
Регистрация: 28.10.2013
Сообщений: 7,946
15.10.2015, 21:57 7
На vbs:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function BytesToStr(size, precision) 
    Dim sizes, total, rSize
    sizes = Array(" YB", " Zb", " Eb", " Pb", " Tb", " Gb", " Mb", " Kb", " byte")
    total = Ubound(sizes)
    while size > 1024
      total = total-1  
      size = size/1024
    wend
    rSize = round(size,precision)
    BytesToStr = rSize & sizes(total) 
End Function
 
' второй параметр определяет  точность знаков после запятой
 WScript.Echo BytesToStr(0, 2)  
 WScript.Echo BytesToStr(1023, 1) 
 WScript.Echo BytesToStr(1680*1024, 1)
 WScript.Echo BytesToStr(1680*1024*1024, 1)
 WScript.Echo BytesToStr(1680*1024*1024*1024, 1)
 WScript.Echo BytesToStr(1680*1024*1024*1024*1024, 1)
 WScript.Echo BytesToStr(1680*1024*1024*1024*1024*1024, 1)
 WScript.Echo BytesToStr(2147483648, 2)
Добавлено через 5 часов 24 минуты
Условие size > 1024 лучше изменить на size >= 1024, чтобы файлы, чей размер точно соответствует
единице измерения выводились как 1 kb, 1mb, 1gb, а не в 1024 byte, 1024 kb, 1024 mb и т.д.
2
10 / 9 / 2
Регистрация: 08.02.2017
Сообщений: 120
29.01.2020, 15:32 8
Цитата Сообщение от Garry Galler Посмотреть сообщение
На vbs:
Отличная функция, но, один момент "size" лучше устанавливать в ByVal
0
2895 / 1553 / 586
Регистрация: 06.06.2017
Сообщений: 5,170
29.01.2020, 16:27 9
Файлы в Yb/Zb/Eb/Pb/Tb оставим для след. столетий.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
File = "C:\Path\to\file.ext"
Set FSO = CreateObject("Scripting.FileSystemObject")
MsgBox Size(File)
 
Function Size(F)
  B = FSO.GetFile(F).Size : S = "b"
  Select Case True
    Case B > 1073741823 B = B/1073741824 : S = "Gb"
    Case B > 1048575    B = B/1048576    : S = "Mb"
    Case B > 1023       B = B/1024       : S = "Kb"
  End Select
  Size = Round(B, 2) & " " & S
End Function
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2020, 16:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Подгон размера виджетов в зависимости от размера окна
Добрый день. Возникла необходимость изменять размеры виджетов при изменении размеров окна,...

Изменение размера шрифта в TextBox в зависимости от его размеров
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

Запрет изменения размера формы и элементов при изменении шрифта и его размера
Здравствуйте. К слову вопрос название темы. А именно как запретить изменять размер формы и...

Построить график зависимости времени сортировки массива от его размера
Нужно построить график зависимости времени сортировки от количества элементов в массиве, не знаю,...

Файл или массив большого размера вывести на экран через буфер маленького размера
Приветствую! Суть: нужно продеть слона int slon длиной 13467 через игольное ушко byte uho = new...

Динамическое отображение размера копируемого файла
Привет! Пробую сделать штучку, которая могла бы постоянно кидать запрос на копируемый файл и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.