如何在变量中存储where.exe的特定结果以获得多个结果

时间:2015-01-14 17:25:17

标签: batch-file batch-processing

在批处理脚本中,我需要找到特定可执行文件的位置(路径)。我使用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系统

3 个答案:

答案 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。除非你别无选择,否则不要浪费你的时间。