Deplacer des fichiers non-utilisés depuis une certaine date

Fermé
Azert_78 Messages postés 15 Date d'inscription mardi 31 mai 2022 Statut Membre Dernière intervention 9 juin 2022 - 7 juin 2022 à 09:50
Azert_78 Messages postés 15 Date d'inscription mardi 31 mai 2022 Statut Membre Dernière intervention 9 juin 2022 - 9 juin 2022 à 14:04
Bonjour,

J'ai commencé un script avec robocopy pour déplacer les fichiers et fichiers de sous dossiers non-accédés depuis une certaine date.


robocopy C:\Users\test\Desktop\1 C:\Users\test\Desktop\Archive /s /maxland:20060312 /mov


Configuration: Windows / Chrome 102.0.5005.63

4 réponses

brucine Messages postés 17251 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 octobre 2024 2 461
7 juin 2022 à 10:27
Bonjour,

Pourquoi ne continues-tu pas sur ton fil original où tu n'as d'ailleurs toujours pas dit parmi plusieurs solutions celle qui te convenait, marchait ou pas?

https://forums.commentcamarche.net/forum/affich-37605278-probleme-avec-la-variable-et-la-redirection#p37605398

La syntaxe à tester y était:

ROBOCOPY "C:\Users\test\Desktop\1" " C:\Users\test\Desktop\2" /MOVE /MINAGE:30 /COPYALL /S

-Mettre des guillemets aux chemins par prudence
-L'attention a été attirée sur le fait que MOV ne déplace que les fichiers, MOVE aussi les répertoires
-Je ne suis pas sûr de l'utilité du commutateur /COPYALL qui copie les informations des fichiers, mais peu importe
-La syntaxe est erronée, ce n'est pas maxland mais MAXLAD (ou MINLAD).
MAXLAD est contre-productif, c'est un commutateur d'exclusion, ce que l'on veut traiter, ce sont les fichiers dont on exclut ceux UTILISES depuis n: MINLAD:n
On ne doit pas à mon sens y porter la date YYYYMMDD, puisque cela amène à la changer à chaque fois sauf à pouvoir faire lire une variable entrée dans le script et qui demanderait la valeur de YYYYMMDD: utiliser n en jours, on a le droit jusqu'à 1900, par exemple /MINLAD:180 pour 6 mois.
-Enfin, j'ai attiré l'attention sur les pièges de la date de dernier accès (un clic droit propriétés ou une copie de sauvegarde suffisent à la changer): il m'apparaît plus sain d'utiliser /MINAGE qui repose sur la date de création/dernière modification sur le support.
0
Azert_78 Messages postés 15 Date d'inscription mardi 31 mai 2022 Statut Membre Dernière intervention 9 juin 2022
7 juin 2022 à 10:31
Merci mais j'au une erreur avec votre script

Expression manquante après l'opérateur unaire « - ».
Au niveau de C:\Windows\system32\Robocopy.ps1 : 2 Caractère : 80
+ ------------------------------------------------------------------------------- <<<<
+ CategoryInfo : ParserError: (-:String) [], ParseException
+ FullyQualifiedErrorId : MissingExpressionAfterOperator
0
brucine Messages postés 17251 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 octobre 2024 2 461
7 juin 2022 à 10:49
Robocopy n'est pas un script PowerShell (pas un fichier ps1) mais une commande Dos à la ligne de commande ou en Batch; dans le dernier cas, le script doit être enregistré dans un nouveau texte toto.txt aussitôt renommé toto.cmd.
0
brucine Messages postés 17251 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 octobre 2024 2 461 > brucine Messages postés 17251 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 octobre 2024
7 juin 2022 à 10:55
Ou plus exactement rien n'interdit d'intégrer une syntaxe Robocopy à PowerShell, mais c'est assommer une mouche avec un marteau si on n'a pas besoin de PowerShell par ailleurs et, dans ce cas de figure, c'est ta syntaxe que tu ne nous montres pas qui est foireuse.
0
Azert_78 Messages postés 15 Date d'inscription mardi 31 mai 2022 Statut Membre Dernière intervention 9 juin 2022 > brucine Messages postés 17251 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 octobre 2024
7 juin 2022 à 11:55
Le script marche j'ai du enlever les guillemets pour qu'il trouve le chemin et la destination mais j'ai également une dernière question est-il possible que le script me demande le chemin et lorsque je rentre le chemin il soit mit dans les commandes ?
0
brucine Messages postés 17251 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 octobre 2024 2 461 > Azert_78 Messages postés 15 Date d'inscription mardi 31 mai 2022 Statut Membre Dernière intervention 9 juin 2022
7 juin 2022 à 12:02
Toujours en batch (pas en PowerShell), soit on définit en début du script les chemins:

