Команда Windows только для размера файла
Существует ли команда Windows, которая выведет размер указанного файла в байтах, например, так?
> filesize test.jpg
65212
Я знаю, что команда dir
выводит эту информацию, но также выводит и другую информацию.
Я мог бы легко написать такую программу, но я бы предпочел использовать встроенную команду Windows, если это возможно, или только ту, которая доступна в новой установке Windows XP.
Ответы
Ответ 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