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

Windows 如何从path环境变量中提取完整路径?,windows,batch-file,scripting,cmd,Windows,Batch File,Scripting,Cmd,我想使用本机cmd工具从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服务器\90\Tools\binn\;C:\WINDOWS\system32\WindowsPowerShell\

我想使用本机cmd工具从
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服务器\90\Tools\binn\;C:\WINDOWS\system32\WindowsPowerShell\v1.0;C:\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:\程序文件 es\nmap\;C:\ProgramFiles\WinRAR\;C:\ProgramFiles\QuickTime\QTSystem\;C:\Progra m文件\hydra-5.4-win\;C:\ProgramFiles\john1701\run;C:\dig;;C:\cygwin;C:\wamp\b 在\mysql\mysql5.0.45\bin中;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\程序 文件\Tail4win;C:\Program Files\1.1\bin

我只想提取以下路径:

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


FOR
能做这样的事情吗?

如果您已经知道路径,为什么需要在路径字符串中找到它


或者换一种说法,考虑到字符串在不同的安装中可能会有所不同,您知道识别该字符串的方法吗?

您可以使用
for
处标记该字符串的路径在它们中(因此需要引号)。总而言之,我想说的是,在这一点上,您将使用大量代码构建一个非常脆弱的解决方案

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

for %%i in ("mysql.exe") do @echo.%%~$PATH:i
将告诉您(或者不知道,如果它不在
路径中)

更新:好的,我知道了。下面是一个小批量文件:

@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
这将打印找到
notepad.exe
PATH
中的所有匹配路径(我头上知道的第一个程序位于此处的两个位置)。根据您的问题进行相应的调整

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


也就是说,这仍然很不美观。

或者,您可以使用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%中包含mysql。是的,但是当用户安装mysql时,允许他们选择任何安装路径吗?如果是,,您如何知道PATH变量的哪一部分是MySQL安装路径?我不确定,但我假设MySQL位于%PATH%中谢谢您的提示非常有用%~$PATH:我搜索PATH环境变量中列出的目录,并将%I扩展到找到的第一个目录的完全限定名。如果环境变量名如果未定义或搜索未找到文件,则此修饰符将扩展为空字符串(如果是),以获取REST我知道文档对此的说明。你的问题到底是什么?路径中有几个mysql安装,你可以在问题%~$path中看到:我只返回第一个,如何从同一路径获取其余的mysql安装无论如何,你的提示非常有用,非常感谢你的帮助,不用麻烦,我自己试试