Как можно использовать переменную среды Windows/CMD в качестве аргумента для встроенной команды CMD dir?

>echo %pythonpath%
C:\Program Files\Python35\Scripts\

>dir %pythonpath%
The system cannot find the path specified.

2 ответа2

1

Да, это потому, что его значение содержит пространство.

Интерпретатор, то есть командная строка, обрабатывает пространство как разделитель между командами.

Разделители являются одним из нескольких специальных символов для интерпретатора (cmd.exe).

Двойные кавычки называются экранированием специальных символов.

Еще один способ экранирования специального символа - использовать перед ним символ вставки ^ , то есть добавлять (то есть ставить префикс) каретку к специальному символу.

Например, вы можете добиться того же, выполнив:

dir C:\Program^ Files\Python35\Scripts\

Обратите внимание на каретку после "Программы"

Чтобы контрастировать и уточнить, символ «больше» > также является специальным символом для командной строки. Это специальный символ, потому что у него есть специальная функция перенаправления вывода, то есть он работает как отдельная команда, несмотря на то, что он всего лишь один символ.

Так что это также должно быть экранировано.

Например, вы можете настроить подсказку для отображения в виде показательной стрелки, правильно ее экранируя:

prompt ^>

Результатом будет:

Пример снимка экрана, иллюстрирующий экранирование специальных символов

Поэтому хорошей практикой является всегда заключать в кавычки аргумент, то есть значение переменной, что означает "%Variable%" поэтому интерпретатор никогда не ожидает путаницы в этом контексте.

0

Аргумент должен быть заключен в двойные кавычки, поскольку рассматриваемый путь содержит пробел:

>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
...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .