答案1
这是一个我从未见过的有趣解决方案。让我试着解释一下:
- 要打印整个路径,请使用
echo %path%
。这将在一行上打印所有目录,并以分号 (;
)分隔。 - 要在变量中搜索/替换字符串,请使用它将所有字符
%path:a=b%
替换为a
b
echo.
用于打印换行符&
用于分隔命令,例如echo line1&echo line2
将打印两行- 实际上,路径中的分号被替换为命令打印换行符。或者可能被解释为“
;
用空字符替换,进而,打印换行符。我找不到任何关于此内容的文档,所以这只是我的解释。坦率地说,我甚至不知道这是可能的,但事实就是如此。更新我对这一步的解释似乎不正确,更好的解释是wizzwizz4。
答案2
这是使用命令行变量替换。%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 批处理的特性,echo.
与echo
除了当它后面没有任何内容时。如果是这种情况,它只会打印任何内容,而不是告诉您是ECHO
打开还是关闭。这将使输出:
C:\Users\wizzwizz4> echo %path:;&echo.%
C:\Windows\System32
C:\Windows\
C:\Python37
C:\Users\wizzwizz4>
实际上,它应该echo.%path:;=&echo.%
考虑以%PATH%
开头的情况;
,但无论如何,这个命令非常聪明。
进入详细细节,真的 echo(
应该使用 而不是echo.
。这是因为echo.
当您有一个名为 的文件时可能会出现问题echo
,并且速度很慢,因为它每次运行时都必须检查磁盘(%CD%
我认为也是所有的%PATH%
)。(我没有 Windows 的副本,所以我自己无法检查;是只有%CD%
还是 中的任何地方%PATH%
存在文件echo
都会影响echo.
,它会做什么?)
答案3
解释器连续执行 2 次。第 1 次执行所有参数替换。但参数替换的一个鲜为人知的功能是,对于每个单独的参数,在参数名称后使用语法 :STRING1=STRING2 指示二次替换。如果 STRING1 出现多次,则重复多次。只有这样,第 2 次才会解释该行并执行。尝试以下操作来揭开谜团:
回显%路径:WINDOWS=UNIX%