Script pour supprimer automatiquement les plus vieux dossiers [Résolu/Fermé]

Signaler
Messages postés
86
Date d'inscription
samedi 30 septembre 2006
Statut
Membre
Dernière intervention
15 avril 2020
-
Messages postés
12787
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
29 octobre 2020
-
Bonjour,

J'ai encore besoin d'un coup de main concernant un script pour automatiser une suppression de sous dossier.
De façon automatique, une fois par semaine, un nouveau sous dossier est créé par robocopy (sauvegarde d'un dossier partagé) sur un NAS Western Digital.
Pour ne pas saturer le NAS destinataire de ces sauvegardes, je cherche à mettre en place un script sur un de nos serveur en tache planifié.
Le dossier contient une dizaine de sous dossier de 250Go environ.
Je cherche à automatiser la suppression du plus vieux dossier.
Nous sommes obligé de passer par robocopy et non par un logiciel style cobian car le système shadow copy est déjà utilisé sur le serveur de fichier pour une autre sauvegarde.

Je bute totalement sur la façon de sélectionner le sous dossier le plus anciens
un problème est aussi à prendre en compte, la sélection doit ce passer à la racine de ce dossier et ne pas entrer dans les sous dossiers contenant encore toute une multitude de dossier, etc ... pour ne pas supprimer des dossiers ailleurs que le plus vieux sous dossier.
Nous avions trouvé un fichier vbs qui nous sélectionnait le plus vieux dossier mais qui n'arrivait pas à supprimer sur le NAS (question de droit en tache planifié)
Ne sachant pas comment mettre les informations de connexion sur un vbs, je suis obligé de passer par un .bat
à moins que quelqu'un m'apporte des éclaircissement sur le vbs qui m'est totalement inconnu

Le vbs que j'ai essayé d'utiliser:

Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set MonRep=FSO.GetFolder("D:\MonDossier")

datemin = Date()

for each sf in monrep.subfolders
If sf.datelastmodified < datemin then
datemin = sf.datelastmodified
chemin = sf.path
end if
next

set rep_to_delete = FSO.GetFolder(chemin)

rep_to_delete.delete

3 réponses

Messages postés
12787
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
29 octobre 2020
3 709
Dans mon script, PUSHD permet de monter un lecteur réseau temporaire, sans authentification.

Si jamais tu as besoin de t'authentifier auprès du NAS, il faut utiliser la commande NET USE :
Setlocal enableextensions enabledelayedexpansion

net use * \\adresse_NAS\nom_du_partage /user:user password

cd /d Z: (il faut indiquer la lettre du lecteur réseau, Z: par exemple)

for /F "tokens=*" %%A in ('dir /b /ad /o-d "*.*"') do (set cible=%%~nA)

rmdir /S /Q "!cible!"

Endlocal

exit
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
3324
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
25 janvier 2020
277
Bonjour,

Et tu ne peux pas numéroter tes dossiers ou y inscrire la date dans le nom ?
Ainsi il serait très simple de détecter le plus ancien.
Messages postés
86
Date d'inscription
samedi 30 septembre 2006
Statut
Membre
Dernière intervention
15 avril 2020
5
La sauvegarde est exporté dans un dossier renommé en fonction de la date de création de la sauvegarde, "%year%%month%%day%Nom_Dossier"
1 sauvegarde par semaine, mais je bloque pour la sélection du dossier par le nom ou par la date de création
Messages postés
86
Date d'inscription
samedi 30 septembre 2006
Statut
Membre
Dernière intervention
15 avril 2020
5
NB: merci d'avoir déplacé le sujet dans la bonne section
Messages postés
3324
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
25 janvier 2020
277
Malheureusement je ne connais pas bien les batch je ne saurais te conseiller. J'ai plutot une logique POO et en batch c'est pas tout a fait ça ...
Messages postés
12787
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
29 octobre 2020
3 709
Bonjour,

Je ne peux pas t'aider pour ton script VBS, par contre c'est très simple de trouver le plus vieux dossier en batch :

dir /ad /od ton dossier

Le commutateur /AD permet de cibler les dossiers et donc d'exclure les fichiers.

Le commutateur /OD permet de lister par ordre chronologique, en tenant compte de la date de dernière modification, pas de la date de création.

Tu associes cette commande à une boucle for pour pouvoir stocker le "dossier le plus vieux" dans une variable appelée !cible! :

Setlocal enableextensions enabledelayedexpansion

set dossier=nom de ton dossier

pushd %dossier%

for /F "tokens=*" %%A in ('dir /b /ad /od "*.*"') do (set cible=%%~nA)

rmdir /S /Q "!cible!"

popd

Endlocal

exit

Sauf que la commande RMDIR n'effacera pas le dossier si celui-ci n'est pas vide, par conséquent je te suggère de passer par une commande externe telle que del3.exe à télécharger ici :

http://www.info2000.biz/download/del3.zip

Donc la ligne avec la commande RMDIR sera à remplacer par celle-là :
del3.exe /b "!cible!"
Messages postés
86
Date d'inscription
samedi 30 septembre 2006
Statut
Membre
Dernière intervention
15 avril 2020
5
Je viens de tester, ça supprime le dossier le plus récemment modifié et non le plus ancien.
Mais déjà ça sélectionne un dossier, de quoi m'aider à trouver comment définir le bon dossier.
J'en suis donc bien plus loin qu'avant, Merci
>
Messages postés
86
Date d'inscription
samedi 30 septembre 2006
Statut
Membre
Dernière intervention
15 avril 2020

Oups ! Oui effectivement j'ai fait l'inverse, voilà la correction :
Setlocal enableextensions enabledelayedexpansion

set dossier=nom de ton dossier

pushd %dossier%

for /F "tokens=*" %%A in ('dir /b /ad /o-d "*.*"') do (set cible=%%~nA)

rmdir /S /Q "!cible!"

popd

Endlocal

exit
Messages postés
86
Date d'inscription
samedi 30 septembre 2006
Statut
Membre
Dernière intervention
15 avril 2020
5
Merci pour la correction.
Ça fonctionne parfaitement en local, maintenant je vais tester la semaine prochaine sur une tache planifiée si la suppression du fichier le plus ancien passe sur le NAS western Digital
Je te tiens au jus
Messages postés
86
Date d'inscription
samedi 30 septembre 2006
Statut
Membre
Dernière intervention
15 avril 2020
5
Pour la création des dossiers de test, voila ce que j'ai utilisé:

echo off
cls

echo ---------------------------------------------------------------------------
echo Instructions
echo ---------------------------------------------------------------------------

echo Pour effectuer les tests, j'ai besoin de
echo - un dossier moins anciens que la date
echo - plusieurs dossiers plus anciens que la date
echo dans le dossier moins anciens que la date, je dois avoir plusieurs sous dossiers plus anciens et moins anciens que la date

echo Notre date de reference sera le 12/05/2017

echo ---------------------------------------------------------------------------
echo creation du dossier moins anciens
echo ---------------------------------------------------------------------------

echo creation du dossier recent
md C:\Scripts\Test_suppression_dossier\dossier_recent
echo le dossier plus anciens est maintenant cree

echo ---------------------------------------------------------------------------
echo création des dossiers et sous dossiers plus anciens
echo ---------------------------------------------------------------------------
echo.
echo avant nous devons garder la référence du jours :
echo definition du jour
SET day=%date:~0,2%

echo definition du mois
SET month=%date:~3,2%

echo definition de l annee
SET year=%date:~6,4%

echo dossier et sous dossier 1 ***********************

echo configuration de la date plus ancienne
date 01/04/2017
echo création du dossier
md C:\Scripts\Test_suppression_dossier\dossier_ancien1
md C:\Scripts\Test_suppression_dossier\dossier_ancien1\sous_dossier_ancien1
echo le dossier plus anciens est maintenant cree
echo.

echo création du sous dossier ancien
md C:\Scripts\Test_suppression_dossier\dossier_recent\sous_dossier_ancien1
echo le sous dossier est maintenant cree
echo.

echo dossier et sous dossier 2 **********************

echo configuration de la date plus ancienne
date 01/03/2017
echo création du dossier
md C:\Scripts\Test_suppression_dossier\dossier_ancien2
md C:\Scripts\Test_suppression_dossier\dossier_ancien2\sous_dossier_ancien2
echo le dossier plus anciens est maintenant cree
echo.

echo création du sous dossier ancien
md C:\Scripts\Test_suppression_dossier\dossier_recent\sous_dossier_ancien2
echo le sous dossier est maintenant cree
echo.

echo dossier et sous dossier 3 **********************

echo configuration de la date plus ancienne
date 01/02/2017
echo création du dossier
md C:\Scripts\Test_suppression_dossier\dossier_ancien3
md C:\Scripts\Test_suppression_dossier\dossier_ancien3\sous_dossier_ancien3
echo le dossier plus anciens est maintenant cree
echo.

echo création du sous dossier ancien
md C:\Scripts\Test_suppression_dossier\dossier_recent\sous_dossier_ancien3
echo le sous dossier est maintenant cree
echo.

echo reconfiguration de l'ordinateur a la date du jours **************
date %day%/%month%/%year%
echo verification du retour a la date du jour
date /t
echo.

echo création du sous dossier recent
md C:\Scripts\Test_suppression_dossier\dossier_recent\sous_dossier_recent
echo le sous dossier est maintenant cree
echo.

echo le dossier est maintenant pret pour les tests



pause