Bonjour à tous
je me suis lancé dans le batch pensant que la chose serait "simple", mais ce n'est visiblement pas le cas.
Mon but :
dans le cadre professionnel nous avons un logiciel (CAO) qui nous génère x sous-répertoires, puis il place dans chacun de ces sous-répertoires y fichiers qui ont le même nom pour chaque sous-répertoire ... Impossible de rapatrier tous les fichiers au même endroit sans perdre des fichiers donc !
Note 1 : le nombre de sous-répertoire x est variable et leur nom n'a pas de format "standard"
Note 2 : le nombre de fichiers y ainsi que leur nom est variable en fonction des options choisies dans le logiciel de CAO
L'idée est donc de copier dans le répertoire racine les fichiers des sous-répertoires en les renommant " 'nom sous-répertoire'_'nom fichier d'origine' "
J'ai réalisé le code suivant, mais ma problématique est d'arriver à mettre dans la variable 'prefix' le nom du sous-répertoire.
Sinon le reste marche
J'ai essayé pas mal de chose avec les expansions retardées, avec les caractères d'échappement, mais là franchement, cela fait 2 jours que je sèche
Je pense que le loup est autour de set PREFIX=%PREFIX:%cd%\\=% mais .... où ?
Code Batch : 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 cls ::@echo off setlocal enabledelayedexpansion for /d %%r in ("%cd%\*") do ( ::ligne suivante pour debug echo ### main ### %%r call :listFic %%r ::ligne suivante supprimmer echo en fin de debug echo rd /S /Q %%r ) endlocal echo. pause exit /b ::---------------------------- procedure qui boucle sur un repertoire ------------ :listFic ::ligne suivante pour debug echo func0 %~1 for /r "%~1" %%f in ("*.*") do ( :: but : mettre dans prefix la chaine de carateres : %1 (chemin complet du fichier) dans laquelle la chaine %cd% a ete supprimee set "PREFIX=%~1" ::ligne suivante pour debug echo func1 %PREFIX% set PREFIX=%PREFIX:%cd%\\=% ::ligne suivante pour debug echo func2 %PREFIX% ::ligne suivante pour debug : a supprimer, actuellement pour test fonction copy set prefix=dos1 ::ligne suivante supprimmer echo en fin de debug echo copy /Y %~1\%%~nf%%~xf %cd%\%prefix%_%%~nf%%~xf ) goto :eof
Merci d'avance pour votre aide
Maintenant si quelqu'un pense qu'en Powershell c'est plus simple (voire plus pérenne dans le temps ?) je suis preneur aussi, tous nos postes étant en win 7 ou win X. Mais de ce coté je ne connais rien !
Eric_MGN
Partager