[batch] copie d'un dossier + de ses fichiers

copie d'un dossier + de ses fichiers [batch] - Shell/Batch - Programmation

Marsh Posté le 21-03-2007 à 09:50:32    

Bonjour,
 
A premier abord, ma question paraît simple mais voilà ma constatatio: si je fais
 

Code :
  1. xcopy /dossier1 /dossier2


 
avec dossier1 contenant les fichiers F[1.1=>1.n]
 
les fichiers contenus dans dossier1 seront copiés dans dossier2...
j'aurai donc /dossier2/F[1.1=>1.n]
 
seulement, je souhaite copier également le dossier 1; je veux avoir:
/dossier2/dossier1/F[1.1=>1.n]

Reply

Marsh Posté le 21-03-2007 à 09:50:32   

Reply

Marsh Posté le 21-03-2007 à 10:59:59    

xcopy \dossier1 \dossier2\dossier1

Reply

Marsh Posté le 21-03-2007 à 15:22:52    

merci beaucoup mais en fait, mon script récupère tous les noms de dossiers qu'il doit copier depuis un fichier texte. Il récupère des chemins tels que:
D1\D1.1\D1.1\D1.1.1
D2\D2.1
D3\D3.1\D3.1.1
 
ainsi il va y avoir des problèmes si j'effectue la copie vers le dossier de destination
car si je fais xcopy D1\D1.1\D1.1\D1.1.1 destination\
Il ne me copiera pas le répertoire D1.1.1  
pour celil faudrait que je fasse  
xcopy D1\D1.1\D1.1\D1.1.1 destination\D1.1.1
ce qui impliquerait que j'arrive à retirer du chemin D1\D1.1\D1.1\D1.1.1 le dernier élément délimité par "\", soit D1.1.1.
Bref, je ne vois vraiment pas comment faire...
Si vous avez des idées, je suis preneur.

Reply

Marsh Posté le 21-03-2007 à 15:33:38    

baobazz a écrit :

ce qui impliquerait que j'arrive à retirer du chemin D1\D1.1\D1.1\D1.1.1 le dernier élément délimité par "\", soit D1.1.1.


Petit test :

Code :
  1. call :getParent "D1\D1.1\D1.1\D1.1.1"
  2. goto :eof
  3. :getParent
  4. echo %~nx1
  5. goto :eof

Reply

Marsh Posté le 21-03-2007 à 16:49:26    

bonjour nglechau et merci pour ta réponse!
en fait, mon batch est le suivant pour l'instant, prenant en compte tes conseils:

Code :
  1. for /f "eol=; tokens=1 delims=," %%a in (liste_dossiers.txt) do (
  2. echo copie de %%a
  3. set dossier_source=%%a
  4. call :getParent %%a
  5. :copie
  6. echo dossier cible1=%dossier_cible%
  7. xcopy "\\%serveur_bureautique%\%dossier_source%" "%dossier_local%\%dossier_cible%"
  8. goto fin
  9. :getParent
  10. set dossier_cible=%~nx1
  11. goto copie
  12. :fin
  13. echo copie OK
  14. )
  15. pause


le problème est que ça ne le fait que pour le premier dossier...
pourtant, je suis certain d'y être presque!

Reply

Marsh Posté le 21-03-2007 à 16:59:52    

Le probleme vient de ton :
set dossier_source=%%a
 
dans une boucle for. Tu peux lire l'aide de set
set /?
pour le paragraphe concernant l'expansion retardee des variables.
 
Tu pourrais a mon avis passer carrement %%a en argument d'une procedure qui fait et l'extraction du nom du dossier et la copie.
 

Code :
  1. for ... %%a in ... do (
  2.   call :copie "%%a"
  3. )
  4. goto :suivant
  5. :copie
  6. xcopy "\\%serveur_bureautique%\%~1" "%dossier_local%\%~nx1"
  7. goto :eof
  8. :suivant

Reply

Marsh Posté le 21-03-2007 à 18:28:01    

merci nglechau!
Tu m'as bien aidé. Ca marche.
Pour ceux que ça intéresse, here is the final code:

Code :
  1. for /f "eol=; tokens=1 delims=," %%a in (liste_dossiers.txt) do (
  2. rem c'est les bordures
  3. echo ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
  4. echo Copie de %%a
  5. echo ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
  6. call :copie "%%a"
  7. )
  8. goto :suivant
  9. :copie
  10. rem je valide la copie du répertoire: d'où le echo R
  11. echo R|xcopy /S "\\%serveur_bureautique%\%~1" "%dossier_local%\%~nx1"
  12. echo.
  13. goto :eof
  14. :suivant
  15. echo.
  16. pause


 
merci beaucoup!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed