Batch file 将输出放入变量

Batch file 将输出放入变量,batch-file,cmd,Batch File,Cmd,我试图创建一个批处理文件,将JAVA_设置为主页 现在我有下面的代码来查找路径是否存在。 如果是这种情况,我希望将完整名称存储在变量中 set javaLoc= set javaLoc=$(dir "C:\Program Files (x86)\Java\jre1.8*" /s/b) echo %javaLoc% 但回音让我回想起: $(dir "C:\Program Files (x86)\Java\jre1.8*" /s/b) 虽然我想在“javaLoc”中捕获它的输出(C:\Pr

我试图创建一个批处理文件,将JAVA_设置为主页

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

set javaLoc=
set javaLoc=$(dir "C:\Program Files (x86)\Java\jre1.8*" /s/b) 
echo %javaLoc% 
但回音让我回想起:

$(dir "C:\Program Files (x86)\Java\jre1.8*" /s/b) 
虽然我想在“javaLoc”中捕获它的输出(C:\ProgramFiles(x86)\Java\jre1.8.0\u 40)

我还尝试:

dir "C:\Program Files (x86)\Java\jre1.8*" /s/b > javaLoc
但这也不起作用

谁能帮我弄清楚我做错了什么

我看到你是带着来自bash(或者可能是kornshell)的经验进来的。遗憾的是,批处理比它的*nix对应项有一点限制,所以不能直接将命令的输出存储在变量中

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

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

尽管需要注意的是,如果此命令返回了多个项目,javaLoc将被设置为列表中的最后一个项目。

您可以使用
FOR
语句来实现这一点,您可以将
javaLoc
作为迭代变量。在命令行提示符下键入
以获取/?
,查看选项列表。这对我很有用。我确实为空格添加了一个“delims=”。