taille de fichier pas dos

taille de fichier pas dos - Shell/Batch - Programmation

Marsh Posté le 12-04-2007 à 15:06:54    

Salut,
j'ai un dossier avec plusieurs fichiers dedans.
j'aimerais déplacer les fichiers dans un autre dossier si la taille d'au moins un des fichiers est supérieure à 1.5GO.
 
Comment récupérer proprement la taille du fichier le plus gros du dossier? J'ai essayé dir machin /o-s /b mais je perds la taille.
 
Merci

Reply

Marsh Posté le 12-04-2007 à 15:06:54   

Reply

Marsh Posté le 12-04-2007 à 15:19:00    

Normalement avec dir tu obtien la taille du fichier

Reply

Marsh Posté le 12-04-2007 à 15:27:52    

l'option /b n'affiche que le nom des fichiers. J'ai fait cela pour ne pas avoir l'entete de la commande dir.  
Puisque les fichiers sont triés par taille, il suffit de récupérer le 1er pour trouver le + gros. mais je perds la taille.
sinon j'essayerais de faire avec un FOR

Reply

Marsh Posté le 12-04-2007 à 15:28:20    

t'ain je viens de regarder le help de Vista (console). ben y'en a des nouveautés dites donc !
c'est presque aussi bien que sous linux (version 0.00001 :D)

Reply

Marsh Posté le 12-04-2007 à 15:45:36    

polo021 a écrit :

Puisque les fichiers sont triés par taille, il suffit de récupérer le 1er pour trouver le + gros. mais je perds la taille.


Il suffit ensuite de déterminer la taille de ce 1er fichier ;)
 
Genre :

Code :
  1. @echo off
  2. echo La taille du fichier %~1 = %~z1 octets.

Reply

Marsh Posté le 12-04-2007 à 16:18:06    

MagicBuzz a écrit :

t'ain je viens de regarder le help de Vista (console). ben y'en a des nouveautés dites donc !
c'est presque aussi bien que sous linux (version 0.00001 :D)


 
Tu sais si la commande Set /p menu: fonctionne toujour sous vista ?

Reply

Marsh Posté le 12-04-2007 à 16:20:01    

ça fait quoi ?
 
