Команда Windows только для размера файла? - PullRequest
41 голосов
/ 27 января 2009

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

>filesize test.jpg
65212

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

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

Ответы [ 12 ]

47 голосов
/ 27 января 2009

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

filesize.bat:

@echo off
echo %~z1

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

Тип

help call

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

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

41 голосов
/ 27 января 2009

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

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

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

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

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

11 голосов
/ 14 июля 2012

Используйте функцию для снятия некоторых ограничений в операторе ~ 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 1st argument in %size% variable, and return
:filesize
  set size=%~z1
  exit /b 0
10 голосов
/ 18 мая 2009

Попробуйте forfiles :

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.

3 голосов
/ 27 января 2009

Поскольку вы используете XP, Windows PowerShell является опцией.

(Get-Item filespec ).Length 

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

function Get-FileLength { (Get-Item $args).Length }
Get-FileLength filespec
2 голосов
/ 27 января 2015
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 (.).
1 голос
/ 28 мая 2016

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

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

Тем не менее, это худший код, потому что он не работает для файлов, сохраненных на сетевом диске (например, \ Nas \ test.jpg, \ 192.168.2.40 \ test.jpg). Приведенный ниже код работает для файлов в любом месте, пишет это сам. Я уверен, что есть более эффективные способы сделать это с помощью VBS, 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
1 голос
/ 20 января 2016

создать filesize.cmd (и поместить в C: \ Windows \ System32):

@echo %~z1
1 голос
/ 20 октября 2015

Это не совсем то, о чем вы спрашивали, и его можно использовать только из командной строки (и может быть бесполезным в командном файле), но один быстрый способ проверить размер файла - просто использовать 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
1 голос
/ 12 декабря 2012

Взят отсюда :

Следующая команда находит папки размером более 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 (подробный). Параметр / 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...