Windows命令仅用于文件大小?

时间:2009-01-27 15:30:54

标签: windows command-line

是否有Windows命令会输出指定文件的大小(以字节为单位)?

>filesize test.jpg
65212

我知道dir命令会输出此信息,但它也会输出其他信息。

我可以轻松编写这样的程序,但如果可能的话,我更愿意使用本机Windows命令,或者只使用全新安装的Windows XP中可用的命令。

12 个答案:

答案 0 :(得分:47)

如果您在批处理脚本中,可以使用参数变量技巧来获取文件大小:

filesize.bat:

@echo off
echo %~z1

这会得到您在问题中建议的结果。

类型

help call

在命令提示符下显示所有疯狂的变量操作选项。有关详细信息,另请参阅this article

修改 这仅适用于Windows 2000及更高版本

答案 1 :(得分:41)

如果您不想在批处理脚本中执行此操作,可以从命令行执行此操作,如下所示:

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

丑陋,但它确实有效。您还可以传入文件掩码以获取多个文件的列表:

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

将显示每个.DOC文件的大小,文件名。

答案 2 :(得分:11)

使用函数摆脱~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

答案 3 :(得分:10)

尝试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命令一样。

答案 4 :(得分:3)

由于您使用的是XP,因此可以使用Windows PowerShell。

(Get-Item filespec ).Length 

或作为一种功能

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

答案 5 :(得分:2)

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 (.).

答案 6 :(得分:1)

在Powershell中你可以做到:

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

答案 7 :(得分:1)

采取from here

以下命令在D:驱动器上找到大小超过100 MB的文件夹:

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

/ s选项导致搜索子目录,/ m选项显示磁盘使用情况(兆字节),/ q:100选项导致标记大于100 MB的文件夹,/ d选项仅显示文件夹超过/ q指定的阈值。

使用diskuse命令查找超过特定大小的文件。以下命令在D:驱动器上显示大小超过100 MB的文件:

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

答案 8 :(得分:1)

这不是您要求的,它只能在命令行中使用(并且在批处理文件中可能无用),但检查文件大小的一种快捷方法就是使用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

答案 9 :(得分:1)

创建filesize.cmd(并放到C:\ Windows \ System32):

#include <vector>
#include <iostream>

struct A
{
    int a;

    A(int t) : a(t)
    {
        std::cout << "I am being constructed.\n";
    }
    A(A&& other) : a(std::move(other.a))
    {
        std::cout << "I am being moved.\n";
    }
};

std::vector<A> g_a;

int main()
{
    std::cout << "emplace_back:\n";
    g_a.emplace_back(1);

    std::cout << "emplace_back in lambda:\n";
    auto f1 = [](int x) { g_a.emplace_back(x);  };  
    f1(2);

    std::cout << "\nContents: ";
    for (A const& t : g_a) 
        std::cout << t.a << " ";
    std::cout << std::endl;
}

答案 10 :(得分:1)

在批处理文件中,以下内容适用于本地文件,但适用于网络硬盘上的文件

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

答案 11 :(得分:0)

在Powershell中

应该这样做:

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