Как можно использовать переменную среды Windows/CMD в качестве аргумента для встроенной команды CMD dir?
>echo %pythonpath%
C:\Program Files\Python35\Scripts\
>dir %pythonpath%
The system cannot find the path specified.
Как можно использовать переменную среды Windows/CMD в качестве аргумента для встроенной команды CMD dir?
>echo %pythonpath%
C:\Program Files\Python35\Scripts\
>dir %pythonpath%
The system cannot find the path specified.
Да, это потому, что его значение содержит пространство.
Интерпретатор, то есть командная строка, обрабатывает пространство как разделитель между командами.
Разделители являются одним из нескольких специальных символов для интерпретатора (cmd.exe
).
Двойные кавычки называются экранированием специальных символов.
Еще один способ экранирования специального символа - использовать перед ним символ вставки ^
, то есть добавлять (то есть ставить префикс) каретку к специальному символу.
Например, вы можете добиться того же, выполнив:
dir C:\Program^ Files\Python35\Scripts\
Обратите внимание на каретку после "Программы"
Чтобы контрастировать и уточнить, символ «больше» >
также является специальным символом для командной строки. Это специальный символ, потому что у него есть специальная функция перенаправления вывода, то есть он работает как отдельная команда, несмотря на то, что он всего лишь один символ.
Так что это также должно быть экранировано.
Например, вы можете настроить подсказку для отображения в виде показательной стрелки, правильно ее экранируя:
prompt ^>
Результатом будет:
Поэтому хорошей практикой является всегда заключать в кавычки аргумент, то есть значение переменной, что означает "%Variable%"
поэтому интерпретатор никогда не ожидает путаницы в этом контексте.
Аргумент должен быть заключен в двойные кавычки, поскольку рассматриваемый путь содержит пробел:
>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
...