61 votes

fichier batch pour la boucle avec des espaces dans le nom du répertoire

Comment puis-je modifier cela :

for /f %%a IN ('dir /b /s build\release\*.dll') do echo "%%a"

pour fonctionner lorsque le chemin contient des espaces ?

Par exemple, si cette opération est exécutée à partir de

c:\my folder with spaces

il y aura un écho :

c:\my

Merci

0 votes

Essayez de ne pas utiliser les lettres d'extension des paramètres pour les variables, si vous devez les ajouter plus tard, le code sera difficile à lire et sujet à des erreurs. Elles sont f d p n x s a t z. Le plus simple et le plus sûr est d'utiliser des lettres majuscules (par exemple, %%a et %%A sont des variables différentes).

93voto

Jan Zyka Points 5808

Vous devez utiliser :

for /f "delims=" %%a IN ('dir /b /s build\release\*.dll') do echo "%%a"

Ceci remplace les délimiteurs par défaut qui sont TAB et SPACE.

32voto

Jason Points 2150

J'ai contourné ce problème en ajoutant le préfixe "type" et en mettant des guillemets autour du chemin dans la clause IN.

FOR /F %%A IN ('type "c:\A Path With Spaces\A File.txt"') DO (
    ECHO %%A
)

Cet article m'a donné l'idée d'utiliser "type" dans la clause IN.

1 votes

Les guillemets sont la seule option lorsque vous utilisez /D au lieu de /F (seul /F prend les guillemets).

6voto

thomspengler Points 21

Si vous ne voulez pas vous occuper des "quotes", vous pouvez utiliser le commutateur "s" dans %~dpnx[]... cela affichera les noms de fichiers courts avec lesquels il est facile de travailler.

à partir de la ligne de commande...

for /f "delims=" %f IN ('dir /b /s "C:\Program Files\*.dll"') do echo %~sdpnxf

à l'intérieur d'un fichier .CMD/.BAT, vous devez "échapper" le [%], par exemple en doublant le [%].

for /f "delims=" %%f IN ('dir /b /s "C:\Program Files\*.dll"') do echo %%~sdpnxf

0voto

js2010 Points 823

Le problème est qu'il y a un joker dans la chaîne qui est interprétée comme un nom de fichier. Il faut également des guillemets doubles pour une chaîne contenant des espaces. Je ne suis pas sûr qu'il y ait un moyen d'échapper au caractère de remplacement.

for %a IN ("dir /b /s build\release\.dll") do echo %a

"dir /b /s build\release\.dll"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X