我试图用批处理文件从%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"
)