La propriété .Size d'un dossier est calculée à la volée. Ainsi, toutes les branches et les feuilles de cet arbre secondaire sont essentielles au succès de l'opération. Mon C: \ contient un dossier système caché « Volume Information System » que je peux obtenir le .Nom mais pas .Size de:
>> sFP = "System Volume Information"
>> If goFS.FolderExists(sFP) Then WScript.Echo goFS.GetFolder(sFP).Name
>>
System Volume Information
>> If goFS.FolderExists(sFP) Then WScript.Echo goFS.GetFolder(sFP).Size
>>
Error Number: 70
Error Description: Permission denied
J'avoue que « Autorisation refusée » n'est pas « chemin introuvable », mais il semble probable que les attributs ou les permissions de certains sous-dossiers soient à blâmer.
MISE À JOUR
Pour le test, j'ai demandé ma racine de gâcher un dossier sur ma part de linux qui est mis en correspondance comme e: \ bin. root voit:
bin
[-rwx------ eh 16] bin/dragit-ssh.sh
[lrwxrwxrwx eh 33] bin/komodo -> /home/eh/Komodo-Edit-6/bin/komodo
[drwxr-xr-x eh 4.0K] bin/pics
[-rwxr--r-- eh 6.0K] bin/pics/Thumbs.db
[-rwxr--r-- eh 20K] bin/pics/jsa.JPG
[-rwx------ root 10K] bin/pics/x
[-rwxr-xr-x eh 45] bin/rhinos.sh
[drwx------ root 4.0K] bin/rootsown
[-rwxr-xr-x root 10K] bin/rootsown/x
[-rwx------ eh 523] bin/showpath.sh
[-rwxr--r-- eh 325] bin/sp6p.sh
2 directories, 9 files
14392 /home/eh/bin/rootsown
40595 /home/eh/bin/pics
60025 /home/eh/bin
Sur linux, je suis autorisé à voir:
bin
[-rwx------ eh 16] bin/dragit-ssh.sh
[lrwxrwxrwx eh 33] bin/komodo -> /home/eh/Komodo-Edit-6/bin/komodo
[drwxr-xr-x eh 4.0K] bin/pics
[-rwxr--r-- eh 6.0K] bin/pics/Thumbs.db
[-rwxr--r-- eh 20K] bin/pics/jsa.JPG
[-rwx------ root 10K] bin/pics/x
[-rwxr-xr-x eh 45] bin/rhinos.sh
[drwx------ root 4.0K] bin/rootsown [error opening dir]
[-rwx------ eh 523] bin/showpath.sh
[-rwxr--r-- eh 325] bin/sp6p.sh
2 directories, 8 files
4096 bin/rootsown
40595 bin/pics
49729 bin
Deux faits importants: Je ne suis pas autorisé à 'regarder dans' le répertoire rootsown, donc je peux » t voir ou taille bin/rootsown/x; mais la taille de bin/pics/x n'est pas un secret, bien qu'il m'ait été interdit de le lire, de le modifier ou de l'exécuter.
VBScript:
>> sf = "e:\bin\pics"
>> WScript.Echo goFS.GetFolder(sf).Size
>>
36499
Vous pouvez obtenir le .Size du dossier contenant des fichiers désagréables.
>> sf = "e:\bin"
>> WScript.Echo goFS.GetFolder(sf).Size
>>
Error Number: 70
Error Description: Permission denied
Vous ne pouvez pas obtenir le format .Size d'un dossier contenant un sous-dossier (sub ...) méchant.
>> sf = "e:\bin\pics\rootsown"
>> WScript.Echo goFS.GetFolder(sf).Size
>>
Error Number: 76
Error Description: Path not found
vous obtenez un « chemin introuvable » erreur, lorsque vous demandez l'.Size d'un dossier méchant
Sur cette base, je suis prêt à prendre le pari de Peter. Si vous pouvez montrer que en changeant les attributs ou les permissions d'un fichier vous pouvez faire que le parent du dossier réussisse. échouer, je vais payer 10 euros, - à la prochaine sans-abri Je me rencontre.
L'humble dir:
Pour obtenir la taille d'un dossier, je voudrais d'abord essayer
dir /s e:\bin
Volume in drive E is eh
Volume Serial Number is 0ED6-233C
Directory of e:\bin
4.06.2012 18:42 <DIR> .
4.06.2012 08:04 <DIR> ..
2.01.2012 12:21 45 rhinos.sh
3.06.2012 22:55 <DIR> rootsown
3.10.2011 16:42 325 sp6p.sh
4.06.2012 19:46 <DIR> pics
1.07.2010 23:34 523 showpath.sh
8.10.2010 16:57 582 komodo
4.05.2010 12:53 16 dragit-ssh.sh
5 File(s) 1.491 bytes
Directory of e:\bin\pics
4.06.2012 19:46 <DIR> .
4.06.2012 18:42 <DIR> ..
5.08.2011 10:22 10.296 x
0.07.2008 03:44 6.144 Thumbs.db
9.06.2012 23:29 20.059 jsa.JPG
3 File(s) 36.499 bytes
Total Files Listed:
8 File(s) 37.990 bytes
6 Dir(s) 29.060.050.944 bytes free
Il semble que dir sait ce que je suis autorisé à connaître et qu'il n » t indûment perturbé par des dossiers méchants.
Un script qui utilise dir:
Option Explicit
Dim reX : Set reX = New RegExp
reX.Pattern = "Directory\s+of\s+(.+?)\r[\s\S]+?Total[\s\S]+?([.\d]+\sbytes)"
Dim oMTS : Set oMTS = reX.Execute(WScript.StdIn.ReadAll())
If 1 = oMTS.Count Then
WScript.Echo "Size of", oMTS(0).SubMatches(0), "=>", oMTS(0).SubMatches(1)
Else
WScript.Echo "Bingo!"
End If
échantillon utilisé:
dir /s e:\bin | cscript folsiz2.vbs
Size of e:\bin => 37.990 bytes
Le modèle RegExp pour SEARCHs
Directory\s+of\s+ The first "Directory of "
(.+?) capture the path of the folder, that is
the sequence of 'everything except \n' but non greedy, so
\r the first \r will not be included in the capture
[\s\S]+? non greedy sequence of 'really everything (space or non-space)'
Total until "Total" is found
[\s\S]+? advance but stop for the first
([.\d]+\sbytes) sequence of . or digits followed by " bytes", capture
that because that is the first sum after Total
ce qui se passe si vous remarquez la ligne « datafolder = oF.Size/1073741824 »? Je suppose que c'est avec le useraccount de l'utilisateur que le script s'exécute? pas de problème de sécurité? – peter
Bon point: c'est le problème. Il ne peut pas obtenir la taille de ce dossier ... toujours le débogage. (non cela ne devrait pas être un problème de sécurité, comme indiqué ci-dessus je cours dans l'administration locale) –
euh, oui c'est possible, faites-vous une cartographie à un driveletter avec un nom d'utilisateur/mot de passe en premier? Si vous accédez aux dossiers ou aux fichiers par la suite, vous pouvez avoir des problèmes de sécurité, mais en devinant à partir de votre question, je pense que c'est une carte sur le lecteur d:? pourquoi ne pas publier son vrai nom? – peter