yek*_*chi 28 windows command-line
path
在 Windows 命令行中搜索在变量内打印路径的解决方案我来到了这个解决方案。答案是这个命令:
echo %path:;=&echo.%
Run Code Online (Sandbox Code Playgroud)
现在我想知道这是如何工作的。
wiz*_*zz4 31
这是使用命令行变量替换。%path:;=&echo.%
表示 " %path%
,但将所有;
s替换为&echo.
"。这意味着,与set path=C:\Windows\System32;C:\Windows\;;C:\Python37;
:
echo %path:;=&echo.%
Run Code Online (Sandbox Code Playgroud)
变成:
echo C:\Windows\System32&echo.C:\Windows\&echo.&echo.C:\Python37&echo.
Run Code Online (Sandbox Code Playgroud)
由于&
是命令分隔符,这相当于:
echo C:\Windows\System32
echo.C:\Windows\
echo.
echo.C:\Python37
echo.
Run Code Online (Sandbox Code Playgroud)
由于 DOS Batch 的怪癖,除非后面没有任何内容,否则echo.
与此相同。如果是这种情况,它只是不打印任何内容,而不是告诉您是打开还是关闭。这将使输出:echo
ECHO
C:\Users\wizzwizz4> echo %path:;&echo.%
C:\Windows\System32
C:\Windows\
C:\Python37
C:\Users\wizzwizz4>
Run Code Online (Sandbox Code Playgroud)
真的,应该echo.%path:;=&echo.%
考虑%PATH%
以 a 开头的情况;
,但无论如何这个命令非常聪明。
进入详细的细节,真的 echo(
应该使用而不是echo.
. 这是因为echo.
当您有一个名为 的文件时可能会出现问题echo
,并且速度很慢,因为它每次运行时都必须检查磁盘(%CD%
我认为也是所有%PATH%
)。(我没有 Windows 的副本,所以我不能自己检查它;是文件的存在会影响它的%CD%
任何地方或任何地方,它有什么作用?)%PATH%
echo
echo.
Ber*_*end 24
这是我以前从未见过的有趣解决方案。让我试着解释一下:
echo %path%
. 这将在以分号 ( ;
)分隔的单行上打印所有目录%path:a=b%
which 将替换所有a
字符b
echo.
用于打印换行符&
用于分隔命令,例如echo line1&echo line2
将打印两行;
用空替换,然后打印一个换行符”。我找不到关于此的任何文档,所以这只是我的解释。坦率地说,我什至不知道这是可能的,但是你去了。更新我对这一步的解释似乎是错误的,wizzwizz4更好地解释了。