В поисках решения для печати путей внутри переменной path
в командной строке Windows я пришел к этому решению. ответ этой команды:
echo %path:;=&echo.%
теперь интересно, как это работает.
В поисках решения для печати путей внутри переменной path
в командной строке Windows я пришел к этому решению. ответ этой команды:
echo %path:;=&echo.%
теперь интересно, как это работает.
Это использует подстановку переменных командной строки. %path:;=&echo.%
означает " %path%
, но замените все ;
s на &echo.
". Это означает, что при set path=C:\Windows\System32;C:\Windows\;;C:\Python37;
:
echo %path:;=&echo.%
будет выглядеть так:
echo C:\Windows\System32&echo.C:\Windows\&echo.&echo.C:\Python37&echo.
Поскольку &
является разделителем команд, это эквивалентно:
echo C:\Windows\System32
echo.C:\Windows\
echo.
echo.C:\Python37
echo.
Из-за причуд DOS Batch, echo.
идентично echo
за исключением случаев, когда после него ничего нет. Если это так, он просто ничего не печатает, вместо того, чтобы сообщать вам, включено или выключено ECHO
. Это сделает вывод:
C:\Users\wizzwizz4> echo %path:;&echo.%
C:\Windows\System32
C:\Windows\
C:\Python37
C:\Users\wizzwizz4>
Действительно, это должно быть echo.%path:;=&echo.%
Чтобы учесть случай, когда %PATH%
начинается с a ;
, но эта команда довольно умная в любом случае.
Попадание в подробные детали, действительно echo(
следует использовать вместо echo.
. Это потому что echo.
Могут возникнуть проблемы, когда у вас есть файл с именем echo
, и он медленный, потому что он должен проверять диск (%CD%
и, я думаю, также весь %PATH%
) при каждом запуске. (У меня нет копии Windows, поэтому я не могу проверить ее самостоятельно; это просто %CD%
или где-нибудь в %PATH%
что присутствие echo
файла повлияет на echo.
И что оно делает?)
Это интересное решение, которое я никогда не видел раньше. Позвольте мне попытаться объяснить:
echo %path%
. Это выведет все каталоги в одну строку, разделенную точкой с запятой (;
)%path:a=b%
, который заменит все символы с a
b
используется для печати новой строкиecho.
используется для разделения команд, например, &
выведет две строкиecho line1&echo line2
ни с чем, а затем выведите новую строку '. Я не могу найти никакой документации по этому вопросу, так что это просто моя интерпретация. Честно говоря, я даже не знал, что это возможно, но вот, пожалуйста. ОБНОВЛЕНИЕ Моя интерпретация этого шага, похоже, неверна и лучше объясняется wizzwizz4 .