Aide pour la création d'un script svp !

Résolu/Fermé
zéèf - 12 oct. 2011 à 14:37
 zéèf - 13 oct. 2011 à 22:59
Bonjour,

Je cherche à crée un script sous windows, que j'exécuterai 1 fois par mois à l'aide d'une tâche planifié.
Ce script doit pouvoir supprimer des dossier dont les noms (sous forme de date, par exemple: 10-08-2010) sont ancien de plus de 10 jours.

Je ne sais pas si tout est clair, j'aimerai avoir quelques pistes pour réaliser ce script.

Merci.
A voir également:

10 réponses

Utilisateur anonyme
13 oct. 2011 à 13:45
Bonjour,

Il te faudra adapter selon ton besoin :

Exemple type :

  Const RepSource = "C:\Data"
    
  Dim objFSO, objFichier, objRepertoire
  Dim lDate, strDate, Mois, Jour

  lDate = DateAdd("Y", -10, Date)

  Mois = Month(lDate)
  If (Mois < 10) Then
    Mois = "0" & Mois
  End If

  Jour = Day(lDate)
  If (Jour < 10) Then
    Jour = "0" & Jour
  End If
  strDate = Jour & "-" & Mois & "-" & Year(lDate)

  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objRepertoire = objFSO.GetFolder(RepSource)

  ' Destruction des anciens fichiers
  If (objRepertoire.Files.Count > 0) Then
    For Each objFichier In objRepertoire.Files
      ' Récupère le nom du fichier
      NomF = objFichier.Name
      ' Récupère la date dans le nom du fichier
      NomF = Mid$(NomF, 1, 8)
      ' Test si date < 10 jrs
      If (NomF < strDate) Then
            objFSO.DeleteFile (RepSource & "\" & objFichier.Name)
      End If
    Next
  End If

  Set objFSO = Nothing
  Set objRepertoire = Nothing
  Set objFichier = Nothing

WScript.Quit(0)


Cdt

Lupin
0
merci pour votre réponse, mais pour l'instant j'avais plus un truc du genre :

set /a %%jour%%= %%date:~0,2%%>> purgelog.bat
echo. >> purgelog.bat

echo. >> purgelog.bat
IF %%jour%%==01 set jour=20>> purgelog.bat

IF %%jour%%==02 set jour=21>> purgelog.bat

IF %%jour%%==03 set jour=22>> purgelog.bat

IF %%jour%%==04 set jour=23>> purgelog.bat
IF %%jour%%==05 set jour=24>> purgelog.bat

IF %%jour%%==06 set jour=25>> purgelog.bat

IF %%jour%%==07 set jour=26>> purgelog.bat

IF %%jour%%==08 set jour=27>> purgelog.bat

IF %%jour%%==09 set jour=28>> purgelog.bat

IF %%jour%%==10 set jour=29>> purgelog.bat

IF %%jour%%==11 set jour=30>> purgelog.bat

IF %%jour%%==12 set jour=31>> purgelog.bat

IF %%jour%%==13 set jour=01>> purgelog.bat
IF %%jour%%==14 set jour=02>> purgelog.bat
IF %%jour%%==15 set jour=03>> purgelog.bat
IF %%jour%%==16 set jour=04>> purgelog.bat
IF %%jour%%==17 set jour=05>> purgelog.bat

IF %%jour%%==18 set jour=06>> purgelog.bat
IF %%jour%%==19 set jour=07>> purgelog.bat

IF %%jour%%==20 set jour=08>> purgelog.bat

IF %%jour%%==21 set jour=09>> purgelog.bat

IF %%jour%%==22 set jour=10>> purgelog.bat

IF %%jour%%==23 set jour=11>> purgelog.bat

IF %%jour%%==24 set jour=12>> purgelog.bat

IF %%jour%%==25 set jour=13>> purgelog.bat

IF %%jour%%==26 set jour=14>> purgelog.bat

IF %%jour%%==27 set jour=15>> purgelog.bat

IF %%jour%%==28 set jour=16>> purgelog.bat

IF %%jour%%==29 set jour=17>> purgelog.bat

IF %%jour%%==30 set jour=18>> purgelog.bat

IF %%jour%%==31 set jour=19>> purgelog.bat


echo %jour%
echo. >> purgelog.bat

echo. >> purgelog.bat

PAUSE

rmdir C:\dossiertest\%%jour%%-??-2011 /Q /S

PAUSE

exit





Apparement ça n'a rien a voir. Votre script semble plus complexe, n'y a t'il pas moyen d'arriver à quelque chose avec le bout de script ci dessus ?
0
Utilisateur anonyme
13 oct. 2011 à 14:47
re:

Désolé, il y a for longtemps que j'ai abandonné les fichiers en lots
(batch files), je prônes plutôt l'utilisation du VBS (Visual Basic Scripting).

À mon humble avis, le VBS est beaucoup plus flexible que les fichiers en lots.

Cdt

Lupin
0
Ok, mais j'ai essayé votre script et malheureusement je n'obtient pas le résultat escompté.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
13 oct. 2011 à 17:25
re:

Si je comprends bien, tu n'as aucune connaissance en VBS ?

Il faut connaître la nomenclature exact du nom de fichier afin
d'y repérer la date selon le format spécifié.

1.) L'instruction [ strDate = Jour & "-" & Mois & "-" & Year(lDate) ]
définit le critère de recherche.

