juin
2011
C’est pas toujours malin ni très folichon de réinventer le fil à couper la roue tiède, lors de la mise en service de scripts basiques et utilitaires…
Cela dit, il est commode d’avoir sous la main les briques principales, quelques grandes fonctions très récurrentes (manips de fichiers, etc) en vbs
Grosso modo, le genre de manipulations qui font apprécier powershell…
Envoi de mail
msg.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
msg.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.###.###" '<==
msg.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
msg.Configuration.Fields.Update
msg.From="expediteur@###.fr" ' <==
msg.To="destinataire@###.fr" '<==
msg.Subject="Sujet"
msg.TextBody="Corps du texte..." 'la propriété "addattachment" peut etre utilisée plusieurs fois...
msg.AddAttachment "c:\xXXX.xls" '<==
msg.MIMEFormatted=False
msg.Send
Wscript.echo "Message Envoyé par " & msg.From & " à " & msg.to
LECTURE d’un fichier
Dim fso
'instanciation
Set FSO = CreateObject("Scripting.FileSystemObject")
'on instance le fichier texte
Set Ftxt = FSO.OpenTextFile("chemin")
'on parcourt chaque ligne du fichier texte
Do While Not Ftxt.AtEndOfStream
Variable = Ftxt.Readline
'...<== rajouter le code de traitement
Loop
Ftxt.Close
ECRITURE dans un fichier
Dim fso
'instanciation
Set FSO = CreateObject("Scripting.FileSystemObject")
'on instance le fichier texte dans lequel on veut ecrire
Set Ftxt = FSO.createTextFile("chemin",true) 'true=ecrase
'On ecrit ce que l'on veut dans le fichier
Ftxt.writeline ("All the work and no play...")
Ftxt.Close
DEPLACER un fichier
Dim fso
'instanciation
Set FSO = CreateObject("Scripting.FileSystemObject")
'Déplacement du fichier
Set Ftxt = fso.GetFile("cheminsource")
Ftxt.move("monchemindestination") 'emplacement destination
COPIER un fichier
Dim fso
'instanciation
Set FSO = CreateObject("Scripting.FileSystemObject")
'Copie du fichier
Set Ftxt = fso.GetFile("cheminsource")
'Fichier origine
Ftxt.copy("chemindestination") 'emplacement destination
SUPPRIMER un fichier
Dim fso
'instanciation
Set FSO = CreateObject("Scripting.FileSystemObject")
'Suppression du fichier
Set Ftxt = fso.GetFile("cheminsource")
'Fichier origine
Ftxt.delete
LISTER les fichiers d’un dossier
Méthode pas forcement la plus efficace, face à un « cmd /k dir *.bat », mais ça dépend de l’objectif…
Const ctePourEcrire = 2
Const ctePourAjouter = 8
Dim objFSO, objDossier, objFichier, objResultat
Dim Repertoire, NomFichierTxt
On Error Resume Next
Repertoire = "\\XXXX\scripts"
NomFichierTxt = "Resultat.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDossier = objFSO.GetFolder(Repertoire)
Set objResultat = objFSO.CreateTextFile(("c:\" & NomFichierTxt),ctePourEcrire)
If (objDossier.Files.Count > 0) Then
For Each objFichier In objDossier.Files
If (InStr(1, objFichier.Name, ".bat", 1) > 0) Then
objResultat.WriteLine objFichier.Name
End If
Next
End If
objResultat.Close
Set objResultat = Nothing
Set objDossier = Nothing
Set objFSO = Nothing
CONCATENATION de fichiers d’un dossier
On error resume next
Dim fso,f,fd,txt,Dest
Const ForAppending=8, ForReading=1
critere = « BAT » ‘à mettre en majuscules, pour éviter les erreurs
dossier_cible = »\\XXXXscripts »
fic_cible= « C:\resultats.txt »
Set fso = CreateObject(« Scripting.FileSystemObject »)
set fd=fso.GetFolder(dossier_cible)
Set Dest=fso.OpenTextFile(fic_cible,ForAppending,true)
for each f in fd.files
If Ucase(Mid(f.Name,len(f.name)-2,3))=critere Then
Set fic=fso.OpenTextFile(fd & « \ » & f.Name,ForReading)
txt=fic.ReadAll
fic.close
Dest.Write f.name & txt & vbcrlf ‘afficher le nom du fichier & son contenu
‘ Dest.Write txt ‘afficher seulement le contenu du fichier
End if
next
Dest.Close
LECTURE d’un fichier CSV
Ne serait-ce que pour ne plus avoir besoin de bricoler ce genre de script, se mettre à powershell…
Script trouvé quelque part, gloire à son auteur !
Set Ftxt = FSO.OpenTextFile("liste.csv")
Do While Not Ftxt.AtEndOfStream
MaVariable = Ftxt.Readline
For Each strItem In CSVParse(mavariable)
' wscript.Echo strItem ' affiche le contenu du fichier csv, champs apres champs ...
'... inserer le code ici
Next
Loop
Ftxt.Close
Function CSVParse(ByVal strLine)
Dim arrFields
Dim blnIgnore
Dim intFieldCount
Dim intCursor
Dim intStart
Dim strChar
Dim strValue
Const QUOTE = """"
Const QUOTE2 = """"""
If (Len(Trim(strLine)) = 0) then
CSVParse = Array()
Exit Function
End If
blnIgnore = False
intFieldCount = 0
intStart = 1
arrFields = Array()
strLine = strLine & ","
For intCursor = 1 To Len(strLine)
strChar = Mid(strLine, intCursor, 1)
Select Case strChar
Case QUOTE
blnIgnore = Not blnIgnore
Case ","
If Not blnIgnore Then
ReDim Preserve arrFields(intFieldCount)
If (intCursor - intStart > 0) Then
strValue = Mid(strLine, intStart, _
intCursor - intStart)
If (Left(strValue, 1) = QUOTE) Then
arrFields(intFieldCount) = _
Replace(Mid(strValue, 2, _
Len(strValue) - 2), QUOTE2, QUOTE)
Else
arrFields(intFieldCount) = strValue
End If
Else
arrFields(intFieldCount) = Empty
End If
intFieldCount = intFieldCount + 1
intStart = intCursor + 1
End If
End Select
Next
CSVParse = arrFields
End Function