Как извлечь полный путь из переменной среды PATH?
Я хочу извлечь полный путь из PATH
переменная окружения с нативными инструментами cmd. Рассмотрим следующее 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: \ Программные файлы \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:\ программные файлы \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 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
Я хочу извлечь только следующий путь:
C: \ Program Files \ MySQL \ MySQL Server 5.0 \ bin;
Является FOR
способен на такое?
3 ответа
Ты можешь использовать 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?
Или, другими словами, знаете ли вы способ распознавания этой строки, учитывая, что она может варьироваться в зависимости от установки?
В качестве альтернативы вы можете использовать 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