1

我的任务与Print Windows %PATH% 相同,每个条目都在新行

我有一个任务:在新行上打印 %PATH% 变量的所有条目。例如:

C:\Program Files\
C:\Windows
C:\Windows\System32

等等...

这可以通过这里echo %path:;=&echo.%解释

我想使用DOSKEY将它分配给命令别名

但是以下脚本对我来说失败了

DOSKEY list=echo %path:;=&echo.%

它只是在我定义 DOSKEY 时打印所有路径,之后,当我尝试调用list命令时,它就不起作用了。

4

1 回答 1

2

正如@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选项)来说已经足够了。其余的很明显。

于 2019-04-22T09:06:49.433 回答