Как я могу получить только root из строк корней на CMD? - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь получить root из python исполняемого файла из % PATH% с командным файлом при печати:

echo %PATH%

Я получаю:

C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\dotnet\;C:\Program Files\Git\cmd;C:\Program Files (x86)\Common Files\Propellerhead Software\ReWire\;C:\Program Files\Common Files\Propellerhead Software\ReWire\;C:\Users\stackoverflow\AppData\Local\Programs\Python\Python37\Scripts\;C:\Users\stackoverflow\AppData\Local\Programs\Python\Python37\;C:\Users\stackoverflow\AppData\Local\Microsoft\WindowsApps;;C:\Users\stackoverflow\AppData\Local\Programs\Microsoft VS Code\bin

Мне нужно отфильтровать это, потому что я хочу получить:

C:\Users\stackoverflow\AppData\Local\Programs\Python\Python37\

Я пытался сделать это, но это не работает, печатать только то же самое из echo% PATH%

for /f "tokens=* delims=;" %%a IN ("%PATH%") do (
    echo "%%~a"
)

Итак, как я могу получить root из python из строки% PATH%, используя пакетный файл?

Ответы [ 4 ]

1 голос
/ 25 апреля 2020

Я думаю, что самый простой способ заключается в следующем:

for /F "delims=" %%a in ('where phyton.exe') do echo %%~DPa

, но я также написал этот пакетный файл, который получает путь к всем приложениям:

@echo off
setlocal EnableDelayedExpansion

for %%a in ("%PATH:;=" "%") do (
   set "name=%%~a"
   if "!name:~-1!" equ "\" set "name=!name:~0,-1!"
   for %%b in ("!name!") do set "pathOf[%%~Nb]=%%~a"
)

REM SET pathOf

rem For example:    
echo %pathOf[Python37]%
1 голос
/ 24 апреля 2020

Вам нужно разделить переменную path на одну запись в строке. Это можно сделать с помощью echo %path:;=&echo %. Поймайте правильную строку с помощью find и поместите for l oop вокруг, чтобы зафиксировать вывод в переменную:

for /f "delims=" %%a in ('"(echo %path:;=&echo %)|find /i "phyton""') do set "PythonPath=%%a"
echo %PythonPath%
1 голос
/ 25 апреля 2020

спасибо Стефану, я получил ответ, и это:

for %%i in ("python.exe") do set root=%%~$PATH:i
set python_path=%root:~0,-11%
echo %python_path%

мой вывод:

C:\Users\stackoverflow\AppData\Local\Programs\Python\Python37
0 голосов
/ 24 апреля 2020

Таким образом, вы можете получить то, что вам нужно:

  for /f "usebackq  tokens=11 delims=;;" %%a in (`"echo %PATH%" ^| find /i "Python"`)    
   do (
         echo "%%~a"
      )
...