(fait pas faire comme joce un coup, qui a testé la commande d'un gars sous nux sans savoir que ça faisait, et qui avait tout niqué son serveur :D)

Reply

Marsh Posté le 12-04-2007 à 16:22:38    

en tout cas, tapé comme ça, ça marche pas :
 


C:\Users\môa>set /p menu:
La syntaxe de la commande est incorrecte.


 
Voilà la doc complète de set :


C:\Users\môa>set /?
Affiche, fixe ou supprime des variables d'environnement de cmd.exe.
 
SET [variable=[chaîne]]
 
  variable  Nom de la variable d'environnement.
  chaîne    Chaîne de caractères à affecter à la variable.
 
SET sans paramètres affiche les variables d'environnement définies.
 
Si les extensions de commandes sont activées, SET est modifié comme suit :
 
La commande SET appelée avec un nom de variable seulement, sans signe égal
ou valeur, affiche la valeur de toutes les variables dont le préfixe correspond
au nom donné à la commande SET. Par exemple :
 
    SET P
 
affiche toutes les variables qui commence avec la lettre 'P'
 
La commande SET fixe la valeur ERRORLEVEL à 1 si le nom de variable n'est
pas trouvé dans l'environnement en cours.
 
La commande SET n'autorise pas qu'un signe égal (=) fasse partie du nom d'une
variable.
 
Deux nouvelles options ont été ajoutées à la commande SET :
 
    SET /A expression
    SET /P variable=[ChaîneInvite]
 
L'option /A spécifie que la chaîne à droite du signe égal est une
expression numérique qui est évaluée. L'évaluation de l'expression est assez
simple et prend en charge les opérations suivantes dans l'ordre décroissant
de préséance :
 
    ()                   - groupement
    ! ~ -                - opérateurs unaires
    * / %                - opérateurs arithmétiques
    + -                  - opérateurs arithmétiques
    << >>                - décalage logique
    &                    - ET au niveau du bit
    ^                    - OU exclusif au niveau du bit
    |                    - OU au niveau du bit
    = *= /= %= += -=     - attribution
      &= ^= |= <<= >>=
    ,                    - séparateur d'expression
 
Si vous utilisez des opérateurs logiques ou des nombres, vous devez mettre
l'expression entre guillemets. Toute chaîne non numérique dans l'expression est
traitée comme une variable d'environnement dont les valeurs sont converties en
nombres avant d'être utilisées. Si un nom de variable d'environnement est
spécifié mais n'est pas défini dans l'environnement en cours, alors la valeur
zéro est utilisée. Cela vous permet de faire des opérations avec les valeurs
d'une variable d'environnement sans avoir à entrer des signes % pour obtenir
ces valeurs. Si SET /A est exécuté à partir de la ligne de commande en dehors
d'un script de commande, alors la valeur finale de l'expression est affichée.
L'opérateur d'assignation requiert un nom de variable d'environnement à
gauche du cet opérateur. Les valeurs numériques sont des nombres décimaux, à
moins qu'ils ne soient préfixés par 0x pour les valeurs hexadécimales et 0
pour la notation octale. Donc 0x12 est identique à 18 et
à 022. Notez que la notation octale peut être confuse : 08 et 09 ne sont pas
valides car 8 et 9 ne sont pas des nombres valides en notation octale.
 
L'option /P vous permet de fixer la valeur d'une variable avec une ligne
entrée par l'utilisateur. Elle affiche la chaîne ChaîneInvite spécifiée
avant de lire la ligne entrée. La ChaîneInvite peut être vide.
 
La substitution de la variable d'environnement a été améliorée comme suit :
 
    %PATH:ch1=ch2%
 
développe la variable d'environnement PATH, remplaçant chaque
occurrence de "ch1" dans le résultat développé par "ch2".  "ch2" peut être
une chaîne vide pour supprimer toutes les occurrences de "ch1" de la sortie
développée. "ch1" peut commencer par un astérisque, auquel cas
la commande traitera la chaîne à partir du début et jusqu'à la première
occurrence du reste de ch1.
 
Vous pouvez aussi spécifier des sous-chaînes pour une expression.
 
    %PATH:~10,5%
 
développe la variable d'environnement PATH et utilise seulement 5
caractères à partir du onzième (décalage de 10)  dans le résultat sous forme
développée. Si la longueur n'est pas spécifiée, tout le reste de la valeur
de la variable est traité. Si l'une des valeurs (décalage ou longueur)
est négative, alors le nombre utilisé est la longueur de la valeur de la
variable d'environnement ajoutée au décalage ou à la longueur donné.
 
    %PATH:~-10%
 
extrait les 10 derniers caractères de la variable PATH.
 
    %PATH:~0,-2%
 
extrait tous les caractères sauf les deux derniers de la variable PATH.
 
Enfin, la prise en charge de l'expansion retardée de variables d'environnement
a été ajoutée. Cette prise en charge est toujours désactivée par défaut, mais
peut être activée/désactivée via l'option de ligne de commande /V dans CMD.EXE.
Voir CMD /?
 
La prise en charge de l'expansion retardée de variables d'environnement est
utile pour contourner les limites de l'expansion en cours qui se produit à la
lecture d'une ligne de texte et non à son exécution. L'exemple suivant montre
le problème causé par l'expansion immédiate de variables :
 
    set VAR=avant
    if "%VAR%" == "avant" (
        set VAR=après
        if "%VAR%" == "après" @echo Cela marche si vous lisez ce message
    )
 
n'affichera jamais le message car la variable %VAR% présente dans les deux
instances de IF est remplacée à la lecture de la première instance de IF, étant
donné que le corps de IF, instruction composée, est logiquement inclus. Donc le
IF compris dans l'instance compare "avant" avec "après" et il n'y aura jamais
égalité. De même, l'exemple suivant ne fonctionnera pas comme prévu :
 
    set LIST=
    for %i in (*) do set LIST=%LIST% %i
    echo %LIST%
 
car la liste des fichiers du répertoire ne sera PAS créée, et en fait la
variable LIST prendra le valeur du dernier fichier trouvé. Une fois encore
cela est dû au fait que %LIST% n'est étendu qu'une fois, lorsque FOR est
lu et à ce stade la variable LIST est vide. Donc la boucle FOR exécutée est :
 
    for %i in (*) do set LIST= %i
 
qui donne toujours à LIST la valeur du dernier fichier trouvé.
 
L'expansion retardée de variables d'environnement vous permet d'utiliser un
autre caractère (le point d'exclamation) afin d'étendre les variables
d'environnement durant l'exécution. Si l'expansion retardée de variables est
activée, les exemples ci-dessus peuvent être écrits comme suit afin de
fonctionner comme vous le souhaitez :
 
    set VAR=avant
    if "%VAR%" == "avant" (
        set VAR=après
        if "!VAR!" == "après" @echo Cela marche si vous lisez ce message
    )
 
    set LIST=
    for %i in (*) do set LIST=!LIST! %i
    echo %LIST%
 
Si les extensions de commandes sont activées, alors plusieurs variables
d'environnement dynamiques peuvent être développées sans apparaître dans la
liste de variables affichée par SET. Les valeurs de ces variables sont
calculées dynamiquement chaque fois que la variable est développée. Si
l'utilisateur définit explicitement une variable avec un de ces noms, alors
cette définition écrase la définition dynamique décrite ci-dessous :
 
%CD% - se développe en la chaîne du répertoire en cours.
 
%DATE% - se développe en la date actuelle en utilisant le même
    format que la commande DATE.
 
%TIME% - se développe en l'heure en cours en utilisant le même
    format que la commande TIME.
 
%RANDOM% - se développe en un nombre aléatoire compris entre 0 et 32767.
 
%ERRORLEVEL% - se développe en la valeur en cours de ERRORLEVEL
 
%CMDEXTVERSION% - se développe en le numéro de version des
    extensions du processeur de commande en cours.
 
%CMDCMDLINE% - se développe en la ligne de commande originale
    qui a appelé le processeur de commande.

Reply

Marsh Posté le 12-04-2007 à 16:26:24    


C:\Users\môa>set /p plop="Savez vous planter les choux ? "
Savez vous planter les choux ? A la mode à la mode...
 
C:\Users\môa>echo %plop%
A la mode à la mode...
 
C:\Users\môa>

Reply

Marsh Posté le 12-04-2007 à 16:28:45    

Cette boucle devrai faire ce que tu veut:

Code :
  1. for /r "MonRep" %%i in (*.*) do if "%%~zi" geq "1500000000" move "MonRep\*.*" "source\*.*"


Reply

Marsh Posté le 12-04-2007 à 16:28:45   

Reply

Marsh Posté le 12-04-2007 à 16:29:22    

Tooooo much of the balle ! :love:
 


C:\Users\môa>set /p plop="Entre une expression mathématique : "
Entre une expression mathématique : 1+2*3
 
C:\Users\môa>set /a coin=%plop%
7
C:\Users\môa>echo %coin%
7


 
 
(oooops, désolé pour la polution, je me suis emporté :sweat:)


Message édité par MagicBuzz le 12-04-2007 à 16:30:24
Reply

Marsh Posté le 12-04-2007 à 16:38:32    

wackevat a écrit :

Il suffit ensuite de déterminer la taille de ce 1er fichier ;)
 
Genre :

Code :
  1. @echo off
  2. echo La taille du fichier %~1 = %~z1 octets.



 
Salut, merci c'est juste ce qu'il me faut,
mais ca ne fonctionne pas chez moi.  
Pourtant %~x1 (extension du fichier) fonctionne.  :??:  
 
Testé sous win xp pro et win server 2003

Reply

Marsh Posté le 12-04-2007 à 16:41:59    

Essaye cette boucle:
 

Code :
  1. for /r "MonRep" %%i in (*.*) do if "%%~zi" geq "1500000000" move "MonRep\*.*" "source"


Message édité par webding le 12-04-2007 à 16:44:14
Reply

Marsh Posté le 12-04-2007 à 16:56:42    

merci webding, ca fontionne. J'etais parti vers FOR /F.
une idée pour balayer uniquement les fichiers du dossier "MonRep" et pas les sous-dossiers?

Reply

Marsh Posté le 12-04-2007 à 17:01:13    

pour igniorer les sous dossier je ne pensse pas que se soit possible


Message édité par webding le 12-04-2007 à 17:01:24
Reply

Marsh Posté le 12-04-2007 à 17:17:47    

oui je vais faire un petit traitement derrière. Merci à vous tous

Reply

Marsh Posté le 12-04-2007 à 17:30:34    

%~z1 fonctionne chez moi (XP Pro SP2) -- c'est la même chose que %%~zi dans une boucle.
 
Enlève /r pour ne pas parcourir le dossier récursivement :
 
for %%i in ("MonRep\*.*" ) do ...
 
for /?
pour plus d'infos.


Message édité par wackevat le 12-04-2007 à 17:31:56
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed