我想使用native 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 fil 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
是否有能力做这件事?
答案 0 :(得分:4)
您可以使用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
只是从变量中删除找到的路径,然后我们再次尝试匹配,直到没有匹配为止。
那就是说,这仍然非常不合适。
答案 1 :(得分:1)
如果您已经知道路径,为什么需要在PATH字符串中找到它?
或者换句话说,你知道一种识别字符串的方法,因为它可能因安装而异吗?
答案 2 :(得分:1)
或者,您可以使用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:\试验> cscript // nologo findpath.vbs mysql
在批处理文件中,要获得结果,请使用for循环