Menu

Batch - DOS - taille d'un repertoire [Résolu/Fermé]

damien - 8 janv. 2004 à 18:31 - Dernière réponse :  nitneuc
- 26 avril 2013 à 21:23
Bonjour,
Je suis en train de faire un petit batch pour automatiser la sauvegarde de mes données. Je cherche une commande qui me permette de recuperer la taille d'un repertoire. Sur Unix, il existe la commande du, mais avec le DOS...nada. Quelqu'un connait il une commande ou un script qui le fasse?
Bye

Damien
Afficher la suite 

20 réponses

+10
Utile
1
bonjour,
et sa pour la taille du dossier:

@echo off

rem *******************************************************************
rem donne la taille en Mo d'un dossier ex 345363345
rem *******************************************************************

set DISK=c:\windows\
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=3 delims= " %%a in ('dir /S "%DISK%" 2^>nul ^| findstr /E /L "octets" ') do (set TAILLE=%%a)
for /F "tokens=1,2,3* delims=ÿ" %%a in ("%TAILLE%") do (
set /a TAILE_GO=%%a%%b%%c*10/10485
echo !TAILE_GO!
)
endlocal
goto :eof
exit
Cette réponse vous a-t-elle aidé ?  
Très bien ça fonctionne ! merci

Attention tout de même pour ceux qui copieraient le script tel quel à supprimer les espaces en bout de ligne
+4
Utile
tu peux essayer avec ca pour generer un fichier texte...
dir tondossier /s /-C >fichier.txt
+3
Utile
2
voila comment je fais :

set p1=0
for /r C:\monrepertoire %%i in (*.*) do set /a p1=!p1!+%%~zi/1000
echo %p1%

"/r C:\monrepertoire" indique à "FOR" de travailler en recursif sur tous les sous repertoires à partir de C:\monrepertoire .

il recherche tous les fichiers du type *.*
"set /a" permet de sommer la taille des fichiers (%%~zi) , je divise par 1000 sinon c'est trop gros pour lui.

remarquer les point d'exlamation !! plutot que les %% . ce sont des expansion retardée de variables (voir set /?)

