Une fonction fait cruellement défaut à Windows : la possibilité d'imprimer la liste
des fichiers d'un dossier. L'équivalent de la commande DIR de MsDos, en quelque sorte.
Les possibilités de programmation offertes par Windows 98 via Windows Scripting Host
(disponible en option pour Windows 95 sur Internet à l'adresse http://msdn.microsoft.com/scripting/default.htm?/scripting/windowshost/download/)
ou sur notre page de téléchargement, permettant néanmoins de traiter ce problème. On peut, par exemple, créer un programme
permettant de saisir le chemin d'accès d'un dossier, puis de lister ses fichiers dans un
tableaux Excel. Le programme que nous vous proposons va beaucoup plus loin.
D'une part, il s'intégre parfaitement au système et ne nécessite pas l'utilisation
de logiciels extérieurs. D'autre part, il liste les fichiers, les sous-dossiers et
imprime des statistiques (nombre d'éléments, taille ...).
Pour mettre en oeuvre, téléchargez ou recopiez le
listing ci-après dans le bloc-notes, puis enregistez-le à la racine de votre
disque dur sous le nom Oi102.vbs. Ensuite, lancez l'éditeur de registre (par
Démarrer/Exécuter/regedit), puis déroulez l'arborescence jusqu'à la clé HKEY_CLASSES_ROOT\Folder\Shell.
Dans la partie droite de l'écran, cliquez avec le bouton droit de la souris, choisissez
Nouveau, puis clé, tapez un nom (Oi102, par exemple) et confirmer par [Entrée].
Faites un double clic sur la chaîne (Défaut), et tapez &Imprimer le contenu.
Cliquez de nouveau avec le bouton droit de la souris dans la partie droite de l'écran,
choisissez Nouveau, puis clé, et saisissez command avant de confirmer. Modofiez de la
même façon la chaîne (Défaut) et entrez wscript.exe C:\Oi102.vbs %1.
Vous pouvez alors quittez l'éditeur de registreet tester la nouvelle fonction ainsi
ajoutée à Windows. Ouvrez, par exemple, votre disque dur à partir du Poste de travail,
cliquez avec le bouton droit de la souris sur le dossier Windows et choisissez la commande
Imprimer le contenu.
'Programme principal
'_________________
'Déclaration
Dim element
'Affectations
dossier = Wscript.Arguments(0)
Set shell = Wscript.CreateObject("Wscript.Shell")
Set fs = CreateObject("Scripting.FileSystemObject")
Set liste = fs.CreateTextFile("c:\liste.txt", True)
Set Fichiers = fs.GetFolder(dossier).Files
Set sous-dossiers = fs.GetFolder(dossier).Subfolders
'Ecriture de l'en-tête
liste.WriteLine("Contenu du dossier " & dossier)
liste.WriteLine("(le " & FormatDateTime(now(),vlongDate) & "
à " & Time&")")
liste.WriteLine(String(66, "_"))
liste.WriteLine()
'Traitement des sous-dossiers
eltype = "dossier"
For Each element in sous_dossiers
ligne element,eltype
nbdoss = nbdoss+1
tailldoss = tailldoss + Element.Size
Next
'Ligne vide de séparation
liste.WriteLine()
'Traitement des fichiers
eltype = "fichiers"
For Each element in fichiers
ligne element,eltype
nbfich = nbfich+1
taillfich = taillfich + element.size
Next
'Ecriture du bas de la liste et des totaux
liste.WriteLine(String(66, "_"))
liste.WriteLine()
liste.WriteLine("Total:")
If nbdoss<>0 Then liste.WriteLine(" " & nbdoss &
"dossier(s) : " & Exprime(tailldoss))
liste.WriteLine(" " & nbfich & " fichier(s) : " &
Exprime(taillfich))
liste.Close
'Impression de la liste avec Wordpad
shell.Run "wordpad /p c:\liste.txt" , Hide, 1
fs.getfile("c:\liste.txt").Delete
'Sous-programme d'écriture d'une ligne de détail
'--------------------------------------------------------
Sub ligne(element,eltype)
if eltype="fichier" Then
nom=Left(element.Name,
Len(element.Name)-4)
ext=" " &
Right(element.Name, 3)
Else
nom=element.Name
ext="<Dos>"
End If
taille = exprime(element.Size)
'Tronquer le nom si trop long
If Len(nom) > 30 Then nom = left(nom, 27) & "..."
'Ecriture des données nom, extension, taille et date/heure dans 4
colonnes distinctes
liste.Write(" " & nom & Space(30-Len(nom)))
liste.Write(" " & ext & Space(5-Len(ext)))
liste.Write(" " & Space(9-Len(taille))) &
taille
liste.Write(" " & element.DateLastModified)
liste.WriteLine()
End Sub
'Fonction de convertion de la taille en Ko ou Mo
'-----------------------------------------------------------------
Function Exprime(taille)
if taille > 1048576 Then '(supérieur à 1 Mo)
Exprime =
CStr(FormatNumber(taille/1048576,2,,,-1)) & " Mo"
Else '(Inférieure à 1 Mo)
Exprime =
CStr(FormatNumber(taille/1024,0,,,-1)) & " Ko"
End If
End Function