Déplacement de fichiers selon leur noms

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
sam06
Batcheur débutant
Messages : 12
Enregistré le : 20 nov. 2008 18:17

Déplacement de fichiers selon leur noms

Message 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 !
Batch_Man
King Of Batch
Messages : 64
Enregistré le : 09 janv. 2009 00:01

Re: Déplacement de fichiers selon leur noms

Message 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
sam06
Batcheur débutant
Messages : 12
Enregistré le : 20 nov. 2008 18:17

Re: Déplacement de fichiers selon leur noms

Message 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 !
sam06
Batcheur débutant
Messages : 12
Enregistré le : 20 nov. 2008 18:17

Re: Déplacement de fichiers selon leur noms

Message 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 ?
sam06
Batcheur débutant
Messages : 12
Enregistré le : 20 nov. 2008 18:17

Re: Déplacement de fichiers selon leur noms

Message 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"
Batch_Man
King Of Batch
Messages : 64
Enregistré le : 09 janv. 2009 00:01

Re: Déplacement de fichiers selon leur noms

Message par Batch_Man »

Bonjour,

Pourrais tu expliquer ceci stp

call :subroutine "%%~ni"

Merci
sam06
Batcheur débutant
Messages : 12
Enregistré le : 20 nov. 2008 18:17

Re: Déplacement de fichiers selon leur noms

Message 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.
sam06
Batcheur débutant
Messages : 12
Enregistré le : 20 nov. 2008 18:17

Re: Déplacement de fichiers selon leur noms

Message 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
Répondre