В поисках решения для печати путей внутри path
переменной в командной строке Windows я пришел к этому решению. ответ этой команды:
echo %path:;=&echo.%
теперь интересно, как это работает.
windows
command-line
yekanchi
источник
источник
echo.
может не работать .Ответы:
Это интересное решение, которое я никогда не видел раньше. Позвольте мне попытаться объяснить:
echo %path%
. Это выведет все каталоги в одну строку, разделенную точкой с запятой (;
)%path:a=b%
которая заменит всеa
символы наb
echo.
используется для печати новой строки&
используется для разделения команд, напримерecho line1&echo line2
, напечатает две строки;
ничем, а затем вывести новую строку». Я не могу найти никакой документации по этому вопросу, так что это просто моя интерпретация. Честно говоря, я даже не знал, что это возможно, но вот, пожалуйста. ОБНОВЛЕНИЕ Моя интерпретация этого шага, похоже, неверна , и ее лучше объяснить с помощью wizzwizz4 .источник
echo path
? %% используется для переменных?set greeting=Hello
и тогдаecho %greeting%
. Заблуждение,PATH
случается, что это и команда, и переменная, поэтому ввод командыpath
илиecho %path%
будет иметь один и тот же результат.$PATH
Например, другие языки, такие как bash .echo.
не является «командой для печати новой строки». Это интерпретатор команд Microsoft для Windows NTcmd
; иecho.
просто команда для печати элемента пути, гарантирующая, что если элемент пути пуст, он не переключается на другие функцииecho
. Первоеecho
действительно должно бытьecho.
слишком.Это использует подстановку переменных командной строки.
%path:;=&echo.%
означает "%path%
, но замените все;
s на&echo.
". Это означает, что приset path=C:\Windows\System32;C:\Windows\;;C:\Python37;
:будет выглядеть так:
Поскольку
&
это разделитель команд, это эквивалентно:Из-за причуд DOS Batch,
echo.
идентичен, заecho
исключением случаев, когда после него ничего нет. Если это так, он просто ничего не печатает, вместо того, чтобы сообщать, включенECHO
он или нет. Это сделает вывод:Действительно, следует
echo.%path:;=&echo.%
учитывать случай, когда%PATH%
начинается с a;
, но в любом случае эта команда довольно умная.Попадая в подробные детали, действительно
echo(
следует использовать вместоecho.
. Это потому, чтоecho.
могут возникнуть проблемы, когда у вас есть файл с именемecho
, и он медленный, потому что он должен проверять диск (%CD%
и я думаю, что также все%PATH%
) каждый раз, когда он запускается. (Я не имею копию Windows , так что я не могу проверить это сам, это просто%CD%
или где - нибудь в%PATH%
том , что наличиеecho
файла будет влиятьecho.
и то , что он делает?)источник
echo)
, но я действительно не помню. ;-(echo.
это тот, который люди использовали чаще всего, много лет назад. Это один во многих книгах. Эффективность не проблема. Странное поведение, когда существуют разные файлы. Когда я написал 32-битную замену для 16-битнойcmd
в OS / 2, нарушение имен команд в этих знаках препинания и это крайне нерегулярное поведение при разборе - это одна из вещей, которые я намеренно не дублировал, и которую я поставил на документированный список отличий.echodot
Вместо этого я сделал внешнюю команду, которая может быть псевдонимомecho.
по желанию.echo(
попадаете на сторонний форум с сообщением о том, что это единственная безопасная версия.