Windows命令的工作方式:echo%path:; =&echo。%


Answers:


22

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

  1. 要打印整个路径,请使用echo %path%。这会将所有目录打印在用分号(;)分隔的一行上
  2. 要搜索/替换变量中的字符串,请使用%path:a=b%将所有a字符替换为b
  3. echo. 用于打印换行符
  4. &用于分隔命令,例如echo line1&echo line2将打印两行
  5. 实际上,路径中的分号将替换为打印换行符的命令。或者,也许它被解释为“ ;什么都代替,然后打印换行符”。我找不到任何文档,所以这只是我的解释。坦白说,我什至不知道那是可能的,但是你去了。更新我对此步骤的解释似乎不正确,而wizzwizz4可以更好地解释。

%%符号用于什么,我们不能告诉echo path吗?%%用于变量?
yekanchi '18 -10-23

1
是的,没错,这些用于获取变量的值。例如:set greeting=Hello然后echo %greeting%。令人困惑的是,PATH碰巧同时是命令和变量,因此键入command pathecho %path%将具有相同的结果。
Berend

这个语法叫什么?是正则表达式吗?或仅在Windows CMD中使用的东西
yekanchi '18

我不确定是否有名称,这只是变量在DOS中的工作方式。例如使用其他语言,例如bash $PATH
Berend

2
Berend与DOS无关。而echo.不是“打印换行符的命令”。这是Microsoft用于Windows NT 的命令解释器cmd;并且echo.只是打印路径元素的命令,确保路径元素为空不会切换到的其他功能echo。第一个echo确实应该echo.也是。
JdeBP '18 / 10/23

30

这是使用命令行变量替换。%path:;=&echo.%表示“ %path%,但将所有替换;&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 Batch的怪异之处,之后没有任何内容echo.echo 其余均与之相同。如果是这样,它只会打印任何内容,而不会告诉您ECHO是打开还是关闭。这将使输出:

C:\Users\wizzwizz4> echo %path:;&echo.%
C:\Windows\System32
C:\Windows\

C:\Python37

C:\Users\wizzwizz4> 

确实,应该echo.%path:;=&echo.%考虑以%PATH%开头的情况;,但是无论如何,此命令都非常巧妙。


进入详细的detalias时,实际上 echo(应该使用代替echo.。这是因为echo.当您拥有一个名为的文件时可能会遇到问题echo,并且速度较慢,因为它每次运行时都必须检查磁盘(%CD%而且我也想检查所有磁盘%PATH%)。(我没有Windows的拷贝,所以我不能检查它自己,它只是%CD%或任何地方%PATH%的存在echo文件会影响echo.,并且它有什么作用?)


这是Microsoft / IBM命令解释器在多个操作系统上的长期行为,并不特定于批处理脚本。正如我在superuser.com/a/310157/38062年前指出的那样,除空格外,还有几个标点符号算作命令名终止字符。
JdeBP '18

@JdeBP我认为效率更高的方法之一是echo),但是我真的不记得了。;-(
wizzwizz4

3
echo.是人们多年前最常使用的一种。这是很多书中的一本。效率不是问题。各种文件碰巧存在时的古怪行为。当我为cmdOS / 2中的16位代码编写32位替换代码时,在这些标点符号处中断命令名称以及这种高度不规则的解析行为是我故意不重复的事情之一,我将其放在文档中差异列表。我echodot改用外部命令,可以echo.根据需要使用别名。
JdeBP '18年

@JdeBP听起来真的很有趣!您认为可以记录其中的一些内容吗?
wizzwizz4 '18 / 10/23

如果您遵循各种评论链接,那么您最终会获得第三方论坛消息,这echo(是唯一安全的版本。
尼尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.