ATTENTION !! ca ne marche que si les expansion retardée de variables sont ACTIVEES !!!! (pas par defaut) (j'ai galéré pour trouver ca !!)

il faut creer un 2éme batch qui appele le premier (j'ai pas trouver comment faire sans)

dans deux.bat :
cmd /v:on /c premier.bat

"/v:on " active les expansion retardée

y a plu qu'a lancer deux.bat
génial, exactement ce qu'il me fallait.
merci beaucoup
grofwa 447 Messages postés jeudi 24 juillet 2003Date d'inscription 21 juillet 2006 Dernière intervention - 9 janv. 2004 à 09:33
+1
Utile
Salut,

Personnellement, pour du scripting un peu plus fin, j'utilise des outils UNIX qui ont été réécris pour Windows. Du coup, je peux faire des du, ls et awk bien utiles.
En cherchant un peu sur le web, tu trouveras ton bonheur !

Michael.

Ne vous souciez pas de n'être pas remarqué ; cherchez 
plutôt à faire quelque chose de remarquable [Confucius]
+1
Utile
Pourrais tu me dire quels "outils UNIX qui ont été réécris pour Windows" tu utilises?
Bye
dubcek 17397 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 15 avril 2018 Dernière intervention - 27 mai 2007 à 16:16
0
Utile
2
Par exemple : cygwin

Cygwin est un environnement UNIX pour Windows composé:

* d'un shell Unix
* d'une librairie dynamique (DLL) chargée de fournir une couche d'émulation Unix pour le système Windows
* d'un ensemble de librairies, sources et exécutables adaptés à Cygwin et prêt à l'emploi
ManHack 8 Messages postés mardi 31 juillet 2007Date d'inscription 4 août 2007 Dernière intervention - 1 août 2007 à 15:29
waw génial merci! Par contre pas de VI par default est un outrage :p
dubcek 17397 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 15 avril 2018 Dernière intervention - 1 août 2007 à 15:45
c'est pour que l'on charge vim : http://www.vim.org :-))
0
Utile
1
Salut,

Merci ludo pour cette explication claire et concise, cependant j'aurais 2 questions :
- Pourquoi ne pas avoir utiliser l'opérateur += (p1+=...)
- Le fait de diviser la taille des fichiers par 1000, c'est pour obtenir des Ko ?

Merci par avance pour tes réponses

J.
en fait j'ai fait au plus vite, en regardant l'exemple de "SET /?"
je ne sais pas si ca marche avec += (c'est de la mise en forme , non?)

j'ai divisé par 1000 car chez moi, si je ne fait pas ca, le calcul final est inexacte.
pourquoi ? je n'en sais rien !!! (je suppose que ca donne un trop grand nombre (1go=1000000000octet).
si ca marche pour toi dis le moi.

une autre astuce tant que j'y suis :
si on veut la taille en Mo (megas octet) comme indiqué dans les propriétés d'un fichier,
il faut diviser par 1048 (et pas 1024 !! ) au lieu de 1000.

bon script a tous !
max-k 2 Messages postés mercredi 1 août 2007Date d'inscription 1 août 2007 Dernière intervention - 1 août 2007 à 14:45
0
Utile
2
Bonjour à tous, je voudrai utiliser ce script pour connaitre la taille du profil de l'utilisateur courant mais ca ne semble pas fonctionner quand je fais :

for /r %userprofile% %%i in (*.*) do set /a p1=!p1!+%%~zi/1000

le script se plante tout seul avec uin petite message genre : "ande était inattendue"

Quelqu'un aurai-t-il une idée ??

Merci d'avance
harros 1 Messages postés jeudi 9 août 2007Date d'inscription 9 août 2007 Dernière intervention - 9 août 2007 à 07:57
batch - DOS - taille d'un repertoire

Bonjour,

Je n'ai que recopié les exemples ci-dessus et sur un poste en W2K cela fonctionne


Contenu du fichier de commandes Taille-Dossier.Cmd

@Echo Off
Rem ATTENTION !! Cela ne marche que si les expansions retardées sont ACTIVEES
Rem Voila comment je fais :

Set P1=0
Set P2=0
Set Dossier=%1
Rem "/R C:\monrepertoire" indique à "FOR" de travailler en récursif.
Rem Il recherche tous les fichiers de type *.*
Rem "set /A" permet de sommer la taille des fichiers (%%~zi)
Rem et division par 1048 sinon c'est trop gros pour lui.
Rem Remarquez les point d'exlamation !! plutot que les %% autour de P1,
Rem ce sont des expansion retardée de variables (voir set /?)
For /R %Dossier% %%I In (*.*) Do Set /A P1=!P1!+%%~ZI/1048
For /R "%UserProfile%" %%I In (*.*) Do Set /A P2=!P2!+%%~ZI/1048
Echo Le dossier %Dossier% contient %P1%Koctets
Echo Le profile de l'utilisateur %UserProfile% contient %P2%Koctets

Commande passée :
Taille-Dossier.Cmd c:\winnt

Résultat affiché :
Le dossier c:\winnt contient 3571120Koctets
Le profile de l'utilisateur C:\Documents and Settings\Administrateur contient 64887Koctets
karirovax 3225 Messages postés dimanche 17 janvier 2010Date d'inscription 22 juin 2016 Dernière intervention - 18 janv. 2010 à 16:22
salut max-k :o)
essayer au "%userprofile%" au lieu de %userprofile% car ce dernier est - c:\Documents and Setting\-----\ -
vous voyez que entre Documents et Setting il y a un espace ; et le DOS ne traite pas les tabulation
j'attend ta réponse ..... merci .
0
Utile
pour active les expansions retardées

setlocal ENABLEDELAYEDEXPANSION

donc l'exemple sera

@Echo Off

setlocal ENABLEDELAYEDEXPANSION

Set P1=0
Set Dossier=%1
For /R %Dossier% %%I In (*.*) Do Set /A P1=!P1!+%%~ZI/1048
Echo Le dossier %Dossier% contient %P1%Koctets




pour le lancer exemple
enregistrer le fichier sous le nom Taille-Dossier.Cmd

Taille-Dossier.Cmd c:\windows
dubcek 17397 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 15 avril 2018 Dernière intervention - 1 août 2007 à 15:11
-1
Utile
Il doit y avoir un nom de fichier contenant un espace, mettre des guillemets:
for /r %userprofile% %%i in (*.*) do set /a p1=!p1!+"%%~zI"/1000
max-k 2 Messages postés mercredi 1 août 2007Date d'inscription 1 août 2007 Dernière intervention - 1 août 2007 à 15:59
-1
Utile
malheureusement il n'y a aucun changement.

J'ai suivi la piste de VbScript mais là aussi il y a un os :

Dim fileObject, file

Set WshShell = WScript.CreateObject("WScript.Shell")

Set WshSysEnv = WshShell.Environment("SYSTEM")

Set UserProfile = WshSysEnv("USERPROFILE")

Set fileObject = CreateObject("Scripting.FileSystemObject")

Set file = fileObject.GetFolder("UserProfile")

MsgBox file.name & " - " & file.size & "octets."

Visiblement, ça bloque à la ligne 7.
J'ai l'impression que c'est ma manière de récupérer la valeur de %USERPROFILE% dans une variable UserProfile qui ne lui plait pas.
lhnjanji 1 Messages postés mardi 26 février 2008Date d'inscription 26 février 2008 Dernière intervention - 26 févr. 2008 à 11:43
-1
Utile
Bonjour,

je voudrait créer un script sous windows qui teste la tail d'un fichier avant de l'intégrer dans un répertoire


Merci d'avance