Posez votre question Signaler

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

damien - Dernière réponse le 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
Lire la suite 
Réponse
+10
moins plus
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
nitneuc- 26 avril 2013 à 21:23
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
Répondre
Ajouter un commentaire
Réponse
+3
moins plus
tu peux essayer avec ca pour generer un fichier texte...
dir tondossier /s /-C >fichier.txt
Ajouter un commentaire
Réponse
+3
moins plus
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
damien- 29 juin 2007 à 15:33
génial, exactement ce qu'il me fallait.
Répondre
Ajouter un commentaire
Réponse
+1
moins plus
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]
Ajouter un commentaire
Réponse
+1
moins plus
Pourrais tu me dire quels "outils UNIX qui ont été réécris pour Windows" tu utilises?
Bye
Ajouter un commentaire
Réponse
+0
moins plus
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 8Messages 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
Répondre
dubcek 15828Messages postés lundi 15 janvier 2007Date d'inscription ContributeurStatut 3 juillet 2015 Dernière intervention - 1 août 2007 à 15:45
c'est pour que l'on charge vim : http://www.vim.org :-))
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
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.
ludo- 20 juil. 2007 à 21:16
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 !
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
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 1Messages 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
Répondre
karirovax 3223Messages postés dimanche 17 janvier 2010Date d'inscription 10 juin 2015 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 .
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
-1
moins plus
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
Ajouter un commentaire
Réponse
-1
moins plus
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.
Ajouter un commentaire
Réponse
-1
moins plus
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
Ajouter un commentaire
Ce document intitulé «  batch - DOS - taille d'un repertoire  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.