76 votes

Comment puis-je vérifier la taille d'un fichier dans un script batch Windows ?

Je veux avoir un fichier batch qui vérifie ce que le filesize est d'un dossier.

Si elle est supérieure à %somany% kbytes, il devrait rediriger avec GOTO vers un autre endroit.

Exemple :

[check for filesize]
IF %file% [filesize thing Bigger than] GOTO No
echo Great! Your filesize is smaller than %somany% kbytes.
pause
exit
:no
echo Um... You have a big filesize.
pause
exit

108voto

Anders Points 34448

Si le nom du fichier est utilisé comme un paramètre du fichier batch, tout ce dont vous avez besoin est %~z1 (1 signifie premier paramètre)

Si le nom du fichier n'est pas un paramètre, vous pouvez faire quelque chose comme :

@echo off
setlocal
set file="test.cmd"
set maxbytesize=1000

FOR /F "usebackq" %%A IN ('%file%') DO set size=%%~zA

if %size% LSS %maxbytesize% (
    echo.File is ^< %maxbytesize% bytes
) ELSE (
    echo.File is ^>= %maxbytesize% bytes
)

8 votes

Pouvez-vous expliquer en quoi l'option "usebackq" est utile ? Elle ne semble pas avoir de rapport avec la taille du fichier, mais si je la supprime, le système ne fonctionne plus.

14 votes

@JoelFan : Sans usebackq, le ' quote signifie commande et non chaîne de caractères (Exécuter FOR / ? pour les détails) Une autre alternative (pour mieux gérer les espaces dans les noms de fichiers) est d'utiliser : FOR /F "tokens=*" %%A IN ("%file%") DO ...

0 votes

Bonjour @Anders Pouvez-vous me faire savoir comment je peux faire la même chose lorsque j'ai plusieurs fichiers dans une séquence. Par exemple, je veux déterminer si mon fichier est inférieur à 2 kb, puis le déplacer vers un dossier différent ? Mon résultat devrait tester chaque fichier dans le chemin et valider.

11voto

Sinan Ünür Points 76179

%~z1 s'étend à la taille du premier argument du fichier batch. Voir

C:\> call /?

y

C:\> if /?

Un exemple simple :

@ECHO OFF
SET SIZELIMIT=1000
SET FILESIZE=%~z1

IF %FILESIZE% GTR %SIZELIMIT% Goto No

ECHO Great! Your filesize is smaller than %SIZELIMIT% kbytes.
PAUSE
GOTO :EOF

:No
ECHO Um ... You have a big filesize.
PAUSE
GOTO :EOF

10voto

HerdplattenToni Points 356

Si votre %file% est un paramètre d'entrée, vous pouvez utiliser %~zNN est le numéro du paramètre.

Par exemple, un test.bat contenant

@echo %~z1

affichera la taille du premier paramètre, donc si vous utilisez " test myFile.txt ", il affichera la taille du fichier correspondant.

8voto

paranoid Points 11

Un autre exemple

  FOR %I in (file1.txt) do @ECHO %~zI

4voto

ghostdog74 Points 86060

Comme d'habitude, vous pouvez utiliser VBScript......

Set objFS = CreateObject("Scripting.FileSystemObject")
Set wshArgs = WScript.Arguments
strFile = wshArgs(0)
WScript.Echo objFS.GetFile(strFile).Size & " bytes"

Enregistrer sous filesize.vbs et entrer dans la ligne de commande :

C:\test>cscript /nologo filesize.vbs file.txt
79 bytes

Utilisez un for boucle (en lot) pour obtenir le résultat du retour.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X