如何从 PATH 环境变量中提取完整路径?

Posted

技术标签:

【中文标题】如何从 PATH 环境变量中提取完整路径?【英文标题】:How can I extract a full path from the PATH environment variable? 【发布时间】:2010-10-14 18:55:50 【问题描述】:

我想使用本机 cmd 工具从 PATH 环境变量中提取完整路径。考虑以下PATH 内容:

C:\Program Files\Windows 资源工具包\Tools\;C:\Perl\site\bin;C:\Perl\bin;C:\WI NDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\Program Files\Microsoft SQ L Server\90\Tools\binn\;C:\WINDOWS\system32\WindowsPowerShell\v1.0;C:\Program Fi les\Microsoft SQL Server\80\Tools\Binn\;C:\Program Files\Microsoft SQL Server\10 0\DTS\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\program 文件 es\nmap\;C:\Program Files\WinRAR\;C:\Program Files\QuickTime\QTSystem\;C:\Progra m Files\hydra-5.4-win\;C:\Program Files\john1701\run;C:\dig;;C:\cygwin;C:\wamp\b 在\mysql\mysql5.0.45\bin;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\Program Files\Tail4win;C:\Program Files\Overlook Fing 1.1\bin

我只想提取以下路径:

C:\Program Files\MySQL\MySQL Server 5.0\bin;

FOR 有这种能力吗?

【问题讨论】:

【参考方案1】:

您可以使用for 来标记;,但您需要注意其中包含; 的路径(因此需要引号)。总而言之,我会说此时您将使用大量代码构建一个非常脆弱的解决方案。

如果你想知道某个可执行文件在哪里,那么

for %%i in ("mysql.exe") do @echo.%%~$PATH:i

会告诉你(或者不会,如果它不在 PATH 中)。

更新:好的,我知道了。一个讨厌的小批处理文件如下:

@echo off
setlocal enabledelayedexpansion enableextensions
set p=%PATH%
:loop
for %%i in ("notepad.exe") do call :setvar "%%~$p:i"
if not :%x%:==:: (call :clearpath & goto loop)
goto :eof

:setvar
    set x=%~1
goto :eof

:clearpath
    echo %x%
    for %%x in ("!x!") do set d=%%~dpx
    set d=!d:~,-1!
    set p=!p:%d%=!
goto :eof

这将打印从PATH 找到notepad.exe 的所有匹配路径(我不知道的第一个程序在这里的两个地方)。根据您的问题进行相应调整。

:clearpath 只是从变量中删除找到的路径,然后我们再次尝试匹配,直到没有匹配。

也就是说,这还是很不好看。

【讨论】:

谢谢你的提示很有帮助 %~$PATH:I 搜索 PATH 环境变量中列出的目录并将 %I 扩展为找到的第一个的完全限定名称。如果未定义环境变量名称或未找到文件通过搜索,然后这个修饰符扩展为空字符串,如果无论如何都是 getrest 我知道文档是怎么说的。你的问题到底是什么? 路径中有多个 mysql 安装,您可以在问题 %~$PATH:I return only 第一个如何从同一路径获取其余 mysql 安装 无论如何你的小费很有帮助,非常感谢你的帮助,不要打扰我自己试试【参考方案2】:

如果你已经知道路径,为什么还要在 PATH 字符串中找到它?

或者换句话说,你知道识别该字符串的方法吗,因为它可能会因安装而异?

【讨论】:

我想让它尽可能地便携,因为我要在多台服务器上应用它,而且我认为每个安装在 %PATH% 内都有 mysql bath 可以,但是当用户安装 MySQL 时,是否允许他们选择任何安装路径?如果是这样,您如何知道 PATH 变量的哪一部分是 MySQL 安装路径? 我对此不确定,但我假设 mysql 在 %PATH%【参考方案3】:

或者,您可以使用 vbscript。

Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strSearch = objArgs(0)
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshPath = WshShell.Environment("SYSTEM")
strPath =WshPath("Path")

s = Split(strPath,";")
For i=LBound(s) To UBound(s)
    If InStr(1,s(i),strSearch,1) > 0 Then
        WScript.Echo s(i)
    End If 
Next    

将以上内容另存为 findpath.vbs 并在命令行中使用它来在 PATH 变量中查找所需的任何字符串:

c:\test> cscript //nologo findpath.vbs mysql

在批处理文件中,要获取结果,请使用 for 循环

【讨论】:

以上是关于如何从 PATH 环境变量中提取完整路径?的主要内容,如果未能解决你的问题,请参考以下文章

windows7中环境变量里的path路径是做啥用的?

环境变量里的path有啥用处阿

如何添加环境变量或路径添加到系统的Path里面

如何添加环境变量或路径添加到系统的Path里面

环境变量PATH, CLASSPATH的作用,以及它们的设置方法

如何添加环境变量或路径添加到系统的Path里面