Salut,
Pour déplacer au lieu de copier il suffit de remplacer la deuxième commande XCOPY par la commande MOVE, c'est aussi simple que ça.
Je te souhaite une bonne journée.
Version imprimable
Salut,
Pour déplacer au lieu de copier il suffit de remplacer la deuxième commande XCOPY par la commande MOVE, c'est aussi simple que ça.
Je te souhaite une bonne journée.
ok ok
J'en apprends tous les jours !
je regarde
Si tu veux des explications sur le fonctionnement du code, n'hésite pas.
C'est vrai que je n'ai pas mis beaucoup de commentaires pour expliquer ce que font les différentes parties.
Je veux bien la version avec les commentaires !!
Voilà j'espère que c'est plus clair maintenant :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 @echo off : -------------------------------------------------------------- : on active l'expansion retardée des variables : -------------------------------------------------------------- setlocal enabledelayedexpansion : -------------------------------------------------------------- : on modifie le codepage pour prendre en compte les accents : -------------------------------------------------------------- chcp 28591 >nul : -------------------------------------------------------------- : on définit les variables dont on aura besoin : -------------------------------------------------------------- set "source=D:\PHOTOS\ADO - SAUVEGARDE TELEPHONE" set "destination=D:\PHOTOS\SGA - A TRIER" set "archivage=%source%\OK ARCHIVE" : -------------------------------------------------------------- : on se positionne dans le dossier contenant les fichiers : tout en vérifiant que le dossier existe bien, sinon on : quitte le script : -------------------------------------------------------------- cd /d %source% || exit /b 1 : -------------------------------------------------------------- : on crée les dossiers où vont arriver les fichiers : -------------------------------------------------------------- if not exist "%destination%" (mkdir "%destination%") if not exist "%archivage%" (mkdir "%archivage%") : -------------------------------------------------------------- : on traite tous les fichiers du dossier : -------------------------------------------------------------- for /r %%A in (*.*) do ( for /f "tokens=2 delims=_-" %%E in ("%%~nA") do ( echo.%%E | findstr /R "[0-9][0-9][0-9][0-9][0-9][0-9]" >nul && ( %rem on récupère la deuxième partie (tokens=2) du nom et on vérifie qu'il s'agit bien de 6 chiffres % set "dossier=%%E" set "dossier=!dossier:~0,4! !dossier:~4,2! !dossier:~6,2!" %rem on découpe la date récupérée dans le nom de fichier pour créer un nouveau nom de dossier % echo. %rem on saute une ligne % if not exist "%destination%\!dossier!" (mkdir "%destination%\!dossier!") %rem on crée le nouveau dossier s'il n'existe pas % xcopy /Y "%%~A" "%destination%\!dossier!" && call :fonction "%%~A" %rem on copie le fichier dans le dossier d'arrivée et on appelle (CALL) la routine d'archivage % ) ) ) echo. & pause : -------------------------------------------------------------- : fin du script, on quitte (le code erreur 0 est facultatif) : -------------------------------------------------------------- exit /b 0 : -------------------------------------------------------------- : on crée une routine pour déplacer les fichiers dans l'archive : -------------------------------------------------------------- :fonction set "fichier=%~dp1" %rem on récupère le chemin du fichier qu'on doit archiver % echo.!fichier! | find "%archivage%" >nul || ( %rem astuce pour exclure les fichiers déjà archivés % set "archive=!fichier:%source%=%archivage%!" %rem on substitue le chemin du fichier avec le chemin de l'archive % >nul move /Y %1 "!archive!" %rem on déplace le fichier dans l'archive % ) : -------------------------------------------------------------- : on quitte la routine, on revient à la ligne succédant le CALL : -------------------------------------------------------------- goto :eof
En testant le script incluant les commentaires je me suis rendu compte d'un petit problème, je vais essayer de rectifier et je reviens vers toi.
Voilà la version corrigée :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 @echo off : -------------------------------------------------------------- : on active l'expansion retardée des variables : -------------------------------------------------------------- setlocal enabledelayedexpansion : -------------------------------------------------------------- : on modifie le codepage pour prendre en compte les accents : -------------------------------------------------------------- chcp 28591 >nul : -------------------------------------------------------------- : on définit les variables dont on aura besoin : -------------------------------------------------------------- set "source=D:\PHOTOS\ADO - SAUVEGARDE TELEPHONE" set "destination=D:\PHOTOS\SGA - A TRIER" set "archivage=%source%\OK ARCHIVE" : -------------------------------------------------------------- : on se positionne dans le dossier contenant les fichiers : tout en vérifiant que le dossier existe bien, sinon on : quitte le script : -------------------------------------------------------------- cd /d %source% || exit /b 1 : -------------------------------------------------------------- : on crée les dossiers où vont arriver les fichiers : -------------------------------------------------------------- if not exist "%destination%" (mkdir "%destination%") if not exist "%archivage%" (mkdir "%archivage%") : -------------------------------------------------------------- : on traite tous les fichiers du dossier : -------------------------------------------------------------- for /r %%A in (*.*) do ( echo.%%A | findstr /i /C:"%archivage%" /C:"%destination%" >nul || ( %rem on exclut les fichiers de l'archive et du dossier d'arrivée % for /f "tokens=2 delims=_-" %%E in ("%%~nA") do ( echo.%%E | findstr /R "[0-9][0-9][0-9][0-9][0-9][0-9]" >nul && call:fonction "%%~E" "%%~A" %rem on récupère la deuxième partie (tokens=2) du nom et on vérifie qu'il s'agit bien de 6 chiffres % ) ) ) echo. & pause : -------------------------------------------------------------- : fin du script, on quitte (le code erreur 0 est facultatif) : -------------------------------------------------------------- exit /b 0 : -------------------------------------------------------------- : on crée une routine pour déplacer les fichiers et les archiver : -------------------------------------------------------------- :fonction set "dossier=%~1" set "dossier=!dossier:~0,4! !dossier:~4,2! !dossier:~6,2!" %rem on découpe la date récupérée dans le nom de fichier pour créer un nouveau nom de dossier % if not exist "%destination%\!dossier!" (mkdir "%destination%\!dossier!") %rem on crée le nouveau dossier s'il n'existe pas % echo. %rem on saute une ligne % xcopy /Y "%~2" "%destination%\!dossier!" && ( %rem on copie le fichier dans le dossier d'arrivée % set "fichier=%~dp2" %rem on récupère le chemin du fichier qu'on doit archiver % set "archive=!fichier:%source%=%archivage%!" %rem on substitue le chemin du fichier par le chemin de l'archive % >nul move /Y "%~2" "!archive!" %rem on déplace le fichier dans l'archive % ) : -------------------------------------------------------------- : on quitte la routine, on revient à la ligne succédant le CALL : -------------------------------------------------------------- goto :eof
La correction concerne le scénario dans lequel le dossier d'archive ou bien le dossier d'arrivée ferait partie du dossier de départ, ce qui entrainerait une prise en compte inutile de ces fichiers.
Merci à toi !
Je vais étudier !!!
Hello
Merci pour le descriptif je pense avoir compris l'enchainement !
Petite question :
Est-ce que je peux enchaine les différents codes ?
Cela ne posera de problème pour les variable "Source....." ?