Comment échapper aux espaces dans les chemins de fichiers sur la ligne de commande Windows



Les interfaces de commande, comme l’invite de commande Windows ou PowerShell, se servent des espaces pour distinguer les commandes de leurs arguments. Cependant, les noms de fichiers et de dossiers contiennent parfois des espaces. Pour indiquer correctement un chemin d’accès comportant des espaces, il est nécessaire de les « échapper ».

Maîtriser la ligne de commande : pourquoi « échapper » les espaces est crucial

L’opération d' »échappement » modifie la fonction d’un caractère. Par exemple, « échapper » un espace indique au shell de le considérer comme un simple espace, plutôt que comme un séparateur entre les arguments de la commande.

Imaginons que vous souhaitiez consulter le contenu d’un fichier texte. La commande « type » permet cela. Si le fichier se nomme « TestFile.txt » et se trouve dans « C: », la commande suivante affichera son contenu :

type C:TestFile.txt

Jusque-là, tout va bien. Mais que se passe-t-il si le même fichier se situe dans « C:Test FolderTest File.txt » ? Si vous tentez d’exécuter la commande ci-dessous, cela échouera car les espaces dans le chemin poseront problème :

type C:Test FolderTest File.txt

La ligne de commande interprétera cela comme une tentative de rechercher un fichier appelé « C:Test », et affichera un message indiquant que « le chemin spécifié est introuvable ».

Trois méthodes pour « échapper » les espaces sous Windows

Il existe trois approches distinctes pour « échapper » les chemins de fichiers sous Windows :

  • Encercler le chemin (ou une partie) avec des guillemets doubles (« ).
  • Ajouter un caractère d’insertion (^) avant chaque espace. (Cette méthode n’est fonctionnelle que dans l’invite de commande/CMD et peut ne pas fonctionner avec toutes les commandes.)
  • Ajouter un caractère d’accent grave (`) avant chaque espace. (Ceci fonctionne uniquement dans PowerShell, mais toujours.)

Voici comment employer chacune de ces techniques.

Utiliser les guillemets (« ) pour encadrer le chemin

La technique standard pour s’assurer que Windows interprète correctement un chemin de fichier est de l’entourer de guillemets doubles (« ). Pour reprendre notre exemple précédent, on exécuterait simplement la commande suivante :

type "C:Test FolderTest File.txt"

Il est également possible de ne mettre entre guillemets qu’une partie du chemin. Par exemple, si un fichier « File.txt » se trouvait dans ce répertoire, vous pourriez écrire :

type C:"Test Folder"File.txt

Cependant, ce n’est pas indispensable ; il est généralement plus simple d’encadrer le chemin entier avec des guillemets.

Cette méthode fonctionne aussi bien dans l’invite de commande (CMD) que dans Windows PowerShell.

Parfois : l’échappement des espaces avec le signe Caret (^)

Dans l’invite de commande, le caractère caret (^) peut être utilisé pour échapper les espaces, du moins en théorie. Il suffit de le placer avant chaque espace dans le nom du fichier. (Ce caractère se trouve sur la ligne numérique de votre clavier ; il s’obtient avec Maj + 6.)

Le problème est que, bien que cela soit censé fonctionner, et que cela fonctionne parfois, ce n’est pas toujours le cas. L’interprétation de ce caractère par l’invite de commande est incohérente.

Par exemple, si nous reprenons notre exemple précédent, la commande ci-dessous ne fonctionnerait pas :

type C:Test^ FolderTest^ File.txt

En revanche, si nous tentons d’ouvrir le fichier directement en saisissant son chemin dans l’invite de commande, on constate que le caractère caret échappe correctement les espaces :

C:Test^ FolderTest^ File.txt

Alors, quand cette méthode fonctionne-t-elle ? D’après nos observations, elle semble fonctionner avec certaines applications, mais pas avec toutes. Les résultats peuvent varier en fonction de la commande utilisée. La gestion de ce caractère par l’invite de commande est pour le moins capricieuse. Si cela vous intéresse, testez avec votre commande ; le résultat peut être positif ou négatif.

Pour plus de fiabilité, nous conseillons d’utiliser les guillemets doubles dans l’invite de commande, ou de basculer vers PowerShell et d’utiliser la méthode de l’accent grave décrite ci-dessous.

PowerShell : utiliser le caractère d’accent grave (`)

PowerShell utilise l’accent grave (`) comme caractère d’échappement. Il suffit de le placer avant chaque espace dans le nom du fichier. (Ce caractère se trouve au-dessus de la touche Tab et sous la touche Échap de votre clavier.)

type C:Test` FolderTest` File.txt

Chaque accent grave indique à PowerShell d’échapper le caractère suivant.

Notez que cette méthode ne fonctionne que dans l’environnement PowerShell. Dans l’invite de commande, il faudra utiliser le caractère caret.

Si vous êtes familier avec les systèmes d’exploitation de type UNIX, comme Linux et macOS, vous avez peut-être l’habitude d’utiliser la barre oblique inverse () pour échapper un espace. Windows l’utilise pour les chemins de fichiers standard, elle n’est donc pas fonctionnelle ici. Les caractères caret (^) et accent grave (`) sont les équivalents Windows de la barre oblique inverse, selon l’interface de commande utilisée.