Se connecter avec
S'enregistrer | Connectez-vous

Recuperer une partie du nom d'un fichier en dos

Dernière réponse : dans Programmation

besoin aide pour créer un batch dos SVP

Bonjour j'ai un répertoire qui contient plusieurs répertoires qui contiennent chacun un fichier.xml diffèrent. j'aimerais réorganiser ces fichiers comme suit:

lire les 3 ou 4 caractères de chaque fichier créer un répertoire qui porte le nom de ces 3 ou 4 caractères puis copier les fichiers qui commence avec ces 3 ou 4 caractères de dans.

exemple : c:\temp\FF2XML\toto-123456.xml

lire toto dans une variable dos
créer un répertoire c:\toto
puis grouper tout les fichier qui commence par toto dans ce répertoire.


Merci d'avance
***[at]gmail.com
Lassé par la pub ? Créez un compte
Expert Programmation

Bonjour,

Voici une solution qui fonctionne mais qui n'est pas optimum (remplacement de copy et del par move, gestion de la sortie quand le fichier liste est vide, ...).
Il faudrait pour cela encore quelques heures de travail.

Le batch est prévu pour les quatre premières lettres.

Citation :
cls
title Tri Rangement

@echo off

:_debut

dir *.xml /X /B /O:N > liste.txt

set "ligne="
set /a Numéro=0
for /f "delims=" %%a in ('more/e +%%Numéro%% ^< liste.txt') do (
if not defined ligne set "ligne=%%a"
)

if %ligne:~0,4%==~0 then fin

md %ligne:~0,4%
copy %ligne:~0,4%*.xml %ligne:~0,4%\*.*
del %ligne:~0,4%*.xml

goto _debut

:fin


A bientôt
Expert Programmation

Une version, un peu mieux gérée mais perfectible :

Citation :
@echo off

:_debut
dir *.xml /X /B /O:N > liste.txt

call :size_file LISTE.txt

:suite
if %size%==0 goto fin

set "ligne="
set /a Numéro=0
for /f "delims=" %%a in ('more/e +%%Numéro%% ^< liste.txt') do (
if not defined ligne set "ligne=%%a"
)

md %ligne:~0,4%
move %ligne:~0,4%*.xml %ligne:~0,4%

goto _debut

:size_file
set size=%~z1
goto suite

:fin
del liste.txt


Il sera peut-être nécessaire d'enlever le _ devant debut que j'ai ajouté à cause de l'émoticône :D  .

A bientôt
Expert Programmation

Bonjour,

Le mot clé date permet de changer la date mais est aussi un moyen d'accès aux valeurs de date.

set permet de définir une variable globale (var_date)
% % indiquent la valeur de date
~x,y permettent d'extraire les caractères en définissant leur nombre, le début et sens de parcours de la valeur de la variable.

Citation :
set var_date=%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%


A bientôt

PS : Pour une autre question, il serait préférable d'ouvrir une nouvelle discussion.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde