Fichiers dans un tableau VBS
Résolu
delawood
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
delawood -
delawood -
Bonjour,
Je cherche à faire un script VBS qui dans un repertoire recupere tous les fichiers et les met dans un tableu.. il stocke les infos dans un tableau ( nom du fichier + date de creation du fichier).. apres il teste la date de création la plus récente des fichiers... Et puis il renvoie un message de d'erreur ( ou CRITICAL car c'est pour faire du Nagios) dans le cas le ficher le plus récent à 24h.. Pour le moment, j'ai un script qui teste si un fichier dans le repertoire a plus de 24h mais ca bloque quand jai plusieurs fichiers car il renvoie toujours un message d'erreur car il ya des fichiers qui s'accumulent..
Je vous présente mon script :
<script language="VBScript">
If Wscript.Arguments.Named.Exists("h") Or Wscript.Arguments.Count = 0 Then
Wscript.Echo "Plugin help screen:"
Wscript.Arguments.ShowUsage()
Wscript.Quit(0)
End If
' Déclaration des variables et constantes
'----------------------------------------
strFolder = Wscript.Arguments.Unnamed.Item(0)
strMin = wscript.Arguments.Unnamed.Item(1)
strMin = Int(strMin)
Const intOK = 0
Const intWarning = 1
Const intCritical = 2
Const intUnknown = 3
'Début des tests
'---------------
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strFolder) Then 'Vérification si le répertoire existe
Set objFolder = objFSO.GetFolder(strFolder)
set colFiles = objFolder.Files
For Each objFile in colFiles
If DateDiff("n",objFile.DateLastModified,Now())>strMin Then
retour=retour+1
End If
Next
If retour>0 then
WScript.Echo "Fileage CRITICAL - des fichiers ont plus de " & strMin & " Minutes"
Wscript.Quit(intCritical)
Else
WScript.Echo "Fileage OK - Tous les fichiers ont moins de " & strMin & " Minutes"
WScript.Quit(intOK)
End If
Else
Wscript.Echo "Fileage Unknown - le dossier spécifie n existe pas"
Wscript.Quit(intUnknown)
End If
</script>
Je précise juste que ce sont des fichiers .bak sous format xxx_20080609xxxx.bak avec "20080609" qui est la date de création du fichier.....
Merci
Je cherche à faire un script VBS qui dans un repertoire recupere tous les fichiers et les met dans un tableu.. il stocke les infos dans un tableau ( nom du fichier + date de creation du fichier).. apres il teste la date de création la plus récente des fichiers... Et puis il renvoie un message de d'erreur ( ou CRITICAL car c'est pour faire du Nagios) dans le cas le ficher le plus récent à 24h.. Pour le moment, j'ai un script qui teste si un fichier dans le repertoire a plus de 24h mais ca bloque quand jai plusieurs fichiers car il renvoie toujours un message d'erreur car il ya des fichiers qui s'accumulent..
Je vous présente mon script :
<script language="VBScript">
If Wscript.Arguments.Named.Exists("h") Or Wscript.Arguments.Count = 0 Then
Wscript.Echo "Plugin help screen:"
Wscript.Arguments.ShowUsage()
Wscript.Quit(0)
End If
' Déclaration des variables et constantes
'----------------------------------------
strFolder = Wscript.Arguments.Unnamed.Item(0)
strMin = wscript.Arguments.Unnamed.Item(1)
strMin = Int(strMin)
Const intOK = 0
Const intWarning = 1
Const intCritical = 2
Const intUnknown = 3
'Début des tests
'---------------
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strFolder) Then 'Vérification si le répertoire existe
Set objFolder = objFSO.GetFolder(strFolder)
set colFiles = objFolder.Files
For Each objFile in colFiles
If DateDiff("n",objFile.DateLastModified,Now())>strMin Then
retour=retour+1
End If
Next
If retour>0 then
WScript.Echo "Fileage CRITICAL - des fichiers ont plus de " & strMin & " Minutes"
Wscript.Quit(intCritical)
Else
WScript.Echo "Fileage OK - Tous les fichiers ont moins de " & strMin & " Minutes"
WScript.Quit(intOK)
End If
Else
Wscript.Echo "Fileage Unknown - le dossier spécifie n existe pas"
Wscript.Quit(intUnknown)
End If
</script>
Je précise juste que ce sont des fichiers .bak sous format xxx_20080609xxxx.bak avec "20080609" qui est la date de création du fichier.....
Merci
A voir également:
- Fichiers dans un tableau VBS
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
4 réponses
Oui même si il retourne 1 si dans mon repertoire un fichier contient 20080610 (DateVeille), c'est pas grave, je change juste le test au niveau de l'affichage.. Mais il fonctionne pas toujours.. et dans ce que tu ma filé j'ai essayé de modifier en fait de objFile.Name par objFile.DateLastModified
dans :
For Each objFile in colFiles
If Instr(objFile.Name, DateHier) > 0 Then
retour=retour+1
End If
Next
mais toujours un pb.. si j'ai limpression que ca vient de ce test : If Instr(objFile.Name, DateHier) > 0..
Si je comprends bien Instr(objFile.Name, DateHier) est > 0 si la date du fichier est crée apres la date DateHier qui est la date de la veille.. donc je normalement ca devrait marcher..
j'ai limpression que c'est la valeur de retour qui n'est pas tester..
Mais jessaye d'afficher avec le MsgBox retour mais j'ai un boite de dialogue vide ( aucun valeur).. C'est comme ca qu'on peut l'afficher pour sa valeur ?? ou alors faut faire autre chose??
dans :
For Each objFile in colFiles
If Instr(objFile.Name, DateHier) > 0 Then
retour=retour+1
End If
Next
mais toujours un pb.. si j'ai limpression que ca vient de ce test : If Instr(objFile.Name, DateHier) > 0..
Si je comprends bien Instr(objFile.Name, DateHier) est > 0 si la date du fichier est crée apres la date DateHier qui est la date de la veille.. donc je normalement ca devrait marcher..
j'ai limpression que c'est la valeur de retour qui n'est pas tester..
Mais jessaye d'afficher avec le MsgBox retour mais j'ai un boite de dialogue vide ( aucun valeur).. C'est comme ca qu'on peut l'afficher pour sa valeur ?? ou alors faut faire autre chose??
Le test se fout complètement de la date de création ou de dernier accès du fichier, il teste simplement si dans le nom du fichier, on retrouve la séquence 20080610 car comme tu l'as indiqué dans ton premier post (et c'est de là que je suis parti), les noms des fichiers de sauvegarde ont pour structure xxx_YYYYMMDDxxx.bak.
Donc pour une date du jour égale au 11 juin 2008, je regarde simplement si un fichier est nommé xxx_20080610xxx.bak si tel est le cas, alors ca retourne 1.
Ai-je été plus clair ?
Donc pour une date du jour égale au 11 juin 2008, je regarde simplement si un fichier est nommé xxx_20080610xxx.bak si tel est le cas, alors ca retourne 1.
Ai-je été plus clair ?
ok je tai mieux compris..
Du coup j'ai pu faire une modification et ca marche normallement.. en fait voila ce que j'ai rajouté comme tu m'as dit :
For Each objFile in colFiles
If Instr(objFile.Name , dateHier) > 0 Then
retour=retour+1
Else retour=0
End If
next
donc j'ai rajouté le : Else retour=0.. sinon j'avais une valeur du retour qui était vide.. et du coup dans le tes d'affichage du resultata j'ai fait ;
If retour<1 then
WScript.Echo "Fileage CRITICAL - Le dernier fichier de sauvegarde a plus de " & strMin & " Minutes"
Wscript.Quit(intCritical)
Else
WScript.Echo "Fileage OK - Le dernier fichier de sauvegarde a moins de " & strMin & " Minutes"
WScript.Quit(intOK)
End If
donc voila je vais bien tester dans tous les cas de figure et je te tiens au courant si jai un autre souci..
Merci de ton aide...
Du coup j'ai pu faire une modification et ca marche normallement.. en fait voila ce que j'ai rajouté comme tu m'as dit :
For Each objFile in colFiles
If Instr(objFile.Name , dateHier) > 0 Then
retour=retour+1
Else retour=0
End If
next
donc j'ai rajouté le : Else retour=0.. sinon j'avais une valeur du retour qui était vide.. et du coup dans le tes d'affichage du resultata j'ai fait ;
If retour<1 then
WScript.Echo "Fileage CRITICAL - Le dernier fichier de sauvegarde a plus de " & strMin & " Minutes"
Wscript.Quit(intCritical)
Else
WScript.Echo "Fileage OK - Le dernier fichier de sauvegarde a moins de " & strMin & " Minutes"
WScript.Quit(intOK)
End If
donc voila je vais bien tester dans tous les cas de figure et je te tiens au courant si jai un autre souci..
Merci de ton aide...
ou alors je pense que le problème vient du fait qu'il n'arrive pas peut être à bien faire la comparaison entre le Datehier et objFile.Name (ou objFile.DatelastModified)
dans If Instr(objFile.Name, DateHier) > 0.. à cause des formats.. tu penses pas ?????
dans If Instr(objFile.Name, DateHier) > 0.. à cause des formats.. tu penses pas ?????
Bonjour a toutes et a tous,
j'ai une fonction qui fait le lien entre vba et la table"stock" d'access,la voici :
fpubDBConnect
vpubDBRecordset.Open ("SELECT * FROM stock WHERE ID =" & CInt(txtID)), vpubDBConnection, adOpenDynamic, adLockOptimistic
With vpubDBRecordset
End With
vpubDBRecordset.Close
je veux en effet créer une commande vb qui fera le tri pour la table "stock" par ordre decroissant de la valeur du champ 1. est ce que qulqu'un sait comment résoudre ce gros probléme , je ne sais pas si il existe une solution ou pas pour ce probléme, mais moi je compte sur vos talents les amis !
merci pour votre réponse
j'ai une fonction qui fait le lien entre vba et la table"stock" d'access,la voici :
fpubDBConnect
vpubDBRecordset.Open ("SELECT * FROM stock WHERE ID =" & CInt(txtID)), vpubDBConnection, adOpenDynamic, adLockOptimistic
With vpubDBRecordset
End With
vpubDBRecordset.Close
je veux en effet créer une commande vb qui fera le tri pour la table "stock" par ordre decroissant de la valeur du champ 1. est ce que qulqu'un sait comment résoudre ce gros probléme , je ne sais pas si il existe une solution ou pas pour ce probléme, mais moi je compte sur vos talents les amis !
merci pour votre réponse
Salut Onesdf,
Je reviens vers toi par rapport à mon script de tes de fichiers là.. Car j'ai un souci qu eje comprends pas trop. Je te montre en fait ce que j'vais finaliser comme script :
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strFolder) Then 'Vérification si le répertoire existe
Set objFolder = objFSO.GetFolder(strFolder)
set colFiles = objFolder.Files
annee = Year(Now-1)
If Month(Now-1) < 10 Then
mois = "0" & Month(Now-1)
Else
mois = Month(Now-1)
End If
If Day(Now - 1) < 10 Then
jour = "0" & Day(Now - 1)
Else
jour = Day(Now - 1)
End If
datehier = annee & mois & jour
MsgBox datehier
For Each objFile in colFiles
If Instr(objFile.Name , dateHier) > 0 Then
retour=retour+1
Else retour=0
End If
MsgBox objFile.Name
Next
MsgBox retour
If retour<1 then
WScript.Echo "Fileage CRITICAL - Le dernier fichier de sauvegarde a plus de " & strMin & " Minutes"
Wscript.Quit(intCritical)
Else
WScript.Echo "Fileage OK - Le dernier fichier de sauvegarde a moins de " & strMin & " Minutes"
WScript.Quit(intOK)
End If
Else
Wscript.Echo "Fileage Unknown - le dossier spécifie n existe pas"
Wscript.Quit(intUnknown)
End If
Donc je te rafraichi l'idée en fait, Il teste si dans un repertoire il ya un fichier qui date de la veille.. Donc il me renvoit un "1" si jamais il ya un fichier crée la veille et un "o" sinon.. Par contre j'ai un beug.. Je t'explique : on a eu un pb de sauvegarde et puis on a du relancer le Job de sauvegarde donc du coup il ma crée des fichiers aujourd'hui.. Et je constate que le script ne marche plus bien...
Donc j'ai fait un test, j'ai renommé le fichier de sauvegarde d'aujourdhui pur qu'il se trouve Ce que je constate en fait, c'est qu'il se trouve comme le premier fichier par son nom( où qu'il ne soit pas dernier fichier).. Et là le script fonctionne.. Et quand il se trouve dernier fichier il me met une erreur.. Donc je constate que il applique son test
If Instr(objFile.Name , dateHier) que sur le dernier fichier qu'il traite et si celui est différenet de la date de la veille là il renvoie une erreur... Je sais pas si j'ai pu me faire comprendre... Essaye de me donneer d'autres idées stp.. A Mon avis ca vient de ce test là... En d'autres termes il garde le resultat du dernier fichier qu'il traite et il oublie les autres fichiers...
Merci
Je reviens vers toi par rapport à mon script de tes de fichiers là.. Car j'ai un souci qu eje comprends pas trop. Je te montre en fait ce que j'vais finaliser comme script :
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strFolder) Then 'Vérification si le répertoire existe
Set objFolder = objFSO.GetFolder(strFolder)
set colFiles = objFolder.Files
annee = Year(Now-1)
If Month(Now-1) < 10 Then
mois = "0" & Month(Now-1)
Else
mois = Month(Now-1)
End If
If Day(Now - 1) < 10 Then
jour = "0" & Day(Now - 1)
Else
jour = Day(Now - 1)
End If
datehier = annee & mois & jour
MsgBox datehier
For Each objFile in colFiles
If Instr(objFile.Name , dateHier) > 0 Then
retour=retour+1
Else retour=0
End If
MsgBox objFile.Name
Next
MsgBox retour
If retour<1 then
WScript.Echo "Fileage CRITICAL - Le dernier fichier de sauvegarde a plus de " & strMin & " Minutes"
Wscript.Quit(intCritical)
Else
WScript.Echo "Fileage OK - Le dernier fichier de sauvegarde a moins de " & strMin & " Minutes"
WScript.Quit(intOK)
End If
Else
Wscript.Echo "Fileage Unknown - le dossier spécifie n existe pas"
Wscript.Quit(intUnknown)
End If
Donc je te rafraichi l'idée en fait, Il teste si dans un repertoire il ya un fichier qui date de la veille.. Donc il me renvoit un "1" si jamais il ya un fichier crée la veille et un "o" sinon.. Par contre j'ai un beug.. Je t'explique : on a eu un pb de sauvegarde et puis on a du relancer le Job de sauvegarde donc du coup il ma crée des fichiers aujourd'hui.. Et je constate que le script ne marche plus bien...
Donc j'ai fait un test, j'ai renommé le fichier de sauvegarde d'aujourdhui pur qu'il se trouve Ce que je constate en fait, c'est qu'il se trouve comme le premier fichier par son nom( où qu'il ne soit pas dernier fichier).. Et là le script fonctionne.. Et quand il se trouve dernier fichier il me met une erreur.. Donc je constate que il applique son test
If Instr(objFile.Name , dateHier) que sur le dernier fichier qu'il traite et si celui est différenet de la date de la veille là il renvoie une erreur... Je sais pas si j'ai pu me faire comprendre... Essaye de me donneer d'autres idées stp.. A Mon avis ca vient de ce test là... En d'autres termes il garde le resultat du dernier fichier qu'il traite et il oublie les autres fichiers...
Merci
Pour faire simple, je teste des fichiers dans un repertoire qui vérifie sil ya eu des sauvegardes la veille..
Or avant lorsqueun fichier de sauvegarde était crée il était supprimé le lendemain... Donc mon script que je présente ci dessous, me permettait de tester si un fichier avait plus de 24h dans le repertoire.. Et ca ca marchait bien...
Mais maintenant on a d'autre sauvegardes dans d'autres repertoires.. et je veux utiliser le meme script.. Or dans ce cas, les fichiers de sauvergarde s'accumulent.. Donc mon script là ne marche plus car, il yaura toujours un fichier qui a plus de 24h... Mais il faut que j'arrive à tester si parmi tous ces fichiers crées, il ya un fichier qui a été crée la veille pour voir si la sauvegarde de la veille a marché... c'est plus clair ?
je sais pas cmt le modifier mon script pour arriver à ca ...
<script language="VBScript">
If Wscript.Arguments.Named.Exists("h") Or Wscript.Arguments.Count = 0 Then
Wscript.Echo "Plugin help screen:"
Wscript.Arguments.ShowUsage()
Wscript.Quit(0)
End If
' Déclaration des variables et constantes
'----------------------------------------
strFolder = Wscript.Arguments.Unnamed.Item(0)
strMin = wscript.Arguments.Unnamed.Item(1)
strMin = Int(strMin)
Const intOK = 0
Const intWarning = 1
Const intCritical = 2
Const intUnknown = 3
'Début des tests
'---------------
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strFolder) Then 'Vérification si le répertoire existe
Set objFolder = objFSO.GetFolder(strFolder)
set colFiles = objFolder.Files
For Each objFile in colFiles
If DateDiff("n",objFile.DateLastModified,Now())>strMin Then
retour=retour+1
End If
Next
If retour>0 then
WScript.Echo "Fileage CRITICAL - des fichiers ont plus de " & strMin & " Minutes"
Wscript.Quit(intCritical)
Else
WScript.Echo "Fileage OK - Tous les fichiers ont moins de " & strMin & " Minutes"
WScript.Quit(intOK)
End If
Else
Wscript.Echo "Fileage Unknown - le dossier spécifie n existe pas"
Wscript.Quit(intUnknown)
End If
</script>
un
Et tu calcules datehier à partir de la fonction Now
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strFolder) Then 'Vérification si le répertoire existe
Set objFolder = objFSO.GetFolder(strFolder)
set colFiles = objFolder.Files
annee = Year(Now)
If Month(Now) < 10 Then
mois = "0" & Month(Now)
Else
mois = Month(Now)
End If
If Day(Now - 1) < 10 Then
jour = "0" & Day(Now - 1)
Else
jour = Day(Now - 1)
End If
datehier = annee & mois & jour
MsgBox datehier
For Each objFile in colFiles
If Instr(objFile.Name, DateHier) > 0 Then
retour=retour+1
End If
Next
If retour>0 then
WScript.Echo "Fileage CRITICAL - des fichiers ont plus de " & strMin & " Minutes"
Wscript.Quit(intCritical)
Else
WScript.Echo "Fileage OK - Tous les fichiers ont moins de " & strMin & " Minutes"
WScript.Quit(intOK)
End If
Else
Wscript.Echo "Fileage Unknown - le dossier spécifie n existe pas"
Wscript.Quit(intUnknown)
End If
Oui mais le pb est que lorqu'il rencontre un fichier qui à plus de 24 ( datant de la veille) il passe le "retour à 1" donc du coup j'aurais le message d'erreur.. Or je voudrais qu'il passe le "retour à 1" que lorsqu'apres avoir traiter tous les fichiers il se rend compte qu'il ya aucun fichier datant dont la date est celle de la veille.. Dans le cas où il trouve au moins un seul fichier de moins de 24h il n'incrémente pas le retour.. tu vois un peu???
annee = Year(Now-1)
If Month(Now-1) < 10 Then
mois = "0" & Month(Now-1)
Else
mois = Month(Now-1)
End If
Oui mais le pb est que lorqu'il rencontre un fichier qui à plus de 24 ( datant de la veille) il passe le "retour à 1" donc du coup j'aurais le message d'erreur.. Or je voudrais qu'il passe le "retour à 1" que lorsqu'apres avoir traiter tous les fichiers il se rend compte qu'il ya aucun fichier datant dont la date est celle de la veille.. Dans le cas où il trouve au moins un seul fichier de moins de 24h il n'incrémente pas le retour.. tu vois un peu???
Le code fournit retourne 1 seulement si dans ton répertoire un fichier contient 20080610 (DateVeille)
Si je t'ai bien compris, tu voudrais que retour soit égal à 1 seulement si aucune date de fichier dans le répertoire n'a pour date celle de la veille, c'est bien ca ?