Script VBS d'impression ou affichage d'un répertoire
depuis le menu contextuel de l'explorateur de Windows
Une boite de dialogue s'ouvre afin de permettre
la saisie de paramètres de sélection et paramètres
de la commande "dir"
Ce script est livré avec un ficher d'aide qui rappelle
la syntaxe de "dir"
Source / Exemple :
' Constantes
SW_HIDE = 0
SW_SHOWNORMAL = 1
ForReading = 1
ForWriting = 2
' Tableau de correpsondance OEM->ANSI
' car la commande dir génère de l'OEM
Dim oem
oem=array( _
"00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F", _
"10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F", _
"20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F", _
"30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F", _
"40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F", _
"50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F", _
"60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F", _
"70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F", _
"C7","FC","E9","E2","E4","E0","E5","E7","EA","EB","E8","EF","EE","EC","C4","C5", _
"C9","E6","C6","F4","F6","F2","FB","F9","FF","D6","DC","F8","A3","D8","D7","83", _
"E1","ED","F3","FA","F1","D1","AA","BA","BF","AE","AC","BD","BC","A1","AB","BB", _
"A6","A6","A6","A6","A6","C1","C2","C0","A9","A6","A6","2B","2B","A2","A5","2B", _
"2B","2D","2D","2B","2D","2B","E3","C3","2B","2B","2D","2D","A6","2D","2B","A4", _
"F0","D0","CA","CB","C8","69","CD","CE","CF","2B","2B","A6","5F","A6","CC","AF", _
"D3","DF","D4","D2","F5","D5","B5","FE","DE","DA","DB","D9","FD","DD","AF","B4", _
"AD","B1","3D","BE","B6","A7","F7","B8","B0","A8","B7","B9","B3","B2","A6","A0")
Dim ansi
ansi=array( _
"00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F", _
"10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F", _
"20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F", _
"30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F", _
"40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F", _
"50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F", _
"60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F", _
"70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F", _
"5F","5F","27","9F","22","2E","C5","CE","5E","25","53","3C","4F","5F","5A","5F", _
"5F","27","27","22","22","07","2D","2D","7E","54","73","3E","6F","5F","7A","59", _
"FF","AD","BD","9C","CF","BE","DD","F5","F9","B8","A6","AE","AA","F0","A9","EE", _
"F8","F1","FD","FC","EF","E6","F4","FA","F7","FB","A7","AF","AC","AB","F3","A8", _
"B7","B5","B6","C7","8E","8F","92","80","D4","90","D2","D3","DE","D6","D7","D8", _
"D1","A5","E3","E0","E2","E5","99","9E","9D","EB","E9","EA","9A","ED","E8","E1", _
"85","A0","83","C6","84","86","91","87","8A","82","88","89","8D","A1","8C","8B", _
"D0","A4","95","A2","93","E4","94","F6","9B","97","A3","96","81","EC","E7","98")
' Variables
Dim shell, args, fso, dirtemp, fictemp,ficoem, fictxt
Set shell = WScript.CreateObject("WScript.Shell")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set args = Wscript.Arguments
'
Script=Lcase(Wscript.ScriptFullName)
HelpFile=Left(Script,len(script)-3) & "hlp"
If args.count=0 Then
' Auto-installation
Key="HKEY_CLASSES_ROOT\folder\shell\printdir\"
shell.RegWrite Key,"Impression du contenu du répertoire"
Command="wscript """ & Script & """ ""%L"""
shell.RegWrite Key & "command\",Command
MsgBox "Script "& Script &" installé", vbInformation, "Exécution dans une console"
WScript.quit
end if
curdir=args(0)
If right(curdir,1)="\" Then curdir=left(curdir,len(curdir)-1)
Prompt="Indiquer le répertoire à imprimer, suivi du" & vbcrlf & _
"critère de sélection éventuel, ainsi que des" & vbcrlf & _
"commutateurs habituels de la commande " & chr(34) & "dir" & chr(34) & "." _
& vbcrlf & vbcrlf & _
"(Appuyer sur le bouton d'aide pour plus de détails)"
critere=InputBox(Prompt, "Impression de contenu de répertoire", _
curdir & "\*.*",,,helpfile,1)
If Len(critere)=0 Then Wscript.quit
p=InStr(1,critere,"/",vbTextCompare)
If p>0 then
switch=mid(critere,p)
critere=trim(left(critere,p-1))
Else
switch=""
End If
' Création de nom de fichiers dans le répertoire temporaire
Set dirtemp = fso.GetSpecialFolder(2)
nomcmd = dirtemp & "\printdir.bat"
nomoem = dirtemp & "\printdir.oem"
nomtxt = dirtemp & "\printdir.txt"
' Fichier batch exécutant la commande "dir"
' avec sortie redirigée vers un fichier
Set ficTemp = fso.CreateTextFile(nomcmd)
fictemp.writeline "@echo off"
fictemp.writeline ansi2oem("dir """ & critere & """ " & switch & " > " & nomoem)
ficTemp.close
shell.Run nomcmd, SW_HIDE,true
' Retraitement du fichier résultats
' Conversion OEM -> ANSI
Set ficoem=fso.OpenTextFile(nomoem, ForReading)
Set fictxt=fso.OpenTextFile(nomtxt, ForWriting,true)
While not ficoem.AtEndOfStream
oldline=ficoem.ReadLine
newline=""
For i = 1 To len(oldline)
oldc=asc(mid(oldline,i,1))
newc=oem(oldc)
newline=newline & chr(hextobyte(newc))
Next
fictxt.WriteLine newline
Wend
fictxt.close
ficoem.close
prompt="Le contenu du répertoire a été stocké dans" & VBCRLF & _
"le fichier " & nomtxt & VBCRLF & _
"Appuyer sur :" & VBCRLF & _
" OUI pour l'imprimer" & VBCRLF & _
" NON pour l'ouvrir avec le bloc-notes"
rep=MsgBox(prompt, vbYesNo + vbQuestion, curdir)
If rep=vbYes Then
commutateur=" /p "
show=SW_HIDE
else
commutateur=" "
show=SW_SHOWNORMAL
end if
' Impression ou affichage du fichier à l'aide du bloc-notes
commande=shell.ExpandEnvironmentStrings("%windir%\notepad.exe" & commutateur & chr(34) & nomtxt & chr(34))
shell.Run commande, show, true
Wscript.quit
' Utilitaires de conversion hexadécimale
' -------------------------------------
Function hextobyte(s)
c1=Left(s,1)
c2=Right(s,1)
hextobyte=hextobin(c1)*16+hextobin(c2)
End Function
' -------------------------------------
Function hextobin(c)
Select Case c
Case "0","1","2","3","4","5","6","7","8","9"
hextobin=asc(c)-asc("0")
Case else
hextobin=asc(c)-asc("A")+10
End Select
End Function
' -------------------------------------
Function ansi2oem(oldline)
newline=""
For i = 1 To len(oldline)
oldc=asc(mid(oldline,i,1))
newc=ansi(oldc)
newline=newline & chr(hextobyte(newc))
Next
ansi2oem=newline
end function
' -------------------------------------
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 et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.