mkdir avec espace dans le nom de fichier

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
iciyoums
Batcheur occasionnel
Messages : 4
Enregistré le : 30 juil. 2008 19:46

mkdir avec espace dans le nom de fichier

Message par iciyoums »

Bonjour,

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:)

Code : Tout sélectionner

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".

Besoin d'aide.
Merci.
Avatar du membre
flox
Administrateur du site
Messages : 158
Enregistré le : 18 janv. 2008 22:05

Re: mkdir avec espace dans le nom de fichier

Message par flox »

Bonjour,

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.

@+
iciyoums
Batcheur occasionnel
Messages : 4
Enregistré le : 30 juil. 2008 19:46

Re: mkdir avec espace dans le nom de fichier

Message par iciyoums »

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.

Merci
Bigfish
Batcheur débutant
Messages : 26
Enregistré le : 08 août 2008 18:46

Re: mkdir avec espace dans le nom de fichier

Message par Bigfish »

Salut,

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

A+ :)
iciyoums
Batcheur occasionnel
Messages : 4
Enregistré le : 30 juil. 2008 19:46

Re: mkdir avec espace dans le nom de fichier

Message par iciyoums »

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+
Répondre