web-dev-qa-db-fra.com

Commande Windows pour la taille du fichier uniquement?

Existe-t-il une commande Windows qui affichera la taille en octets d'un fichier spécifié comme celui-ci?

>filesize test.jpg
65212

Je sais que la commande dir génère ces informations, mais elle génère également d'autres informations.

Je pourrais facilement écrire un tel programme mais je préférerais utiliser une commande Windows native si possible, ou seulement ce qui est disponible dans une nouvelle installation de Windows XP.

41
Liam

Si vous êtes dans un script batch, vous pouvez utiliser des astuces de variable d'argument pour obtenir la taille du fichier:

filesize.bat:

@echo off
echo %~z1

Cela donne des résultats comme ceux que vous suggérez dans votre question.

Type

help call

à l'invite de commande pour toutes les options folles de manipulation de variables. Voir aussi cet article pour plus d'informations.

Modifier: Cela ne fonctionne que dans Windows 2000 et versions ultérieures

47
Mike Houston

Si vous ne voulez pas le faire dans un script batch, vous pouvez le faire à partir de la ligne de commande comme ceci:

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

Moche, mais ça marche. Vous pouvez également passer un masque de fichier pour obtenir une liste de plusieurs fichiers:

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

Affiche la taille et le nom de fichier de chaque fichier .DOC.

41
Patrick Cuff

Utilisez une fonction pour supprimer certaines limitations de l'opérateur ~ z, particulièrement utile avec la boucle 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
11
David Doumèche

Essayez forfiles :

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

La commande forfiles exécute la commande c pour chaque fichier m dans le répertoire p.

La variable @fsize est remplacé par la taille de chaque fichier.

Si le fichier C:\Temp\file1.txt fait 27 octets, forfiles exécute cette commande:

cmd /c echo 27

Qui imprime 27 à l'écran.

Comme effet secondaire, il efface votre écran comme si vous aviez exécuté la commande cls.

10
eccieThe Techie

Puisque vous utilisez XP, Windows PowerShell est une option.

(Get-Item filespec ).Length 

ou en fonction

function Get-FileLength { (Get-Item $args).Length }
Get-FileLength filespec
3
Scott Weinstein
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
Kanagavelu Sugumar

Dans un fichier batch, ce qui suit fonctionne pour les fichiers locaux, mais échoue pour les fichiers sur les disques durs du réseau

for %%I in ("test.jpg") do @set filesize=%~z1

Cependant, c'est un code inférieur car il ne fonctionne pas pour les fichiers enregistrés sur un lecteur réseau (par exemple\Nas\test.jpg,\192.168.2.40\test.jpg) Le code ci-dessous fonctionne pour les fichiers dans n'importe quel emplacement, je l'ai écrit moi-même. Je suis sûr qu'il existe des moyens plus efficaces de le faire en utilisant vbs, ou powershell ou autre, mais je ne voulais rien faire de tout ça, bon vieux lot pour moi!

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
1
XFlak

créez filesize.cmd (et placez-le dans C:\Windows\System32):

@echo %~z1
1
user5814704

Pris d'ici :

La commande suivante recherche les dossiers dont la taille est supérieure à 100 Mo sur le lecteur D::

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

L'option/s entraîne la recherche dans les sous-répertoires, l'option/m affiche l'utilisation du disque en mégaoctets, l'option/q: 100 entraîne le marquage des dossiers supérieurs à 100 Mo et l'option/d affiche uniquement les dossiers qui dépassent le seuil spécifié par/q.

Utilisez la commande diskuse pour rechercher des fichiers d'une certaine taille. La commande suivante affiche des fichiers de plus de 100 Mo sur le lecteur D::

diskuse D: /x:104857600 /v /s

L'option/x: 104857600 provoque l'affichage de fichiers de plus de 104 857 600 octets et n'est valide que si vous incluez l'option/v (verbeuse). L'option/s signifie que les sous-répertoires du chemin spécifié (dans ce cas, le lecteur D:) sont recherchés.

Utilisation de 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
1
Mick

Dans Powershell, vous pouvez faire:

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

Ce n'est pas exactement ce que vous demandiez et il ne peut être utilisé qu'à partir de la ligne de commande (et peut être inutile dans un fichier de commandes), mais un moyen rapide de vérifier la taille du fichier consiste simplement à utiliser dir:

> dir Microsoft.WindowsAzure.Storage.xml

Résulte en:

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
Nikita G.

dans Powershell, vous DEVRAIT faire ceci:

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

0
eccieThe Techie