J'ecris un fichier bat pour recréer la structure d'un repertoire existant vers un autre repertoire. J'ai un lecteur reseau Z: contenant le repertoire source et un lecteur reseau Y: devant contenir le repertoire de destination. Voila le script :
(le parametre %1 est un repertoire se trouvant sur le lecteur Z:)
if "%1"=="" (
echo Le repertoire doit etre fourni en parametre
goto end
)
rem test de l'existance du repertoire
if not exist %1\*.* (
echo repertoire inexistant
goto end
)
if exist c:\liste_rep.txt del c:\liste_rep.txt
dir %1\*.* /ad /b /w /s >>c:\liste_rep.txt
setlocal enableDelayedExpansion
for /f %%a in (c:\liste_rep.txt) do (
set var1=%%a
set var1=!var1:Z:\=Y:\!
mkdir "!var1!"
)
endlocal
:end
Le script ne copie pas les repertoires avec un espace dans le nom (le nom du rep est tronqué à partir de l'espace) alors que le nom est entre les crochets. Je ne comprend pas ce qui se passe. Alors que quand je fais un test dans une fenetre dos, ca marche sans probleme exemple mkdir "Y:\test\un rep".
ton problème vient en fait de la boucle for, elle n'arrive pas à récupérer l'intégralité du chemin du répertoire stocké dans ton fichier rep_list.txt. Si tu fait un echo %%a tu verra que le problème est déjà présent.
Personnellement je ne voit aucune façon pour corriger ce problème, la seul chose que tu peut faire et de retoucher ton arborescence en remplacent les espaces par des underscores.
J'ai pensé à cette solution, mais seulement j'ai un dossiers à recréer la structure qui contient 1463 sous-dossiers parmis lesquels 462 contiennent l'espace dans le nom. Le pire c'est que j'ai d'autre repertoires à traiter.
J'espère avoir une solution à mon probleme mais en attendant je fais le renommage manuel. Ce n'est pas très amusant.
J'espere une solution d'un membre.
tu peux ajouter tokens=* cela obligera la commande for a prendre en compte la ligne complete meme si il y a des espaces
setlocal enableDelayedExpansion
for /f "tokens=*" %%d in (c:\liste_rep.txt) do (
set var1=%%d
set var1=!var1:Z:\=Y:\!
mkdir !var1! <-- Attention ici j'ai enlevé les doubles quotes car elle ne sont utile que si tu ecris : mkdir "%%d" mais pas pour une variable
)
endlocal
Merci pour votre aide à tous les deux. La solution de bigfish marche. Avec le token ma boucle for recupere le nom du fichier en entier. Par contre pour le mkdir je suis obligé d'utiliser mkdir "!var1!" pour que les repertoires contenant les espaces soient crées.
Je vous revient avec un autre problème
Mon problème est résolu
A+