2009-01-27 24 views
37

是否有一個Windows命令會輸出這樣的指定文件的字節大小?僅用於文件大小的Windows命令?

>filesize test.jpg 
65212 

我知道dir命令輸出這個信息,但它也輸出其他信息。

我可以很容易地編寫這樣一個程序,但我更願意使用本機Windows命令(如果可能),或者只使用Windows XP全新安裝中的可用命令。

回答

44

如果你是一個批處理腳本中,你可以使用參數變量過關獲得文件大小:

filesize.bat:

@echo off 
echo %~z1 

這給出了您在問題中建議的結果。

類型

help call 

在所有的瘋狂變量處理選項命令提示符。另請參閱this article瞭解更多信息。

編輯: 這僅適用於Windows 2000及以後

+8

請注意,這隻適用於一個文件。如果您希望能夠傳入掩碼以獲取多個文件的大小,請將第二行更改爲「for %% I in(%1)do @echo %%〜znI`。 – 2009-01-27 16:41:49

+0

@Mike,但計數通道標準輸出的字節數的命令是什麼? (而不是保存的文件) – Pacerier 2016-08-04 20:46:27

+0

@Pacerier,不知道是否可以使用這種方法。 %〜z變量具體指的是作爲參數傳遞的文件,因此將從文件系統中查找它們的值,而不是動態的字節流。 – 2016-08-05 17:39:05

1

在PowerShell中,你可以這樣做:

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

它會工作,但它會忽略PowerShell的所有常見任務的內置功能 – 2009-01-27 16:59:36

+0

您寧可使用Get-ChildItem test.jpg |在Powershell中選擇對象的長度。 – Joey 2009-05-19 06:16:14

37

如果你不希望這樣做在一個批處理腳本,你可以像在命令行中執行此操作:

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

醜,但它的作品。您還可以傳入文件掩碼以獲取多個文件的列表:

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

將顯示每個.DOC文件的大小,文件名。

+0

不錯,我想知道如何通過命令行 – 2009-01-27 16:35:29

3

由於您使用的是XP,因此Windows PowerShell是一個選項。

(Get-Item filespec).Length 

或作爲功能

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

嘗試forfiles

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

forfiles命令運行命令c在目錄p每個文件m

將變量@fsize替換爲每個文件的大小。

如果文件C:\Temp\file1.txt是27個字節,forfiles運行此命令:

cmd /c echo 27 

它打印27到屏幕上。

作爲一個副作用,它會清除屏幕,就像您運行cls命令一樣。

0

在PowerShell中你應該做到這一點:

(GET-ChildItem C:\ TEMP \ FILE1.TXT)。長度

11

使用函數來獲得〜Z運營商擺脫了一些限制,尤其是與用於環路有用的:

@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 
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選項導致超過104857600個字節的文件被顯示,並且是有效的只有如果包括/ 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 
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 (.). 
2

這不正是你問關於什麼的,它只能在命令行中使用(並可能批處理文件沒用),但一快速的方法來檢查文件的大小僅僅是使用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

創建filesize.cmd(並投入到C:\ Windows \ System32下):

@echo %~z1 
0

在一個批處理文件,以下適用於本地文件,但無法對網絡硬盤

文件
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 
相關問題