【问题标题】:How can I extract a full path from the PATH environment variable?如何从 PATH 环境变量中提取完整路径?
【发布时间】: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 有这种能力吗?

【问题讨论】:

    标签: windows batch-file scripting cmd


    【解决方案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 循环

    【讨论】:

      猜你喜欢
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      相关资源
      最近更新 更多