Windows批处理:如何搜索可执行文件的路径并存储在变量中?

Windows批处理:如何搜索可执行文件的路径并存储在变量中?,windows,batch-file,cmd,Windows,Batch File,Cmd,我有以下脚本,它应该搜索变量的路径并将其存储在变量中: FOR %%i IN (app.exe) DO ( SET app=%%~$PATH:i ECHO %app% ) 但是echo的输出是空的,不管我是在for循环内部还是外部进行echo。我缺少什么?如果要打印括号范围内的结果,需要: setlocal enableDelayedExpansion FOR %%i IN (app.exe) DO ( SET "app=%%~$PATH:i" ECHO !

我有以下脚本,它应该搜索变量的路径并将其存储在变量中:

FOR %%i IN (app.exe) DO (
    SET app=%%~$PATH:i 
    ECHO %app%
)
但是echo的输出是空的,不管我是在for循环内部还是外部进行echo。我缺少什么?

如果要打印括号范围内的结果,需要:

setlocal enableDelayedExpansion
FOR %%i IN (app.exe) DO (
    SET "app=%%~$PATH:i" 
    ECHO !app!
)
您还可以使用
where


我明白了,不知怎的,我设法从我的系统路径环境变量中删除了app.exe目录。我读了它,现在它工作了…

设置app=%%~dpi工作吗?那
哪里有“app.exe”
呢?要捕获输出,请在('where“app.exe')中对/F“delims=eol=|“%%A执行
,并设置“app=%%A)”
。无论如何,
echo%APP%
必须在循环之外,因此超出了最后一个
@Regejok,我认为OP希望通过
PATH
变量查找
app.exe
~dp
修饰符仅返回与
app.exe
的真实位置无关的当前目录,因为当文件集不包含任何全局通配符(
*
)时,
for
甚至不访问文件系统……将
回音移动到循环外部对我来说是可行的。
for /f "tokens=* delims=" %%a in ('where app.exe') do set "app=%%a"
echo %app%