使用Windows命令提示符,我可以回显%path%并在单独的行上获取结果路径吗?像这样的东西,但对于Windows:
echo $path | tr ':' '\n'
Run Code Online (Sandbox Code Playgroud)
我可以使用vanilla cmd执行此操作,还是需要PowerShell或js脚本?
示例echo%path%output:
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\Program Files\Microsoft SQL Server\90\DTS\Binn\;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\;
Run Code Online (Sandbox Code Playgroud)
期望的输出:
C:\WINDOWS\system32;
C:\WINDOWS;
C:\WINDOWS\System32\Wbem;
C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;
C:\Program Files\Microsoft SQL Server\90\DTS\Binn\;
C:\Program Files\Microsoft SQL Server\90\Tools\binn\;
C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\;
C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\;
Run Code Online (Sandbox Code Playgroud) 如何检查PATH环境变量中是否已存在目录?这是一个开始.但是,我已经设法使用下面的代码,它回显了%PATH%中的第一个目录.由于这是一个FOR循环,你会认为它将枚举%PATH%中的所有目录,但它只获得第一个目录.
有没有更好的方法呢?像%PATH%变量上运行的find或findstr之类的东西?我只想检查%PATH%目录列表中是否存在目录,以避免添加可能已存在的内容.
FOR /F "delims=;" %%P IN ("%PATH%") DO (
@ECHO %%~P
)
Run Code Online (Sandbox Code Playgroud) 在使用批处理文件多年后,我惊讶地发现等号'='被认为是一个参数分隔符.
鉴于此测试脚本:
echo arg1: %1
echo arg2: %2
echo arg3: %3
Run Code Online (Sandbox Code Playgroud)
和调用:
test.bat a=b c
Run Code Online (Sandbox Code Playgroud)
输出是:
arg1: a
arg2: b
arg3: c
Run Code Online (Sandbox Code Playgroud)
为什么这样,怎么可以避免?我不希望脚本的用户考虑到这个怪癖并引用"a = b",这是违反直觉的.
此批处理脚本在Windows 7上运行.
=====编辑=====
更多背景:我在编写bat文件以启动Java应用程序时遇到了这个问题.我想在bat文件中使用一些args,然后将其余的传递给java应用程序.所以我的第一次尝试是做shift,然后重建args列表(因为%*不受影响shift).它看起来像这样,就在我发现问题的时候:
rem Rebuild the args, %* does not work after shift
:args
if not "%1" == "" (
set ARGS=!ARGS! %1
shift
goto args
)
Run Code Online (Sandbox Code Playgroud)
下一步是不再使用shift,而是通过一次删除一个字符%*直到遇到空格来手动实现移位:
rem Remove the 1st arg if it was the profile
set ARGS=%*
if not "%FIRST_ARG%" == "%KNOA_PROFILE%" goto …Run Code Online (Sandbox Code Playgroud) 我刚检查了stackoverflow,它似乎非常有用,并且在Windows XP上运行良好.但是使用Windows 7它并不适用于某些不明原因.
该PATH变量看起来是这样的
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\QuickTime\QTSystem\
Run Code Online (Sandbox Code Playgroud)
它显然包含\以及我用于分割包含此FOR循环的批处理的分号:
FOR /F "delims=;" %%A IN ("%PATH%") DO (
echo %%A
)
Run Code Online (Sandbox Code Playgroud)
执行不会导致任何错误,但它只提供一个(第一个)令牌
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common
Run Code Online (Sandbox Code Playgroud)
我不知道为什么FOR会终止并玩弄网上建议的几个变种但没有完成这项工作.
任何帮助将受到高度赞赏.
基督教
使用批处理,我希望能够将一个变量分成两个或三个部分,当有一个符号除以它们.例如,如果我有这样的字符串:var1; var2;
我如何让var1变为变量,var2变为另一个变量.
提前致谢
这与我的开发项目没有直接关系,但我很好奇.最近,经过大量的打击,我将构建问题追溯到系统PATH变量中的无效条目.在我的机器上,它包含大约20个条目.我猜测必须有一种更简单的方法来验证每个条目的有效性.谁能建议一种方法来检查这个?谢谢你的时间.