A voir également:
- Commande dos taille dossier
- Taille répertoire windows commande - Meilleures réponses
- Commande dos taille fichier - Meilleures réponses
- Batch - DOS - taille d'un repertoire ✓ - Forum - Programmation
- Commande Dir /s - Forum - Windows
- Dos taille d'un répertoire et de ces sous répertoire - Forum - Windows
- Commande dos supprimer dossier forcer - Forum - Windows
- Commande dos supprimer dossier ✓ - Forum - Autoit / batch
12 réponses
thejeff
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
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
ludo
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
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
grofwa
- Messages postés
- 440
- Date d'inscription
- jeudi 24 juillet 2003
- Statut
- Membre
- Dernière intervention
- 21 juillet 2006
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]
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]
dubcek
- Messages postés
- 18240
- Date d'inscription
- lundi 15 janvier 2007
- Statut
- Contributeur
- Dernière intervention
- 30 novembre 2020
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
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
dubcek
- Messages postés
- 18240
- Date d'inscription
- lundi 15 janvier 2007
- Statut
- Contributeur
- Dernière intervention
- 30 novembre 2020
c'est pour que l'on charge vim : https://www.vim.org/ :-))
Juntao
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.
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
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 !
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
- Messages postés
- 2
- Date d'inscription
- mercredi 1 août 2007
- Statut
- Membre
- Dernière intervention
- 1 août 2007
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
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
- Messages postés
- 1
- Date d'inscription
- jeudi 9 août 2007
- Statut
- Membre
- Dernière intervention
- 9 août 2007
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
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
- Messages postés
- 3211
- Date d'inscription
- dimanche 17 janvier 2010
- Statut
- Membre
- Dernière intervention
- 22 juin 2016
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 .
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 .
batchman
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
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
- Messages postés
- 18240
- Date d'inscription
- lundi 15 janvier 2007
- Statut
- Contributeur
- Dernière intervention
- 30 novembre 2020
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
for /r %userprofile% %%i in (*.*) do set /a p1=!p1!+"%%~zI"/1000
max-k
- Messages postés
- 2
- Date d'inscription
- mercredi 1 août 2007
- Statut
- Membre
- Dernière intervention
- 1 août 2007
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.
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.
Attention tout de même pour ceux qui copieraient le script tel quel à supprimer les espaces en bout de ligne