Bonjour,
Mon but est de déplacer les fichiers d'un dossier A vers des dossiers B,C,D en fonction de certains caractères dans le nom de ces fichiers tout en créant un sous dossier.
Voici la démarche de mon script :
1) Lire le nom de tous les fichiers contenus dans un dossier (entree)
2) Récupérer ma variable obtenu avec 'for' en 1) : limiter le nombre de caractères à ceux qui m'intéressent (les 9 premiers) et en faire une variable.
3) Créer des conditions 'if' pour la création d'un dossier et surtout le déplacement des fichiers précédemment enregistrés dans ma variable en fonction des 9 premiers caractères de chacun des fichiers.
Mon problème :
Je n'arrive pas à conditionner le déplacement des fichiers en fonction des 9 premiers caractères soit le 3). J'arrive à vérifier l'existence de la chaîne de caractères ce qui me permet d'aller vers mes instructions mais ensuite, impossible de distinguer les fichiers les uns des autres en fonction de ces 9 premiers caractères pour déplacer les bons fichiers dans les bons dossiers.
Voici le script que j'ai écris :
En l'état (sans les ?????) il me créé un seul sous dossier dans un seul des dossiers possibles et copie tous les fichiers sans exception dans ce seul sous-dossier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 @echo off REM lecture des fichiers presents dans le repertoire entree et recuperation de la variable %%I for /f %%I in ('dir /b C:\Docume~1\%USERNAME%\Bureau\entree\') do (call :nomFichier %%I ) goto :fin REM sauvegarde de la variable et limitation nombre caracteres pour utiliser la base caracteres :nomFichier set nomFichier=%1 set variable=%nomFichier:~0,9% REM goto conditions pour le tri des fichiers goto :conditionsRoutages REM routage fichier selon base caracteres recuperee :conditionsRoutages if %variable% EQU 978225309 goto :Routage1 else if %variable% EQU 978270963 goto :Routage2 REM else goto :fin :Routage1 mkdir "C:\Docume~1\%USERNAME%\Bureau\Archives\Routage1\%date:~0,2%-%date:~3,2%-%date:~6,4%_Routage1" move "C:\Docume~1\%USERNAME%\Bureau\entree\??????)" "C:\Docume~1\%USERNAME%\Bureau\Archives\Routage1\%date:~0,2%-%date:~3,2%-%date:~6,4%_Routage1\" goto :fin :Routage2 mkdir "C:\Docume~1\%USERNAME%\Bureau\Archives\Routage2\%date:~0,2%-%date:~3,2%-%date:~6,4%_Routage2" move "C:\Docume~1\%USERNAME%\Bureau\entree\??????)" "C:\Docume~1\%USERNAME%\Bureau\Archives\Routage2\%date:~0,2%-%date:~3,2%-%date:~6,4%_Routage2\" goto :fin :fin pause
J'ai aussi tenté une autre approche, peu fructueuse :
L'utilisation répétée de 'for' avec les caractères souhaités suivis de * mais ça ne fonctionne pas, sûrement une erreur de syntaxe. Est-ce, selon vous une meilleure approche ?
La question qui résume mon problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 @echo off for /f %%I in ('dir 978225309* /b C:\Docume~1\%USERNAME%\Bureau\entree\') do (mkdir 'C:\Docume~1\%USERNAME%\Bureau\Archives\Routage1\%date:~0,2%-%date:~3,2%-%date:~6,4%_Routage1' %%I) copy %%I "C:\Docume~1\%USERNAME%\Bureau\Archives\Routage1\%date:~0,2%-%date:~3,2%-%date:~6,4%_Routage1" pause
Comment puis-je mettre ce filtre de condition pour "router" un fichier avec 9 caractères donnés, répondant à la condition, dans le bon dossier ?
Je m'en remet à votre savoir, Ô grands érudits du batch que vous êtes.
Merci de m'éclairer.
Partager