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