Как уже упоминал @eryksun, вам нужно избегать специальных символов.
Обновление: и для предотвращения преждевременного расширения - будет использоваться отложенное расширение.
doskey list=cmd /v:on /c "for %p in ("!path:;=" "!") do @echo %~p"
Объяснение того, как это работает: мы не можем напрямую использовать решение с echo ^%path:;=^&echo.^%
, поскольку оно хранитсяв макросах уже расширен.Чтобы предотвратить это, я попытался использовать отложенное расширение (часть с cmd /v:on /c
).Казалось, почти работает, но без разделения на новые строки (добавление &
по некоторым причинам не работает с отложенным расширением).
Затем я начал искать способ разбиения !path!
и нашел изящный прием с заменой ;
на " "
(двойные кавычки) ("!path:;=" "!"
).Это расщепление было достаточно для простого for
(без опции /f
).Остальное очевидно.