Подтвердить что ты не робот

Команда Windows только для размера файла

Существует ли команда Windows, которая выведет размер указанного файла в байтах, например, так?

> filesize test.jpg
65212

Я знаю, что команда dir выводит эту информацию, но также выводит и другую информацию.

Я мог бы легко написать такую программу, но я бы предпочел использовать встроенную команду Windows, если это возможно, или только ту, которая доступна в новой установке Windows XP.

4b9b3361

Ответ 1

Если вы находитесь в пакете script, вы можете использовать трюки переменных аргументов, чтобы получить размер файла:

filesize.bat:

@echo off
echo %~z1

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

Тип

help call

в командной строке для всех вариантов сумасшедших переменных. Также см. эту статью для получения дополнительной информации.

Edit: Это работает только в Windows 2000 и более поздних версиях

Ответ 2

Если вы не хотите делать это в пакете script, вы можете сделать это из командной строки следующим образом:

for %I in (test.jpg) do @echo %~zI

Уродливый, но он работает. Вы также можете передать маску файла, чтобы получить список более чем для одного файла:

for %I in (*.doc) do @echo %~znI

Отобразит размер, имя файла для каждого .DOC файла.

Ответ 3

Используйте функцию, чтобы снять некоторые ограничения в операторе ~z. Это особенно полезно с циклом for:

@echo off
set size=0
call :filesize "C:\backup\20120714-0035\error.log"
echo file size is %size%
goto :eof

:: Set filesize of first argument in %size% variable, and return
:filesize
  set size=%~z1
  exit /b 0

Ответ 4

Попробуйте файлы:

forfiles /p C:\Temp /m file1.txt /c "cmd /c echo @fsize"

Команда forfiles запускает команду c для каждого файла m в каталоге p.

Переменная @fsize заменяется размером каждого файла.

Если файл C:\Temp\file1.txt равен 27 байтам, forfiles выполняет следующую команду:

cmd /c echo 27

Что печатает 27 на экране.

Как побочный эффект, он очищает экран так, как если бы вы выполнили команду cls.

Ответ 5

Поскольку вы используете Windows XP, можно использовать Windows PowerShell.

(Get-Item filespec ).Length 

или как функция

function Get-FileLength { (Get-Item $args).Length }
Get-FileLength filespec

Ответ 6

C:\>FORFILES  /C "cmd /c echo @fname @fsize"


C:\>FORFILES  /?

FORFILES [/P pathname] [/M searchmask] [/S]
         [/C command] [/D [+ | -] {MM/dd/yyyy | dd}]

Description:
    Selects a file (or set of files) and executes a
    command on that file. This is helpful for batch jobs.

Parameter List:
    /P    pathname      Indicates the path to start searching.
                        The default folder is the current working
                        directory (.).

Ответ 7

В PowerShell вы можете сделать:

$imageObj = New-Object System.IO.FileInfo("C:\test.jpg")    
$imageObj.Length

Ответ 8

Взято отсюда:

Следующая команда находит папки размером более 100 МБ на диске D:

diruse /s /m /q:100 /d d:

Параметр/s вызывает поиск подкаталогов, параметр /m показывает использование диска в мегабайтах, параметр /q: 100 вызывает маркировку папок размером более 100 МБ, а параметр /d отображает только папки, которые превышают порог, заданный параметром /q.

Используйте команду diskuse для поиска файлов по определенному размеру. Следующая команда отображает файлы размером более 100 МБ на диске D:

diskuse D: /x:104857600 /v /s

Параметр/x: 104857600 вызывает отображение файлов более 104 857 600 байт и действителен, только если вы включили опцию /v (verbose). Параметр /s означает, что подкаталоги с указанного пути (в данном случае, диск D:) выполняются.

Использование VBScript

' This code finds all files over a certain size.
' ------ SCRIPT CONFIGURATION ------
strComputer = "**<ServerName>**" 
intSizeBytes = 1024 * 1024 * 500  ' = 500 MB
' ------ END CONFIGURATION ---------
set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
set colFiles = objWMI.ExecQuery _
    ("Select * from CIM_DataFile where FileSize > '" & intSizeBytes & "'")
for each objFile in colFiles
    Wscript.Echo objFile.Name & "  " & objFile.Filesize / 1024 / 1024 & "MB"
next

Ответ 9

Это не совсем то, о чем вы просили, и его можно использовать только из командной строки (и может быть бесполезным в пакетном файле), но один быстрый способ проверить размер файла - это просто использовать dir:

> dir Microsoft.WindowsAzure.Storage.xml

Результаты в:

Directory of C:\PathToTheFile

08/10/2015  10:57 AM         2,905,897 Microsoft.WindowsAzure.Storage.xml
               1 File(s)      2,905,897 bytes
               0 Dir(s)  759,192,064,000 bytes free

Ответ 10

Создайте файл с именем filesize.cmd (и поместите в папку C:\Windows\System32):

@echo %~z1

Ответ 11

В пакетном файле приведенное ниже работает для локальных файлов, но не для файлов на сетевых жестких дисках

for %%I in ("test.jpg") do @set filesize=%~z1

Однако он уступает коду, потому что он не работает с файлами, сохраненными на сетевом диске (например, \\Nas\test.jpg и \\192.168.2.40\test.jpg). Приведенный ниже код работает для файлов в любом месте, и я написал его сам.

Я уверен, что есть более эффективные способы сделать это, используя VBScript или PowerShell или что-то еще, но я не хотел делать ничего из этого; хорошая старая партия для меня!

set file=C:\Users\Admin\Documents\test.jpg
set /a filesize=
set fileExclPath=%file:*\=%

:onemoretime
set fileExclPath2=%fileExclPath:*\=%
set fileExclPath=%fileExclPath2:*\=%
if /i "%fileExclPath%" NEQ "%fileExclPath2%" goto:onemoretime

dir /s /a-d "%workingdir%">"%temp%\temp.txt"
findstr /C:"%fileExclPath%" "%temp%\temp.txt" >"%temp%\temp2.txt"

set /p filesize= <"%temp%\temp2.txt"

echo set filesize=%%filesize: %fileExclPath%%ext%=%% >"%temp%\temp.bat"
call "%temp%\temp.bat"

:RemoveTrailingSpace
if /i "%filesize:~-1%" EQU " " set filesize=%filesize:~0,-1%
if /i "%filesize:~-1%" EQU " " goto:RemoveTrailingSpace

:onemoretime2
set filesize2=%filesize:* =%
set filesize=%filesize2:* =%
if /i "%filesize%" NEQ "%filesize2%" goto:onemoretime2

set filesize=%filesize:,=%
echo %filesize% bytes

SET /a filesizeMB=%filesize%/1024/1024
echo %filesizeMB% MB

SET /a filesizeGB=%filesize%/1024/1024/1024
echo %filesizeGB% GB

Ответ 12

В PowerShell вы должны сделать это:

(Get-ChildItem C:\TEMP\file1.txt).Length