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 :

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
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.

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 ?
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
La question qui résume mon problème :
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.