Batch file 获取gcc版本并将其存储在批处理文件中的变量中

Batch file 获取gcc版本并将其存储在批处理文件中的变量中,batch-file,gcc,Batch File,Gcc,我的gcc编译器在'D:/Cygwin/bin'中。 我创建了一个批处理文件,用于派生gcc的版本号 set gccPath=D:/Cygwin/bin for /f %%i in ('%gccPath%/gcc.exe -v') do @set versionInfo=%%i if defined versionInfo (echo found) else ^ echo not found 这里我试图将语句的输出gcc-v存储到变量versionInfo。但是当我运行这个批处理文件时,命

我的gcc编译器在'D:/Cygwin/bin'中。 我创建了一个批处理文件,用于派生gcc的版本号

set gccPath=D:/Cygwin/bin 
for /f %%i in ('%gccPath%/gcc.exe -v') do @set versionInfo=%%i 
if defined versionInfo (echo found) else ^
echo not found
这里我试图将语句的输出
gcc-v
存储到变量
versionInfo
。但是当我运行这个批处理文件时,命令的输出并没有存储在变量中。如何将信息存储到变量
versionInfo

set "gccPath=D:\Cygwin\bin"
set "versioninfo="
for /f %%i in ('%gccPath%\gcc.exe -v') do if not defined versioninfo set versionInfo=%%i
if defined versionInfo (echo found) else (echo not found)
\
是windows上的路径分隔符<代码>/是开关指示灯

set gccpath
行上似乎有一个尾随空格。这将包括在指定的值中。带引号的格式旨在防止出现这种情况——指定的值中不包括尾随空格

@
set
(或任何其他)语句中不是必需的
@echo off
是批处理的传统开始-它意味着“关闭
echo
而不
echo
此语句”

批处理程序很少使用
^
终端继续行。我建议不要这样做


额外的
如果未定义
语句对变量的
集进行选通
可以确保变量只设置一次,并且如果没有其他行(您没有向我们显示来自
gcc-v
)的典型输出,
将被忽略,否则它将被下一行中的任何内容覆盖

但它仍然是未找到的。另外,我尝试了另一个示例,当我在命令提示符中使用“ver”命令时,它会给出输出“Microsoft Windows[Version 6.1.7601]”。因此,在上面提到的for循环中,我给出了“ver”而不是“gcc命令”,现在versionInfo只有Microsoft而没有完整的信息。如何存储整个信息?
ver
是返回操作系统版本的标准批处理命令,与当前问题无关。正如我所说,
您没有向我们展示gcc-v的典型输出,如果没有这些数据,我们将沦为猜测游戏。请将执行命令
gcc-v
的完整输出发布到您的原始帖子中,以便我们能够正确分析问题。很抱歉造成混淆。上一篇评论中的例子完全不同。我发布它是为了表明即使在那里(使用'ver'命令),完整的信息也不会存储在变量中。只存储了它的一部分。现在谈到主要问题(与gcc相关),下面给出了gcc-v的输出。使用内置规格。COLLECT_GCC=/usr/bin/GCC COLLECT_LTO_WRAPPER=/usr/lib/GCC/x86_64-pc-cygwin/5.4.0/LTO-WRAPPER.exe目标:x86_64-pc-cygwin….XXXXXXXXXXXXXXXXXXXXXXXXXX。。。。。。。。。。。。。。localstatedir=/var--sysconfdir=/etc线程模型:posix gcc版本5.4.0(gcc)