如何将批处理命令的结果存储在哪里?
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"
运行
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"