Como escapar de espaços em caminhos de arquivo na linha de comando do Windows

Ambientes de linha de comando, como o Prompt de Comando do Windows e o PowerShell, usam espaços para separar comandos e argumentos, mas os nomes de arquivos e pastas também podem conter espaços. Para especificar um caminho de arquivo com um espaço dentro dele, você precisará “escape” dele.

Linha de comando 101: por que você precisa escapar de espaços

“Escape” de um caractere muda seu significado. Por exemplo, o escape de um espaço fará com que o shell o trate como um caractere de espaço padrão em vez de um caractere especial que separa os argumentos da linha de comando.

Por exemplo, digamos que você tenha um arquivo de texto do qual deseja ver o conteúdo. Você pode fazer isso com o comando type. Supondo que o arquivo de texto esteja em C:TestFile.txt, o seguinte comando no Prompt de Comando mostrará seu conteúdo:

type C:TestFile.txt

Excelente. Agora, e se você tiver o mesmo arquivo em C:Test FolderTest File.txt? Se você tentar executar o comando abaixo, não funcionará – esses espaços no caminho do arquivo estão atrapalhando.

type C:Test FolderTest File.txt

A linha de comando pensa que você está tentando procurar um arquivo chamado C:Test e diz que “não foi possível encontrar o caminho especificado”.

Três maneiras de escapar de espaços no Windows

Existem três maneiras diferentes de escapar de caminhos de arquivo no Windows:

Colocando o caminho (ou partes dele) entre aspas duplas ( ”).
Adicionando um caractere de acento circunflexo ( ^ ) antes de cada espaço. (Isso só funciona no prompt de comando/CMD e parece não funcionar com todos os comandos.)
Adicionando um caractere de acento grave ( ` ) antes de cada espaço. (Isso só funciona no PowerShell, mas sempre funciona.)

Mostraremos como usar cada método.

Coloque o caminho entre aspas ( ”)

A maneira padrão de garantir que o Windows trate um caminho de arquivo corretamente é colocá-lo entre aspas duplas ( ” ). Por exemplo, com nosso comando de exemplo acima, apenas executaríamos o seguinte:

type "C:Test FolderTest File.txt"

Na verdade, você pode colocar partes do caminho entre aspas, se preferir. Por exemplo, digamos que você tenha um arquivo chamado File.txt nessa pasta. Você poderia executar o seguinte:

type C:"Test Folder"File.txt

No entanto, isso não é necessário — na maioria dos casos, você pode usar apenas aspas em todo o caminho.

Essa solução funciona tanto no ambiente tradicional de prompt de comando (CMD) quanto no Windows PowerShell.

Às vezes: Use o caractere acento circunflexo para escapar de espaços ( ^ )

No prompt de comando, o caractere de acento circunflexo ( ^ ) permitirá que você escape de espaços – em teoria. Basta adicioná-lo antes de cada espaço no nome do arquivo. (Você encontrará esse caractere na linha numérica do teclado. Para digitar o caractere de cursor, pressione Shift+6.)

Aqui está o problema: embora isso deva funcionar, e às vezes funciona, não funciona o tempo todo. O manuseio do prompt de comando desse personagem é estranho.

Por exemplo, com nosso comando de exemplo, você executaria o seguinte e não funcionaria:

type C:Test^ FolderTest^ File.txt

Por outro lado, se tentarmos abrir nosso arquivo diretamente digitando seu caminho no prompt de comando, podemos ver que o caractere de acento circunflexo escapa dos espaços corretamente:

C:Test^ FolderTest^ File.txt

Então, quando isso funciona? Bem, com base em nossa pesquisa, parece funcionar com alguns aplicativos e não com outros. Sua milhagem pode variar dependendo do comando que você está usando. O manuseio do prompt de comando desse personagem é estranho. Experimente com qualquer comando que estiver usando, se estiver interessado – pode ou não funcionar.

Para consistência, recomendamos que você use aspas duplas no prompt de comando ou mude para o PowerShell e use o método de acento grave abaixo.

PowerShell: use o caractere de acento grave ( ` )

O PowerShell usa o caractere de acento grave ( ` ) como seu caractere de escape. Basta adicioná-lo antes de cada espaço no nome do arquivo. (Você encontrará esse caractere acima da tecla Tab e abaixo da tecla Esc no teclado.)

type C:Test` FolderTest` File.txt

Cada caractere de acento grave informa ao PowerShell para escapar do caractere a seguir.

Observe que isso só funciona no ambiente do PowerShell. Você terá que usar o caractere de acento circunflexo no prompt de comando.

Se você estiver familiarizado com sistemas operacionais do tipo UNIX, como Linux e macOS, talvez esteja acostumado a usar o caractere de barra invertida ( ) antes de um espaço para escapar dele. O Windows usa isso para caminhos de arquivo normais, então não funciona—-os caracteres de acento circunflexo ( ^ ) e acento grave ( ` ) são a versão do Windows da barra invertida, dependendo de qual shell de linha de comando você está usando.