Como faço para escapar de espaços na linha de comando no Windows sem usar aspas?

74

Por exemplo, qual é a alternativa para este comando sem aspas:

CD "c:\Documents and Settings"

A razão pela qual não quero usar aspas é que este comando FUNCIONA:

   SVN add mypathname\*.*

mas este comando NÃO funciona:

   SVN add "mypathname\*.*"

O problema é que quando eu altero o mypathname para um caminho com espaços nele eu preciso citar a coisa toda. Por exemplo:

SVN add "c:\Documents and Settings\username\svn\*.*"

Mas quando eu tento isso, recebo a seguinte mensagem de erro:

svn: warning: 'c:\Documents and Settings\username\svn\*.*' not found
    
por David 04.05.2011 / 14:54

6 respostas

44

Quase tudo funciona para mim, mas você talvez tenha tentado line5 .. escapar do espaço com um símbolo de cursor (^)

1 C:\Documents and Settings\user>cd ..

2 C:\Documents and Settings>cd ..

3 C:\>cd Documents and Settings

4 C:\Documents and Settings>cd..

5 C:\>cd Documents^ and^ Settings

6 C:\Documents and Settings>cd..

7 C:\>cd C:\documents and settings

8 C:\Documents and Settings>cd..

9 C:\>

Ou por ex. abaixo, onde o cursor realmente faz toda a diferença.

Parece a partir de baixo, como o símbolo de cursor pode ser sua resposta, veja a linha 3 abaixo.

1 C:\>"c:\Documents and Settings\a.bat"
gaga

2 C:\>c:\Documents and Settings\a.bat
'c:\Documents' is not recognized as an internal or external command,
operable program or batch file.

3 C:\>c:\Documents^ and^ Settings\a.bat
gaga

C:\>
    
por 04.05.2011 / 18:59
31

Descobri que colocar cotações em torno de apenas uma parte do local funciona. No seu caso:

SVN add C:\"Documents and Settings"\username\svn\*.*

Embora isso use aspas, o importante é notar que os asteriscos estão fora das aspas, então eles ainda funcionam corretamente.

    
por 24.04.2013 / 09:45
22

Apesar das respostas darem a ilusão de que funciona, o fato é que você não pode infiltrar espaços em argumentos comuns. Isso é fácil de provar:

  1. Salve " echo %1 " como test.bat . Este arquivo em lote gerará o primeiro argumento que o cmd nos passa.

  2. Agora, experimente e execute test.bat , definindo o valor de %1 para foo bar . (Observe que há um caractere de espaço entre foo e bar .)

  3. Teste e erro por alguns anos e perceba que não há como fazer isso . As pessoas vão sugerir a fuga usando ^ , mas test.bat foo^ bar não produzirá foo bar .

Portanto, não é possível obter a saída foo bar , e o mais próximo que podemos obter é executar test.bat foo" "bar , que produz foo" "bar ou executar test.bat "foo bar" , que produz "foo bar" .

Agora, a razão pela qual as outras respostas aparecem para o trabalho é porque cd faz sua própria análise adicional, divergindo do comportamento da passagem usual de argumentos (a usual %1 , %2 , %3 e etc em arquivos em lote típicos).

Por exemplo, considere o comando peculiar:

cd c:\documents and settings \some folder with spaces

Por que isso funciona? Isto é devido a cd propriamente dito fazendo algo equivalente a juntar os 7 usuais argumentos em um argumento lógico. De acordo com o argumento cmd, passando as normas, vemos 7 argumentos:

  1. c:\documents
  2. and
  3. settings
  4. \some
  5. folder
  6. with
  7. spaces

É como se cd tivesse juntado todos os 7 argumentos em um argumento lógico, fazendo algo parecido com array.join(" ") , que produz o caminho:

c:\documents and settings \some folder with spaces

Observe que esse comportamento é peculiar a cd only (e algumas outras funções). Não tem nada a ver com a discussão usual.

De fato, cd tem outra peculiaridade. Lembre-se de que afirmamos acima que não conseguimos obter a saída foo bar ? A saída mais próxima que podemos obter é executando:

test.bat foo" "bar

que produz foo" "bar ou:

test.bat "foo bar"

que produz "foo bar" ou:

test.bat "foo "bar

que produz "foo "bar ou:

test.bat foo" bar"

que produz foo" bar" ou:

test.bat "foo b"ar

que produz "foo b"ar ou:

test.bat fo"o bar"

que produz fo"o bar" ou:

test.bat fo"o ba"r

que produz fo"o ba"r ou:

test.bat "fo"o" bar"

que produz "fo"o" bar" ou:

test.bat "f""o""o"" ""b""a""r":

que produz "f""o""o"" ""b""a""r" ou mesmo:

test.bat """"f"""o""""o"" ""ba"""r"""""""""":

que produz """"f"""o""""o"" ""ba"""r"""""""""" .

Todos os exemplos acima têm uma semelhança, que é produzir foo bar depois de compensarmos os caracteres " . O autor de cd deve ter percebido isso também ... se inferirmos do comportamento peculiar de cd que apaga todos os " que ele recebe , permitindo que todos esses comandos trabalho:

  • cd c:\documents and settings

  • cd "c:\documents and settings"

  • cd "c:"\"documents and settings"

  • cd c:\"documents" "and" "settings"

  • cd c:\"docu"ments an"d set"tings"

  • cd c:"\"docu"ments an"d set"ti"""ngs

  • cd "c"":""\"docu"ments an"d set"ti"""ngs

  • cd "c"":""\"do""cu"me"nts a"n""d set"ti"""ngs

  • cd c"""":""""\"""d"""oc""""u"me"""""nt"s a"n""d set"""""""ti""""ngs

por 26.08.2015 / 04:01
7

O nome de arquivo curto parece funcionar como uma brisa.

"E: \ Progra ~ 1 \ Java \ Eclipse \ eclipse.exe" -vmargs -Xms1024m -Xmx2048m

Para aumentar a memória ...;)

    
por 19.04.2014 / 09:51
3

Use o nome abreviado 8.3. Por exemplo:

If exist c:\docume~1 goto :Ifoundthesucker
    
por 03.10.2012 / 16:47
1

Para os que estão falando sobre a substituição do 8.3, você sabia dessas duas coisas:

  • 8.3 pode ser definido como desativado (ou ativado) no NTFS, de modo que nem sempre existe
  • 8.3 o nome de um arquivo / pasta pode ser alterado sem ser notificado apenas pela criação, renomeação ou exclusão de outras coisas na mesma pasta

Portanto, c:\docume~1 pode apontar para:

  • Não onde (ser inválido)
  • A pasta que você deseja
  • Outra pasta
  • Uma pasta variável ao longo do tempo

Não é seguro, a menos que você obtenha o nome abreviado e o use em operações atômicas.

Disse que, é muito raro eles mudarem, mas é muito comum eles não existirem.

Se você quiser saber se existe 8.3 para uma pasta / arquivo específico, teste-o com paramenter / X em um comando dir ... ou encapsule-o em a para obter apenas essa parte, etc.

Se mais sobre como ativar / desativar o 8.3 no NTFS, consulte M $ web:

link

    
por 12.05.2017 / 10:43