如何将批处理命令的结果存储在哪里?

How to store the results of Batch Command where?

运行

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

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

如何获得第一条路径?

我会这样做:

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

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

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

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


要完整回答您的具体问题,如果您想继续使用 where.exe,您只需要一种方法...

  • 在第一个结果后停止迭代:
@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"