Histoire de vérifier que j'avais à peu près compris certaines choses,
j'ai réalisé une petite procédure à incorporer dans un batch pour
récupérer la taille, le nb de fichiers et de sous-dossiers d'un
répertoire :
voilà ce que ça donne plus bas
( on transmet à la procédure le chemin du répertoire et les noms des
variables à remplir)
Mes premiers tests semblaient nickels mais soudain ...
j'ai vu des pb...
J'ai mis un instant à comprendre :
1. La taille totale en octets donnée par DIR /S ( avant-dernière
ligne)
peut dépasser le fatidique 2 147 483 647
et alors set /a échoue ...
Je pourrais bien sûr, emporté par cet élan, mettre au point
des procédure de calculs en "haute précision" en reprogrammant
mais si vous avez une idée moins brutale, je suis client.
2. Le nb de répertoires indiqué par la dernière ligne de DIR /S
est bidon car les . et .. présents à chaque niveau sont comptés.
Il faudrait trouver une formule qui donnera le bon nb de répertoires
en fonction du nombre annoncé...
Si qqun en connait une, ça m'évitera d'y réfléchir ;o)
Ma conjecture est :
NBREEL= ( NBANNONCE - 2 )/3
mais peut-être les différentes combinaisons font qu'une formule est
impossible ?
Auquel cas il faudra faire une nouvelle boucle for
avec une variable compteur ( merci !Machin! )
qui compte les <REP> qui ne sont ni "." ni ".."
3. Par ailleurs, j'ai noté que le nb d'octets obtenu via DIR /S
diffère parfois très sensiblement du nb d'octets
obtenu par "clic droit > propriétés"
est-ce grave docteur ?
Bien amicalement,
HB
==================================
SCRIPT ===========================
Bien sûr les lignes avec FOR sont longues...
et finissent à la parenthèse ouvrante après le DO
==================================
Set REP=F:\Temp
Call :ANALYSEREP "%REP%" "T" "N" "R"
@CLS
@Echo La taille de %REP% est d'environ %T% Mo
@Echo %REP% contient %N% fichiers.
@Echo %REP% contient %R% r,pertoires.
@Echo.
@Pause
:: Suite du code
GOTO :LAFIN
:: ================================
:ANALYSEREP
for /F "tokens=1,3 delims= " %%a in ('dir /S /-C "%~1" 2^>nul ^|
findstr /E /L "octets" ') do (
set TAILLE=%%b
Set NBF=%%a
)
for /F "tokens=1 delims= " %%a in ('dir /S /-C "%~1" 2^>nul ^| findstr
/E /L "octets libres" ') do (
set NBR=%%a
)
set /a TKO=%TAILLE%/1024
set /a TMO=100*%TKO%/1024
set %~2=%TMO:~0,-2%,%TMO:~-2%
set %~3=%NBF%
set %~4=%NBR%
set TMO=
Set TKO=
Set TAILLE=
Set NBF=
Set NBR=
goto :eof
:: ================================
:LAFIN
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gilles LAURENT [MVP]
"Lotre" wrote:
Bonsoir,
Bonjour,
[...]
Mes premiers tests semblaient nickels mais soudain ... j'ai vu des pb... J'ai mis un instant à comprendre :
[...]
Les limites du batch malheureusement. Il existe toutefois des moyens de contournements à vos problèmes en revanche je pense que l'utilisation d'un langage plus évolué tel que VBScript ou PowerShell serait préférable et surtout plus adapté à ce genre de chose.
1- Pour le set/a, il faudrait construire une valeur 64bits (soit deux 32bits signés) 2- Pour le nombre réel de dossier, la formule semble correcte 3- Normalement non (taille et non taille sur le disque)
Ci-dessous la version VBScript :
--- GetFolderInfo.vbs --- Const sRootFolder="D:Test" Set oFs=CreateObject("Scripting.FileSystemObject") Set oRootFolder=oFs.GetFolder(sRootFolder) nFileCount=0: nFolderCount=0
Sub GetSubFolders(oFolder) nFileCount=nFileCount+oFolder.Files.Count For Each oSubFolder in oFolder.SubFolders nFolderCount=nFolderCount+1 GetSubFolders oSubFolder Next End Sub --- GetFolderInfo.vbs ---
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
"Lotre" wrote:
Bonsoir,
Bonjour,
[...]
Mes premiers tests semblaient nickels mais soudain ...
j'ai vu des pb...
J'ai mis un instant à comprendre :
[...]
Les limites du batch malheureusement. Il existe toutefois des moyens de
contournements à vos problèmes en revanche je pense que l'utilisation d'un
langage plus évolué tel que VBScript ou PowerShell serait préférable et
surtout plus adapté à ce genre de chose.
1- Pour le set/a, il faudrait construire une valeur 64bits (soit deux 32bits
signés)
2- Pour le nombre réel de dossier, la formule semble correcte
3- Normalement non (taille et non taille sur le disque)
Ci-dessous la version VBScript :
--- GetFolderInfo.vbs ---
Const sRootFolder="D:Test"
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oRootFolder=oFs.GetFolder(sRootFolder)
nFileCount=0: nFolderCount=0
Sub GetSubFolders(oFolder)
nFileCount=nFileCount+oFolder.Files.Count
For Each oSubFolder in oFolder.SubFolders
nFolderCount=nFolderCount+1
GetSubFolders oSubFolder
Next
End Sub
--- GetFolderInfo.vbs ---
--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Mes premiers tests semblaient nickels mais soudain ... j'ai vu des pb... J'ai mis un instant à comprendre :
[...]
Les limites du batch malheureusement. Il existe toutefois des moyens de contournements à vos problèmes en revanche je pense que l'utilisation d'un langage plus évolué tel que VBScript ou PowerShell serait préférable et surtout plus adapté à ce genre de chose.
1- Pour le set/a, il faudrait construire une valeur 64bits (soit deux 32bits signés) 2- Pour le nombre réel de dossier, la formule semble correcte 3- Normalement non (taille et non taille sur le disque)
Ci-dessous la version VBScript :
--- GetFolderInfo.vbs --- Const sRootFolder="D:Test" Set oFs=CreateObject("Scripting.FileSystemObject") Set oRootFolder=oFs.GetFolder(sRootFolder) nFileCount=0: nFolderCount=0
Sub GetSubFolders(oFolder) nFileCount=nFileCount+oFolder.Files.Count For Each oSubFolder in oFolder.SubFolders nFolderCount=nFolderCount+1 GetSubFolders oSubFolder Next End Sub --- GetFolderInfo.vbs ---
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
Gilles LAURENT [MVP]
Bonjour,
Et la version PowerShell :
$content=dir D:Test -r "$(($content | measure-object -prop length -sum).sum) octets" "$(($content | where {!$_.PSIsContainer}).count) Fichiers" "$(($content | where {$_.PSIsContainer}).count) Dossiers"
AMHA, il est préférable d'investir dans PowerShell. C'est le langage d'avenir dédié à l'administration des plateformes Windows. VBScript a encore de bons jours devant lui ... mais avec l'arrivée de Windows 7, la donne risque de changer, PowerShell étant maintenant intégré au système d'exploitation tout comme dans Windows Server 2008 ! Encore faut-il être en mesure de migrer son parc ;-)
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
Bonjour,
Et la version PowerShell :
$content=dir D:Test -r
"$(($content | measure-object -prop length -sum).sum) octets"
"$(($content | where {!$_.PSIsContainer}).count) Fichiers"
"$(($content | where {$_.PSIsContainer}).count) Dossiers"
AMHA, il est préférable d'investir dans PowerShell. C'est le langage
d'avenir dédié à l'administration des plateformes Windows. VBScript a encore
de bons jours devant lui ... mais avec l'arrivée de Windows 7, la donne
risque de changer, PowerShell étant maintenant intégré au système
d'exploitation tout comme dans Windows Server 2008 ! Encore faut-il être en
mesure de migrer son parc ;-)
--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
$content=dir D:Test -r "$(($content | measure-object -prop length -sum).sum) octets" "$(($content | where {!$_.PSIsContainer}).count) Fichiers" "$(($content | where {$_.PSIsContainer}).count) Dossiers"
AMHA, il est préférable d'investir dans PowerShell. C'est le langage d'avenir dédié à l'administration des plateformes Windows. VBScript a encore de bons jours devant lui ... mais avec l'arrivée de Windows 7, la donne risque de changer, PowerShell étant maintenant intégré au système d'exploitation tout comme dans Windows Server 2008 ! Encore faut-il être en mesure de migrer son parc ;-)
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
Méta-MCI \(MVP\)
Bonjour !
Je suis en clientèle, et assez occupé. Mais, je prends une minute pour répondre. D'abord, Gilles Laurent a raison de souligner les limites des batchs. On passe souvent beaucoup de temps à les contourner. Ensuite, pour afficher les tailles sans séparateurs de milliers, DIR est équipé de l'options /-C ; sous mon Vista favori, cela fonctionne bien. Pour compter les répertoires, j'utilise Robocopy : robocopy %cd% C: /IA:R /S /E /L /NFL /NJH /NDL (le /L empêche la copie de se faire, elle est simulée, et seule la liste est affichée)
@-salutations -- Michel Claveau
Bonjour !
Je suis en clientèle, et assez occupé.
Mais, je prends une minute pour répondre.
D'abord, Gilles Laurent a raison de souligner les limites des batchs. On
passe souvent beaucoup de temps à les contourner.
Ensuite, pour afficher les tailles sans séparateurs de milliers, DIR est
équipé de l'options /-C ; sous mon Vista favori, cela fonctionne bien.
Pour compter les répertoires, j'utilise Robocopy :
robocopy %cd% C: /IA:R /S /E /L /NFL /NJH /NDL
(le /L empêche la copie de se faire, elle est simulée, et seule la
liste est affichée)
Je suis en clientèle, et assez occupé. Mais, je prends une minute pour répondre. D'abord, Gilles Laurent a raison de souligner les limites des batchs. On passe souvent beaucoup de temps à les contourner. Ensuite, pour afficher les tailles sans séparateurs de milliers, DIR est équipé de l'options /-C ; sous mon Vista favori, cela fonctionne bien. Pour compter les répertoires, j'utilise Robocopy : robocopy %cd% C: /IA:R /S /E /L /NFL /NJH /NDL (le /L empêche la copie de se faire, elle est simulée, et seule la liste est affichée)
@-salutations -- Michel Claveau
Gilles LAURENT [MVP]
"Lotre" a écrit dans le message de news:% | Bonsoir,
Bonsoir,
[...] | 1. La taille totale en octets donnée par DIR /S ( avant-dernière | ligne) | peut dépasser le fatidique 2 147 483 647 | et alors set /a échoue ... [...]
Je viens concevoir l'outil DynSetEnv (support des pipes, arithmétique sur 64 bits et propagation dynamique des variables dans les environnements des processus parents). L'article se situe ici : http://glsft.free.fr/index.php?option=com_content&task=view&idg&Itemid(
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
"Lotre" <moi@pas.la.ici> a écrit dans le message de
news:%236vrQEsbJHA.4072@TK2MSFTNGP02.phx.gbl
| Bonsoir,
Bonsoir,
[...]
| 1. La taille totale en octets donnée par DIR /S ( avant-dernière
| ligne)
| peut dépasser le fatidique 2 147 483 647
| et alors set /a échoue ...
[...]
Je viens concevoir l'outil DynSetEnv (support des pipes, arithmétique
sur 64 bits et propagation dynamique des variables dans les
environnements des processus parents). L'article se situe ici :
http://glsft.free.fr/index.php?option=com_content&task=view&idg&Itemid(
--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
"Lotre" a écrit dans le message de news:% | Bonsoir,
Bonsoir,
[...] | 1. La taille totale en octets donnée par DIR /S ( avant-dernière | ligne) | peut dépasser le fatidique 2 147 483 647 | et alors set /a échoue ... [...]
Je viens concevoir l'outil DynSetEnv (support des pipes, arithmétique sur 64 bits et propagation dynamique des variables dans les environnements des processus parents). L'article se situe ici : http://glsft.free.fr/index.php?option=com_content&task=view&idg&Itemid(
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
Lotre
Gilles LAURENT [MVP] wrote:
"Lotre" a écrit dans le message de news:%
Bonsoir,
[...]
Je viens concevoir l'outil DynSetEnv (support des pipes, arithmétique sur 64 bits et propagation dynamique des variables dans les environnements des processus parents). L'article se situe ici : http://glsft.free.fr/index.php?option=com_content&task=view&idg&Itemid(
Mazette,
je vais regarder cet outil qui m'a l'air bien beau
A+
HB
Gilles LAURENT [MVP] wrote:
"Lotre" <moi@pas.la.ici> a écrit dans le message de
news:%236vrQEsbJHA.4072@TK2MSFTNGP02.phx.gbl
Bonsoir,
[...]
Je viens concevoir l'outil DynSetEnv (support des pipes,
arithmétique
sur 64 bits et propagation dynamique des variables dans les
environnements des processus parents). L'article se situe ici :
http://glsft.free.fr/index.php?option=com_content&task=view&idg&Itemid(
Mazette,
je vais regarder cet outil qui m'a l'air bien beau
Je viens concevoir l'outil DynSetEnv (support des pipes, arithmétique sur 64 bits et propagation dynamique des variables dans les environnements des processus parents). L'article se situe ici : http://glsft.free.fr/index.php?option=com_content&task=view&idg&Itemid(
Mazette,
je vais regarder cet outil qui m'a l'air bien beau