SET source=C:\Users\test\Desktop\1

et on remplace le chemin de la source dans la commande Robocopy par %source%

La conséquence en est que l'on doit modifier la valeur de SET source à chaque fois (et plus le chemin dans Robocopy)

soit on le demande à l'utilisateur:

SET /P source=Entrer le chemin de la source

Dans le cas de figure, pas très confortable puisqu'on doit entrer littéralement ce chemin à la ligne de commande avec points, slash...
0
Azert_78 Messages postés 15 Date d'inscription mardi 31 mai 2022 Statut Membre Dernière intervention 9 juin 2022
Modifié le 7 juin 2022 à 14:09
Merci pour ton aide normalement j'en ai fini avec se script.
Voila le script final si ça peut aider d'autres personnes.

@echo off

SET /P source=Entrer votre chemin :

ROBOCOPY %source% C:\Users\test\Desktop\Archive /MOVE /MINAGE:30 /COPYALL /S

pause
0
brucine Messages postés 17251 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 octobre 2024 2 461
7 juin 2022 à 14:11
On rejoint toujours la même question, en PowerShell ou en Batch?

En Batch ce n'est pas possible sauf erreur de syntaxe (en PowerShell il faut entrer $source = Read-Host "Entrer le chemin de la source") et évidemment modifier la commande en conséquence en remplaçant le chemin par %source% ou $source.

Dans cet exemple, je rentre la lettre de lecteur à tester (C, D...) et la commande FOR obéit: dir /-c C: etc...


SET /P _LECTEUR=ENTRER LETTRE A TESTER:
ECHO ----------------------------------
FOR /F "tokens=3 USEBACKQ" %%F IN (`dir /-c %_LECTEUR%:`) DO set "size=%%F"
...


Au risque de me répéter, mets en ligne le script que tu as utilisé pour dénicher l'erreur.
0
Azert_78 Messages postés 15 Date d'inscription mardi 31 mai 2022 Statut Membre Dernière intervention 9 juin 2022
Modifié le 8 juin 2022 à 09:44
Bon désolé j'ai une dernière question comment puis je rajouter dans le script pour que je choisisse le nom du fichier log et qu'il le créer + le place la ou je le veux. Voila ou j'en suis actuellement


@echo off
goto start
:start
SET /P source=Entrer votre chemin :
SET /P date=Entrer la date (AAAAMMJJ) :
SET /P name=Entrer le nom du fichier log :
SET crea=touch %name%
Set log=C:\Users\test\Desktop\Archive\%crea%
ROBOCOPY %source% C:\Users\test\Desktop\Archive /MOVE /MINAGE:%date% /COPYALL /S /log:%log%
cls
set choiceinput=
set /p choiceinput= Choisir entre 1.recommencer et 2.quitter :
echo.
if %choiceinput%==1 goto choice1
if %choiceinput%==2 goto choice2
pause
cls
:choice1
cls
goto start
pause
cls
:choice 2
cls
exit


Mon code actuelle ressemble à ca sauf qu'il crée un fichier nommé touch au lieu du nom que je donne et il ne déplace plus les fichiers.
0
brucine Messages postés 17251 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 octobre 2024 2 461
8 juin 2022 à 10:45
Bonjour,

