如何让 ver 命令从批处理文件中打印出来?

如何让 ver 命令从批处理文件中打印出来?

我在处理第三方项目的构建批处理文件时遇到了问题。它使用命令检查操作系统是否为 Windows ver。不幸的是,我似乎无法像在命令行中那样从批处理文件中打印ver命令。命令行输出为:

Microsoft Windows [Version 10.0.15063]

但是,当我在批处理文件中运行时:

set v ver
echo %v%

输出结果如下:

v=10.0
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
VS100COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\
VS90COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\

它似乎给了我 Windows 版本(虽然不是那么详细),然后是一堆其他东西的版本。这有什么原因导致它工作方式不同或失败吗?有人知道如何调用在命令行上观察到的原始行为吗?第三方脚本似乎期望命令行版本的行为。

更新:根据以下答案,我发现虽然这是一个问题,但实际上它并不是导致第三方批处理文件失败的问题。这似乎一定是由于findstr或的问题%ERRORLEVEL% NEQ 0(因为问题是它认为在版本中没有找到字符串“Windows”)。

答案1

ver命令通过管道传输到find命令,其"."值如下所示,告诉它仅返回命令中带有点的行,ver因为它似乎也首先返回一个空白行。这样,将其通过管道传输到find "."它只会将带有点的行重定向到文件。

ver | find ".">temp.txt
SET /P v= < temp.txt
ECHO %v%

更多资源

答案2

首先要澄清的是,如果你使用没有赋值(比如设定值=10), 然后将返回所有以您指定的表达式开头的环境变量。

set v

实际上会列出所有名称以 开头的变量

我假设你之前已经创建了一个环境变量意外地包含“10.0”。这实际上导致了输出的第一行。我很确定这不是命令。它之所以被列入列表只是因为它的名字也符合给定的搜索模式。

不幸的是,我的想法到此为止了。有一些关于如何将命令的输出捕获到环境变量中的解决方案,但我没有让它工作版本

https://stackoverflow.com/questions/8055371/how-do-i-run-two-commands-in-one-line-in-windows-cmd https://stackoverflow.com/questions/2323292/windows-batch-assign-output-of-a-program-to-a-variable

抱歉,我真的无法为您提供所需的解决方案。但愿我能帮助您理清一些问题。祝您好运,在这里找到完美的解决方案。

答案3

尝试:

for /f "delims=" %a in ('ver') do @set version=%a

在批处理文件中使用时,请使用双转义符(% 变为 %%)。

相关内容