我如何从PATH环境variables中提取完整path?

我想从本地cmd工具中提取PATH环境variables的完整path。 考虑以下PATH内容:

C:\ Program Files \ Windows Resource Kits \ 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:\ ProgramFiles \ 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 fil es \ nmap \; C:\ Program Files \ WinRAR \; C:\ Program Files \ QuickTime \ QTSystem \; C:\ Program Files \ hydra-5.4-win \; C:\ Program Files \ john1701 \ run; C:\ dig ;; C:\ cygwin; C:\ wamp \ b in \ 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

我只想提取以下path:

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

是能够这样的事情吗?

Solutions Collecting From Web of "我如何从PATH环境variables中提取完整path?"

你可以用来标记在; 但你需要照顾有一个路径, 在他们(因此需要报价)。 总而言之,我会说在这一点上你会用很多代码来构建一个非常脆弱的解决方案。

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

 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 

这将打印找到notepad.exe PATH所有匹配的路径(我知道的第一个程序是在我头顶的两个地方)。 适应你的问题。

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

这就是说,这还是非常漂亮的。

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

换句话说,你知道一种识别字符串的方法吗?

或者,你可以使用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循环