我想在 Windows CMD 提示符下运行一个简单的单行来打印我的%PATH%变量,每行一个条目。
%PATH%
我试过这个:for /f "delims=;" %a in ("%path%") do echo %a但这只会打印第一个条目:
for /f "delims=;" %a in ("%path%") do echo %a
Z:\>for /f "delims=;" %a in ("%path%") do echo %a Z:\>echo c:\python25\. c:\python25\.
从上面的输出中也可以看到,这也打印了echo %a命令和输出。有没有办法阻止这种情况?
echo %a
如果我尝试类似的命令,我会得到所有条目,但仍然会得到echo %a输出垃圾邮件的结果。我不明白为什么下面会打印所有条目,但我的尝试%PATH%没有。我怀疑我不明白/F开关。
/F
Z:\>for %a in (1 2 3) do echo %a Z:\>echo 1 1 Z:\>echo 2 2 Z:\>echo 3 3
简单的方法是使用
for %a in ("%path:;=";"%") do @echo %~a
这适用于所有没有;路径且没有"单个元素的人 使用 path=C:\qt\4.6.3\bin;C:\Program Files;C:\documents & Settings 测试
;
"
但是“始终”的解决方案有点复杂 编辑:现在是一个工作变体
@echo off setlocal DisableDelayedExpansion set "var=foo & bar;baz<>gak;"semi;colons;^&embedded";foo again!;throw (in) some (parentheses);"unmatched ;-)";(too" set "var=%var:"=""%" set "var=%var:^=^^%" set "var=%var:&=^&%" set "var=%var:|=^|%" set "var=%var:<=^<%" set "var=%var:>=^>%" set "var=%var:;=^;^;%" rem ** This is the key line, the missing quote is intended set var=%var:""="% set "var=%var:"=""%" set "var=%var:;;="";""%" set "var=%var:^;^;=;%" set "var=%var:""="%" set "var=%var:"=""%" set "var=%var:"";""=";"%" set "var=%var:"""="%" setlocal EnableDelayedExpansion for %%a in ("!var!") do ( endlocal echo %%~a setlocal EnableDelayedExpansion )
我在那里做了什么? 我试图解决主要问题:引号内的分号应该被忽略,只有正常的分号应该替换为";"
";"
我使用批处理解释器本身为我解决了这个问题。
^;^;
set var=%var:"=""%"
var=foo & bar;;baz<>gak;;"semi^;^;colons^;^;^&embedded";;foo again!;;
;;