Est-ce bien le format recherche ?

Jour - Mois - Année
( 10-08-2010 ) -> Selon tes spécifications

2.) L'instruction [ NomF = Mid$(NomF, 1, 8) ]
capture le format de la Date dans le nom du fichier

NomF -> Nom du fichier par l'affectation [ NomF = objFichier.Name ]

Mid$(NomF, 1, 8)

Mid$("NomFichier","A partir du premier caractère","8 caractère de long")

-----------------------------

Posons que le nom du fichier est :

Position du caractère
12345678901234567890123
Donnee-10-08-2010-Août.txt
_______8


Pour en récupérer la date tu remplace l'instruction par :

NomF = Mid$(NomF, 8, 10)

Est-ce clair pour toi ?

Cdt

Lupin
0
non je n'ai pas de bases en VBS mais j'ai compris l'instruction NomF.

L'élément que j'essai de supprimer est un répertoire, nommé par exemple 01-10-2011, donc de la même forme que dans votre exemple.
0
re:

Je suis mal barré, j'ai lu trop vite ton devis :-(

J'avais compris [ Fichiers ], après relecture je constate
qu'il s'agit de [ Dossiers ].

Voic donc le script modifié et testé :

Faire une copie de protection des répertoires avant l'utilisation :

Modifie la Constante [ RepSource ] selon ton environnement.

Place le script dans le dossier [ RepSource ].

  Const RepSource = "C:\Document\Test" 
     
  Dim objFSO, objDossier, objRepertoire 
  Dim lDate, strDate, Mois, Jour, NomD, NomRechercher 

  lDate = DateAdd("Y", -10, Date) 

  Mois = Month(lDate) 
  If (Mois < 10) Then 
    Mois = "0" & Mois 
  End If 
  Jour = Day(lDate) 
  If (Jour < 10) Then 
    Jour = "0" & Jour 
  End If 
  strDate = Year(lDate) & Mois & Jour 

  Set objFSO = CreateObject("Scripting.FileSystemObject") 
  Set objRepertoire = objFSO.GetFolder(RepSource) 

  For Each objDossier In objRepertoire.SubFolders 
    NomD = objDossier.Name 
    NomRechercher = Mid(NomD, 7, 4) & Mid(NomD, 4, 2) & Mid(NomD, 1, 2) 
    If (NomRechercher < strDate) Then 
        objDossier.Delete 
    End If 
  Next 

  Set objFSO = Nothing 
  Set objRepertoire = Nothing 

WScript.Echo("Traitement terminé") 

WScript.Quit(0) 


Cdt

Lupin
0
Ouaou, c'est impressionnant ça marche parfaitement ! Les actions que je voulais exécuter sont toutes réussies.
Je vous remercie beaucoup du temps que vous m'avez consacré !
Une dernière question cependant, je n'ai pas saisi comment fonctionnait cette ligne:

Mid(NomD, 7, 4) & Mid(NomD, 4, 2) & Mid(NomD, 1, 2)

Pouvez vous me dire comment fonctionnent les chiffres ?
0
Utilisateur anonyme
13 oct. 2011 à 22:54
re:

Mid(NomD, 7, 4) & Mid(NomD, 4, 2) & Mid(NomD, 1, 2)

On trouve ici une concaténation de trois parties :

L'année :

Mid(NomD, 7, 4)

Dans la chaine de caractère NomD, prend à partir du 7ième
caractère 4 caractères.

Le mois :

Mid(NomD, 4, 2)

Dans la chaine de caractère NomD, prend à partir du 4ième
caractère 2 caractères.

Le Jour :

Mid(NomD, 1, 2)

Dans la chaine de caractère NomD, prend à partir du 1er
caractère 2 caractères.

Et enfin, l'éperluète ( & ) permet la concaténation.

Pour obtenir un ordre conséquent, il faut fournir les deux
format de Date en String ( strDate et NomF) sous la forme :

AAAAMMJJ

Autrement, lors du test ( If (NomRechercher < strDate) Then )

celui-ci ne se comporte pas comme voulu :

Ex. : If ( 10082010 < 03102011 ) Then

On voit bien que le première date est plus petite que la deuxième :

10-08-2010 est plus petit que 03-10-2011

Mais le test sur un type ( String ) produit que le premier caractère
de la première date est un ( 1 ) et le premier caractère de la deuxième
date est un ( 0 ), alors

10082010 est plus grand que 03102011.

d'où le remaniement de la Date sous forme de ( String ).

Cdt

Lupin
0
Merci beaucoup !
0