我和Print Windows %PATH% with every entry on new line有同样的任务
我有一个任务:在新行上打印%PATH%变量的所有条目。例如:
C:\Program Files\
C:\Windows
C:\Windows\System32
等等...
这可以通过echo %path:;=&echo.%
实现,正如here所解释的那样
我想使用DOSKEY将它分配给命令别名
但是下面的脚本对我来说失败了
DOSKEY list=echo %path:;=&echo.%
在我定义DOSKEY时,它只打印所有路径,之后,当我尝试调用list
命令时,它只是不起作用。
正如@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
选项)来说已经足够了。其余的很明显。