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
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
A voir également:
- Robocopy minlad
- Déplacer une colonne excel - Guide
- Déplacer la barre des taches windows 11 - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Renommer des fichiers en masse - Guide
- Explorateur de fichiers - Guide
4 réponses
brucine
Messages postés
18277
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
16 décembre 2024
2 702
7 juin 2022 à 10:27
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.
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.
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
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
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
brucine
Messages postés
18277
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
16 décembre 2024
2 702
7 juin 2022 à 10:49
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.
brucine
Messages postés
18277
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
16 décembre 2024
2 702
>
brucine
Messages postés
18277
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
16 décembre 2024
7 juin 2022 à 10:55
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.
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
18277
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
16 décembre 2024
7 juin 2022 à 11:55
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 ?
brucine
Messages postés
18277
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
16 décembre 2024
2 702
>
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
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...
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...
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
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
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
brucine
Messages postés
18277
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
16 décembre 2024
2 702
7 juin 2022 à 14:11
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...
Au risque de me répéter, mets en ligne le script que tu as utilisé pour dénicher l'erreur.
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.
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
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
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.
@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.
brucine
Messages postés
18277
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
16 décembre 2024
2 702
8 juin 2022 à 10:45
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
-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
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
18277
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
16 décembre 2024
8 juin 2022 à 15:41
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?
brucine
Messages postés
18277
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
16 décembre 2024
2 702
>
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
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.
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.
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
18277
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
16 décembre 2024
9 juin 2022 à 09:45
9 juin 2022 à 09:45
Bonjour avec robocopy c'est impossible de faire une barre de progression avec des % ?
brucine
Messages postés
18277
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
16 décembre 2024
2 702
>
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
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.
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.