如何从 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 环境变量中提取完整路径?的主要内容,如果未能解决你的问题,请参考以下文章