是否有Windows命令会输出指定文件的大小(以字节为单位)?
>filesize test.jpg
65212
我知道dir命令会输出此信息,但它也会输出其他信息。
我可以轻松编写这样的程序,但如果可能的话,我更愿意使用本机Windows命令,或者只使用全新安装的Windows XP中可用的命令。
答案 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)
你应该这样做:
(Get-ChildItem C:\ TEMP \ file1.txt).Length