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.
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
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.
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
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
.
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
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 (.).
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
créez filesize.cmd (et placez-le dans C:\Windows\System32):
@echo %~z1
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
Dans Powershell, vous pouvez faire:
$imageObj = New-Object System.IO.FileInfo("C:\test.jpg")
$imageObj.Length
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
dans Powershell, vous DEVRAIT faire ceci:
(Get-ChildItem C:\TEMP\file1.txt) .Longueur