Comment puis-je vérifier la taille d'un fichier dans Windows script batch?
Je veux avoir un fichier de commandes qui vérifie que le filesize
est un fichier.
Si elle est plus grande que %somany% kbytes,
il doit 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
Vous devez vous connecter pour publier un commentaire.
Si le nom de fichier est utilisé comme paramètre dans le fichier de commandes, tous vous avez besoin est
%~z1
(1 signifie que le premier paramètre)Si le nom de fichier n'est pas un paramètre, vous pouvez faire quelque chose comme:
J'aime @Anders réponse parce que l'explication de l' %~z1 secret de la sauce.
Toutefois, comme l'a souligné, cela ne fonctionne que lorsque le nom est passé comme
premier paramètre du fichier de commandes.
@Anders travaillé contourner ce problème en utilisant
FOR
, qui est un grand 1-liner fixer àle problème, mais, il est un peu plus difficile à lire.
Au lieu de cela, nous pouvons revenir à une simple réponse par %~z1 en utilisant
CALL
.Si vous avez un nom de fichier stocké dans une variable d'environnement, il deviendra
%1 si vous l'utilisez comme un paramètre à une routine dans votre fichier de commandes:
%~z1
étend à la taille du premier argument pour le fichier de commandes. Voiret
Exemple Simple:
Je préfère utiliser une fonction DOS. Se sent plus propre à moi.
:eof
dans le DOS. Ceux sont les fonctionnalités de Windows cmd.exe. Ils sont complètement différentsSi votre
%file%
est un paramètre d'entrée, vous pouvez utiliser%~zN
, oùN
est le numéro du paramètre.E. g. un
test.bat
contenantAffiche la taille du premier paramètre, donc si vous utilisez "
test myFile.txt
", il affiche la taille du fichier correspondant.Comme d'habitude, VBScript est disponible pour vous à utiliser.....
Enregistrer sous
filesize.vbs
et entrez sur la ligne de commande:Utiliser un
for
boucle (dans le lot) pour obtenir le résultat de retour.Un autre exemple
Créer un fichier batch en ligne GetFileSize.bat contenant
ensuite l'appeler
Vous pouvez même créer votre fichier de test à la volée pour éliminer les satanés fichier requis, note le double pour cent dans l'écho de la déclaration:
Cette dernière solution est antispaghetti. Tellement agréable. Cependant, plus d'écritures sur le disque. Cochez la case utiliser les compter.
Viens juste de voir cette vieille question qui cherchent à voir si Windows avait quelque chose de construit dans. Le ~z chose, c'est quelque chose que je ne connaissais pas, mais pas pour moi. J'ai fini avec un Perl one-liner:
C'était ma solution pour l'évaluation des tailles de fichier sans l'aide de VB/perl/etc. et coller avec windows native des commandes shell:
Pas la solution la plus propre, mais il fait le travail.
Important à noter est le INT32 limite de Lot: 'numéro Invalide. Les nombres sont limités à 32 bits de précision.'
Essayer les instructions suivantes:
Tout nombre supérieur à la max INT32 de la valeur de BRISER LE SCRIPT! Voyant que la taille est mesurée en octets, les scripts prend en charge un maximum de la taille du fichier d'environ 255.9999997615814 MO !
@for /f "tokens=*" %F in ('dir /s /b /a:-d f:\') do @IF %~zF geq 4294967296 ECHO %F >> FindFilesTooLargeForFAT32.txt
. Sortie des fichiers de plus de 2GO (pas de 256 mo). 2^31 = 32 bits = 2,147,483,648 = 2 GO (techniquement GiB gibibyte 1024^3 * 2).Après quelques "essayer et de tester" itérations j'ai trouvé un moyen (pas encore présent ici) pour obtenir la taille du fichier dans le cycle variable (pas un paramètre de ligne de commande):
Juste une idée:
Vous pouvez obtenir la taille du fichier en exécutant la commande "dir":
Puis de nouveau il renvoie donc beaucoup de choses.
Peut-être que vous pouvez obtenir à partir de là si vous regardez pour cela.
Mais je ne suis pas sûr.