Como uma variável de ambiente Windows / CMD pode ser usada como argumento para o comando dir interno do CMD ?
>echo %pythonpath%
C:\Program Files\Python35\Scripts\
>dir %pythonpath%
The system cannot find the path specified.
Como uma variável de ambiente Windows / CMD pode ser usada como argumento para o comando dir interno do CMD ?
>echo %pythonpath%
C:\Program Files\Python35\Scripts\
>dir %pythonpath%
The system cannot find the path specified.
Respostas:
Sim, é porque seu valor contém espaço.
O intérprete, que é o Prompt de Comando, trata o espaço como separador entre os comandos.
Separadores são um dos vários caracteres especiais para o intérprete ( cmd.exe
).
Os espaços de aspas duplas são chamados de caracteres especiais de escape .
Outra maneira de escapar de um caractere especial é usar o sinal de intercalação ^
na frente dele, que é o prefixo (ou seja, prefixo) do caractere especial.
Por exemplo, você pode conseguir o mesmo emitindo:
dir C:\Program^ Files\Python35\Scripts\
Observe o cursor após "Programa"
Para contrastar e esclarecer, o caractere maior que >
também é um caractere especial para o Prompt de Comando. É um caractere especial porque tem uma função especial de redirecionar a saída , ou seja, funciona como um comando próprio, apesar de ser apenas um caractere.
Por isso, também deve ser escapado.
Por exemplo, você pode definir seu prompt para aparecer como uma seta indicativa escapando-o adequadamente:
prompt ^>
Resultaria em:
Portanto, é uma boa prática sempre citar duas vezes o argumento, que é o valor da variável, ou seja, "%Variable%"
para que o intérprete nunca espere uma confusão nesse contexto.
O argumento precisa ser colocado entre aspas duplas, pois o caminho em questão contém um espaço:
>dir "%pythonpath%"
Volume in drive C is System
Volume Serial Number is 0000-ABCD
Directory of C:\Program Files\Python35\Scripts
09.10.2016 08:13 <DIR> .
09.10.2016 08:13 <DIR> ..
23.09.2016 14:59 98.145 autopep8.exe
...