2009-01-27 2 views
37

Gibt es einen Windows-Befehl, der die Größe einer bestimmten Datei in Bytes ausgibt?Windows-Befehl nur für die Dateigröße?

>filesize test.jpg 
65212 

weiß ich, dass der Befehl dir gibt diese Informationen, aber es gibt auch andere Informationen.

Ich könnte leicht ein solches Programm schreiben, aber ich würde lieber einen nativen Windows-Befehl verwenden, wenn möglich, oder nur, was in einer Neuinstallation von Windows XP verfügbar ist.

Antwort

44

Wenn Sie sich in einem Batch-Skript, können Sie Argument Variable Tricks verwenden, um die Dateigröße zu erhalten:

filesize.bat:

@echo off 
echo %~z1 

Dies ergibt Ergebnisse wie die, die Sie in Ihrer Frage vorschlagen.

Typ

help call 

an der Eingabeaufforderung für all die verrückten variable Manipulation Optionen. Weitere Informationen finden Sie unter this article.

Edit: Dies funktioniert nur unter Windows 2000 und höher

+8

Hinweis: Dies funktioniert nur für eine Datei.Wenn Sie in der Lage sein möchten, eine Maske zu übergeben, um die Größe mehrerer Dateien zu erhalten, ändern Sie die zweite Zeile in etwas wie 'für %% I in (% 1) tun @echo %% ~ znI'. –

+0

@Mike, aber was ist der Befehl, um die Anzahl der Bytes des gechannelten stdout zu zählen? (im Gegensatz zu gespeicherten Datei) – Pacerier

+0

@ Pacerier, nicht sicher, ob das mit dieser Methode möglich ist. Die% ~ z-Variablen beziehen sich speziell auf eine Datei, die als Argument übergeben wird. Daher werden sie ihre Werte aus dem Dateisystem nachschlagen, anstatt einen dynamischen Datenstrom von Bytes. –

1

In Powershell können Sie tun:

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

Es wird funktionieren, aber es ignoriert alle integrierten Funktionen von Powershell für allgemeine Aufgaben –

+0

Sie eher Get-ChildItem test.jpg verwenden würde | Wählen Sie Objektlänge in Powershell. – Joey

37

Wenn Sie dies in einem Batch-Skript nicht tun möchten, können Sie dies über die Befehlszeile wie folgt tun:

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

Hässlich, aber es funktioniert. Sie können in einer Datei Maske passieren auch eine Auflistung für mehr als eine Datei zu erhalten:

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

Wird die Größe angezeigt werden, Namen jeder Datei .DOC-Datei.

+0

Schön, ich frage mich, wie man das von der Kommandozeile –

+0

auf irgendeine Weise zu bekommen, um Dateigröße in KB zu bekommen? –

3

Da Sie XP verwenden, ist Windows PowerShell eine Option.

(Get-Item filespec).Length 

oder als Funktion

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

PS: Ich glaube nicht, dass Powershell in einer Neuinstallation von XP enthalten ist. Es sei denn, Sie erstellen Bilder von einem SP2 oder höher mit Powershell bereits dort. – Cheeso

9

Versuchen forfiles:

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

Die forfiles Befehl ausgeführt c für jede Datei Befehl m im Verzeichnis p.

Die Variable @fsize wird durch die Größe jeder Datei ersetzt.

Wenn die Datei C:\Temp\file1.txt ist 27 Bytes, forfiles läuft dieser Befehl:

cmd /c echo 27 

Welche 27 auf dem Bildschirm ausgibt.

Als Nebeneffekt löscht es Ihren Bildschirm, als ob Sie den Befehl cls ausgeführt hätten.

0

in Powershell Sie sollten dies tun:

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

11

Verwenden Sie eine Funktion eine gewisse Einschränkung in ~ z Operator loszuwerden, insbesondere mit for-Schleife Wert:

@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 
+0

Schön, danke! Gibt es eine Möglichkeit,% size% zu erhalten, um die Größe in Kilobyte statt Bytes anzuzeigen? – luisdev

+0

Sie können den Operator set/a verwenden: set/a size =% ~ z1/1024 –

1

from here Genommen:

mit dem folgenden Befehl Ordner th bei mehr als 100 MB in der Größe auf dem D: Laufwerk:

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

Die Option/s Verzeichnisse, Festplattennutzung der Option/m zeigt in Megabyte gesucht werden verursacht, die/q: Verursacht 100 Option Ordner, sind größer als 100 MB, die markiert werden sollen, und die Option/d zeigt nur Ordner an, die den mit/q angegebenen Schwellenwert überschreiten.

Verwenden Sie den Befehl diskuse, um Dateien mit einer bestimmten Größe zu finden. Der folgende Befehl zeigt Dateien über 100 MB Größe auf dem Laufwerk D::

diskuse D: /x:104857600 /v /s 

Der/x: 104857600 Option bewirkt, dass Dateien über 104.857.600 Bytes angezeigt werden und gilt nur, wenn Sie die Option/v enthalten (ausführlich). Die Option/s bedeutet, dass Unterverzeichnisse aus dem angegebenen Pfad (in diesem Fall das Laufwerk D:) gesucht werden.

VBSript

' 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 (.). 
+0

Beachten Sie, dass dieser Befehl keine Verzeichnisgröße zur Verfügung stellt, auch wenn in Windows kein fertiger Befehl verfügbar ist. Sie müssen rekursives Skript dafür schreiben. –

2

Das ist nicht genau das, was Sie fragen und es kann nur über die Befehlszeile verwendet werden (und in einer Batch-Datei unbrauchbar sein kann) ein, aber schnelle Möglichkeit, die Dateigröße zu überprüfen, ist nur dir zu verwenden:

> dir Microsoft.WindowsAzure.Storage.xml 

Ergebnisse in:

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 erstellt (und in C: \ Windows \ System32):

@echo %~z1 
0

In einer Batchdatei arbeitet die unten für lokale Dateien, aber nicht für Dateien auf Netzwerk-Festplatten

Es ist jedoch schlechter Code, weil es nicht für Dateien funktioniert, die auf einem Netzlaufwerk gespeichert sind (z. B. \ Nas \ test.jpg, \ 192.168.2.40 \ test.jpg) Der folgende Code funktioniert für Dateien an jedem Ort, schrieb es selbst. Ich bin mir sicher, dass es effizientere Möglichkeiten gibt, dies mit Vbs oder Powershell oder was auch immer zu tun, aber ich wollte nichts davon tun, gute alte Stapel für mich!

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 
Verwandte Themen