将输出放入变量

Putting output into a variable

我正在尝试制作一个设置 JAVA_HOME 的批处理文件。

现在我有以下代码来查找路径是否存在。 如果是这种情况,我想将完整名称存储在一个变量中。

set javaLoc=
set javaLoc=$(dir "C:\Program Files (x86)\Java\jre1.8*" /s/b) 
echo %javaLoc% 

但是回显returns我:

$(dir "C:\Program Files (x86)\Java\jre1.8*" /s/b) 

虽然我想从 "javaLoc" 中捕获输出 (C:\Program Files (x86)\Java\jre1.8.0_40)。

我也试过:

dir "C:\Program Files (x86)\Java\jre1.8*" /s/b > javaLoc

但这也行不通。
谁能帮我解决我做错了什么?

我看到你是带着来自 bash(或者可能是 kornshell)的经验进来的。可悲的是,batch 比它的 *nix 对应物更受限制,因此您不能直接将命令的输出存储在变量中。

可以 ,但是,运行 通过 for /F 循环执行命令并将结果存储在变量中,如下所示:

for /F %%A in ('dir "C:\Program Files (x86)\Java\jre1.8*" /s /b') do (
    set javaLoc=%%A
)

不过需要注意的是,如果此命令返回的项目不止一项,javaLoc 将被设置为列表中的最后一项。