在批处理脚本中,我需要找到特定可执行文件的位置(路径)。我使用where.exe,它就像一个魅力。
@ECHO OFF
:: save the result of the command 'where.exe epstopdf' into the variable progpath
for /f "delims=" %%a in ('where.exe epstopdf') do @set progpath="%%a"
:: echo result
echo %progpath%
现在我遇到了问题,我安装了imagemagick,因为我想使用 convert 工具。我的问题是,执行where.exe convert
会返回两个结果
C:\Program Files\ImageMagick\ImageMagick-6.9.0-Q16\convert.exe
C:\Windows\System32\convert.exe
不幸的是,当我将脚本更改为
时@ECHO OFF
for /f "delims=" %%a in ('where.exe convert') do @set progpath="%%a"
echo %progpath%
最后一个结果C:\Windows\System32\convert.exe
存储在变量progpath
中。
如何让脚本在变量中保存特定结果(这里是第一个)?是否有可能在换行符或类似的东西停止for循环?
PS:我想念Linux系统
答案 0 :(得分:0)
Goto
可能"打破"你的for循环
@ECHO OFF
for /f "delims=" %%a in ('where.exe convert') do @set progpath="%%a"&goto break
:break
echo/%progpath%
答案 1 :(得分:0)
"我需要第n个"是有问题的。更好地满足您的需求。
示例:您知道,您正在搜索明确imageMagick
:
for /f "delims=" %%a in ('where.exe convert^|find "ImageMagick"') do @set progpath="%%a"
或者你知道,你不想获得windows-built-in命令,但是要搜索任何其他命令:
for /f "delims=" %%a in ('where.exe convert^|find /v "System32"') do @set progpath="%%a"
答案 2 :(得分:-1)
请记住,您可以为for
语句的操作执行多行。
for /f "delims=" %%a in ('where.exe convert') do (
if /i not "%%a"=="C:\Windows\System32\convert.exe" set progpath="%%a"
)
PS:我想念Linux系统
两个字:学习PowerShell。除非你别无选择,否则不要浪费你的时间。