-en :choice1 cls et pause n'ont pas d'intérêt (le fait de recommencer d'ailleurs non plus, puisque la copie a déjà été faite; si on veut vérifier, utiliser par exemple une condition ERRORLEVEL).

-la séquence
cls
set choiceinput=
ne sert à rien non plus.

-idem pour goto start en tête de fichier

-A nouveau, je ne vois pas l'intérêt de spécifier une variable date pour MINAGE, le but me semblant d'automatiser la chose tous les n jours, par exemple 60, mais c'est toi qui vois.

-SET crea=touch %name% va échouer puisque la sentence suivante:
Set log=C:\Users\test\Desktop\Archive\%crea%
va générer un nom d'espace.
Il convient alors de spécifier le chemin entre guillemets:
Set log="C:\Users\test\Desktop\Archive\%crea%"

De toute façon, tu te compliques la vie pour rien, il n'y a aucune raison de définir une variable du fichier de log sauf si on veut conserver tous les fichiers de log successifs, il suffit alors de les dater.

SET $madate=%date:~-4%_%date:~3,2%_%date:~0,2%
puis:
SET log=C:\Users\test\Desktop\Archive\suppression_%madate%.txt
qui va nous retourner: suppression_2022_06_08.txt

Pendant qu'on y est et pour éviter l'anarchie (mélange des fichiers déplacés et des logs), je ferais un sous-dossier spécifique:

SET log=C:\Users\test\Desktop\Archive\historique\suppression_%madate%.txt
0
Azert_78 Messages postés 15 Date d'inscription mardi 31 mai 2022 Statut Membre Dernière intervention 9 juin 2022 > brucine Messages postés 17251 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 octobre 2024
8 juin 2022 à 15:41
Merci pour ta grande aide le script marche comme je le veux, juste est-il possible de mettre une barre de progression pour que lorsque je déplace beaucoup d'anciens fichiers je puisse voir ou j'en suis?
0
brucine Messages postés 17251 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 octobre 2024 2 461 > Azert_78 Messages postés 15 Date d'inscription mardi 31 mai 2022 Statut Membre Dernière intervention 9 juin 2022
8 juin 2022 à 16:55
Tout est toujours possible, mais une belle barre de progression graphique passe par plusieurs bouclages, c'est peut-être un peu compliqué à mettre en place pour ce que tu veux faire.

Note que nous n'avons pas utilisé dans ROBOCOPY le commutateur /NP: en français, la progression devrait s'afficher sauf que @echo off s'y oppose, mais que si on l'y supprime, on aura l'écho de tout, ce qui n'est pas dramatique en soi puisqu'un certain nombre de lignes (SET /P) demandent par nature l'echo.

On peut donc soit diriger si l'echo est à on la sortie des autres commandes "dans le vide" (Commande > NUL), soit laisser l'echo à off mais rediriger la sortie de ROBOCOPY vers la console à l'aide du commutateur supplémentaire /TEE placé par exemple après /S.

Mais pas sûr qu'il en ressorte un indicateur de progression en pourcentage.
0
Azert_78 Messages postés 15 Date d'inscription mardi 31 mai 2022 Statut Membre Dernière intervention 9 juin 2022 > brucine Messages postés 17251 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 octobre 2024
9 juin 2022 à 09:45
Bonjour avec robocopy c'est impossible de faire une barre de progression avec des % ?
0
brucine Messages postés 17251 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 octobre 2024 2 461 > Azert_78 Messages postés 15 Date d'inscription mardi 31 mai 2022 Statut Membre Dernière intervention 9 juin 2022
9 juin 2022 à 11:11
Bonjour,

Comme déjà dit, c'est infernal.

Les solutions les plus "simples" passent par VBS ou PowerShell; dans un batch pur, il existe une pirouette à mettre en oeuvre publiée sur un forum qui prend une dizaine de lignes de code à elle toute seule, qu'il faut adapter à son cas spécifique et je suppose "décorer" par des caractères d'échappement appropriés (pendant qu'on y est, on voudra que la barre de progression soit en vert ou en rouge...).

Une bien meilleure solution serait d'utiliser à la place de ROBOCOPY XXCOPY, qui est un utilitaire freeware dans ses anciennes versions beaucoup plus puissant que ROBOCOPY et qui intègre un commutateur dédié à cette barre de progression.

Il faut que je teste les deux (j'ai une copie fonctionnelle de XXCOPY dont je me sers toujours à la place de ROBOCOPY), mais cela risque de me prendre du temps d'autant que, d'une suggestion à une autre, ce ne sera efficace que si je travaille sur ton code.

Il faut donc que tu publies ton code fonctionnel par ailleurs, ne me restant plus qu'à personnaliser les chemins source et destination pour tester.
0