我在处理第三方项目的构建批处理文件时遇到了问题。它使用命令检查操作系统是否为 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
答案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
在批处理文件中使用时,请使用双转义符(% 变为 %%)。