Page 1 sur 1

Déplacement de fichiers selon leur noms

Posté : 13 mars 2009 14:47
par sam06
Bonjour à tous,

Je butte sur un script qui est censé me trier automatiquement mes fichiers journaliers en fonction de leur nom. Exemple :
AAA dim.01-07-2008.txt
BBBBB dim.11-01-2006.txt
CCCCCC lun.23-12-2006.txt
Je veux boucler sur chaque fichier txt du répertoire courant, récupérer le radical (ici je supprime les 15 derniers caractères) et déplcaer le fichier dans le repértoire du même nom. Ici donc :
AAA dim.01-07-2008.txt------>déplacé vers le rep. "AAA"
BBBBB dim.11-01-2006.txt---->déplacé vers le rep. "BBBBB"
etc.
Voici ma tentative de script, qui ne fonctionne pas :cry: :

Code : Tout sélectionner

echo off
set currentdir=%~dp0

for /r "%currentdir%" %%i in (*.txt) do (
 set filename=%%i.txt
 set rep=%filename:~,-15%
move "%filename%" "%currentdir%\%rep%"
)
pause
je vous remercie par avance de votre aide !

Re: Déplacement de fichiers selon leur noms

Posté : 13 mars 2009 19:14
par Batch_Man
Bonjour !

Ceci dois fonctionner ( non testé )

Code : Tout sélectionner

@echo off

del /Q fichiers.txt 2>NUL >NUL

for /f "tokens=*" %%i in ('dir /b "*.txt"') do echo %%i >> fichiers.txt
     for /f "tokens=*" %%i in ('type fichiers.txt ^| find "AAA"') do move "%%i" "AAA" 
          for /f "tokens=*" %%i in ('type fichiers.txt ^| find "BBBBB"') do move "%%i" "BBBBB" 
                    for /f "tokens=*" %%i in ('type fichiers.txt ^| find "CCCCCC"') do move "%%i" "CCCCCC" 
pause
Batch_Man

Re: Déplacement de fichiers selon leur noms

Posté : 13 mars 2009 22:20
par sam06
Merci bcp, je vais essayer d'adapter mon script en fonction. Mon but est de ne pas ré-écrire à chaque fois les chemins de copie, car les noms de fichiers peuvent varier. Je poste le script dès que ça fonctionne !

Re: Déplacement de fichiers selon leur noms

Posté : 14 mars 2009 12:03
par sam06
Ok ça fonctionne :

Code : Tout sélectionner

@echo off
set currentdir=%~dp0
for /r "%currentdir%" %%i in (*.txt) do call :subroutine "%%~ni"
goto fin

:subroutine

set filename=%~1.txt
set repname=%~1
for /f "tokens=1 delims= " %%i in ("%repname%") do set repname=%%i
REM echo %repname%
REM echo %filename%

if not exist "%currentdir%%repname%\" mkdir "%currentdir%%repname%\"

move "%filename%" "%currentdir%%repname%\"

:fin
Seul petit détail, la boucle balaie également les sous-répertoires du répertoire courant, alors que seuls les fichiers situés à la racine de ce répertoire courant m'intéressent. Il doit exister un commutateur ou un paramètre, quelqu'un a t-il une astuce ?

Re: Déplacement de fichiers selon leur noms

Posté : 16 mars 2009 13:52
par sam06
J'ai trouvé la solution afin de ne pas balayer tous les sous-repertoires, et classer uniquement les fichiers TXT de la racine du répertoire courant, si ça peux servir à quelqu'un...
Dans le code ci-dessus, remplacer

for /r "%currentdir%" %%i in (*.txt) do call :subroutine "%%~ni"

par

Code : Tout sélectionner

For %%i In ("%currentdir%*.txt") do call :subroutine "%%~ni"

Re: Déplacement de fichiers selon leur noms

Posté : 16 mars 2009 17:56
par Batch_Man
Bonjour,

Pourrais tu expliquer ceci stp

call :subroutine "%%~ni"

Merci

Re: Déplacement de fichiers selon leur noms

Posté : 16 mars 2009 23:38
par sam06
A vrai dire, j'ai plutôt tatonné avant de trouver la solution, pour ne pas dire galéré car autant je maitrise très bien le Visual Basic, autant je débute en batch.
La seule chose que je sache est que %~ni = nom du fichier sans l'extension, en fait je me suis inspiré de plusieurs sources dont celle de BigFish en réponse à mon post du 21/11/08 intitulé "Rename avec variable", qui utilise cette syntaxe précisement.

Re: Déplacement de fichiers selon leur noms

Posté : 11 avr. 2009 15:16
par sam06
Je rouvre le topic... le script seul fonctionne parfaitement, mais je l'appelle à partir d'une ligne de commande Access, base située dans un autre répertoire que le BAT. Or étrangement, il crée bien un répertoire à la bonne place si celui-ci n'existe pas, mais retourne l'erreur "fichier introuvable" donc ne classe pas les fichiers dans les diférents sous-repertoires... Je ne comprends pas ! help ! :roll:

Edit : il fallait modifier la syntaxe move. Le prog signale encore des trucs introuvables, mais fonctionne qu'il soit appelé du même répertoire ou d'un autre :

Code : Tout sélectionner

@echo off
set currentdir=%~dp0
for /r "%currentdir%" %%i in (*.txt) do call :subroutine "%%~ni"
goto fin

:subroutine

set filename=%~1.txt
set repname=%~1
for /f "tokens=1 delims= " %%i in ("%repname%") do set repname=%%i
REM echo %repname%
REM echo %filename%

if not exist "%currentdir%%repname%\" mkdir "%currentdir%%repname%\"

move "%currentdir%%filename%" "%currentdir%%repname%\"

:fin