如何从CMD上的根字符串中获取唯一根



我试图用批处理文件从%PATH%获取python可执行文件的根打印时:

echo %PATH%

我得到:

C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:WindowsSystem32OpenSSH;C:Program Filesdotnet;C:Program FilesGitcmd;C:Program Files (x86)Common FilesPropellerhead SoftwareReWire;C:Program FilesCommon FilesPropellerhead SoftwareReWire;C:UsersstackoverflowAppDataLocalProgramsPythonPython37Scripts;C:UsersstackoverflowAppDataLocalProgramsPythonPython37;C:UsersstackoverflowAppDataLocalMicrosoftWindowsApps;;C:UsersstackoverflowAppDataLocalProgramsMicrosoft VS Codebin

我需要过滤,因为我想得到:

C:UsersstackoverflowAppDataLocalProgramsPythonPython37

我试过这样做,但它不起作用,只打印echo%PATH%

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

总之,如何使用批处理文件从%PATH%的字符串中获取python的根?

您需要将path变量拆分为每行一个条目。这可以通过echo %path:;=&echo %来实现。用find捕捉正确的行,并将for循环以将输出捕获到变量中:

for /f "delims=" %%a in ('"(echo %path:;=&echo %)|find /i "phyton""') do set "PythonPath=%%a"
echo %PythonPath%

感谢Stephan,我得到了答案,它是:

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

我的输出:

C:UsersstackoverflowAppDataLocalProgramsPythonPython37

我认为最简单的方法是:

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]%

这样你就可以得到你需要的东西:

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

最新更新