此 Windows 命令的工作原理:echo %path:;=&echo.%

此 Windows 命令的工作原理:echo %path:;=&echo.%

寻找解决方案来打印pathWindows 命令行中的变量内的路径,我来到了解决方案。答案是这个命令:

echo %path:;=&echo.%

现在我想知道这是如何工作的。

答案1

这是一个我从未见过的有趣解决方案。让我试着解释一下:

  1. 要打印整个路径,请使用echo %path%。这将在一行上打印所有目录,并以分号 ( ;)分隔。
  2. 要在变量中搜索/替换字符串,请使用它将所有字符%path:a=b%替换为ab
  3. echo.用于打印换行符
  4. &用于分隔命令,例如echo line1&echo line2将打印两行
  5. 实际上,路径中的分号被替换为命令打印换行符。或者可能被解释为“;用空字符替换,进而,打印换行符。我找不到任何关于此内容的文档,所以这只是我的解释。坦率地说,我甚至不知道这是可能的,但事实就是如此。更新我对这一步的解释似乎不正确,更好的解释是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%

相关内容