首页 > 解决方案 > 如何将批处理命令的结果存储在哪里?

问题描述

跑步

WHERE python

在我的 bat 脚本中给了我两个文件路径到两个不同的 python 实例

C:~\AppData\Local\Programs\Python\Python38\python.exe
C:~\AppData\Local\Microsoft\WindowsApps\python.exe

我如何将第一个存储在变量中。我目前正在尝试

FOR /f %%p in ('where python') do SET PYTHONPATH=%%p

但是,它只给了我第二个文件路径。

我将如何获得第一条路径?

标签: pythonbatch-filecommand

解决方案


我会这样做:

@For %%G In (python.exe) Do @Set "PYTHONPATH=%%~$PATH:G"

where.exe将搜索下的每个位置%PATH%,并输出所有结果,这不是您想要的,因此我不提倡在这种特殊情况下使用它的原因。

然而%~PATH:,修饰符将输出它找到的第一个结果。

这也是始终确保您的 %PATH% 字符串值按优先级顺序列出的一个很好的理由,而不是盲目地添加新位置而不是附加它们。


要完全回答您的具体问题,如果您还想使用where.exe,您只需要一种方法......</p>

  • 在第一个结果后停止迭代:
@For /F "Delims=" %%G In ('%SystemRoot%\System32\where.exe python.exe 2^>NUL') Do @Set "PYTHONPATH=%%~G" & GoTo Next
:Next
  • 仅在尚未定义变量时定义变量:
@Set "PYTHONPATH="
@For /F "Delims=" %%G In ('%SystemRoot%\System32\where.exe python.exe 2^>NUL') Do @If Not Defined PYTHONPATH Set "PYTHONPATH=%%~G"

推荐阅读