解决vcvarall.bat 调用追加环境变量提示The input line is too long

文章讲述了在Windows10环境下,使用QT5.12.8开发时遇到批处理编译多个项目时命令太长的问题。解决方法包括使用setlocal命令隔离环境变量和通过检查VisualStudioVersion环境变量来确保vcvarsall.bat的正确执行。
摘要由CSDN通过智能技术生成

公司使用的是windows10+QT5.12.8作为开发环境,今天发现单独执行qmake编译单个项目没有任何问题,但是切换到批处理来依次编译多个项目时,会出现命令太长的问题,网上找了半天目前有以下几种方案来解决此问题。

报错截图:

复现操作:

@echo off

set PATH=%PATH%;%PATH%;%PATH%;%PATH%;%PATH%;%PATH%;%PATH%

echo %PATH%

错误原因:

1、命令行中,一行代码究竟可以写多长?
(win10环境)经过测试,一行代码最多可以输入8192个字符。(8K大)
set至少后面有【一个空格】【变量名最短是1】【等号】三个字符,其后最多只剩8089

测试代码

@echo off & setlocal enabledelayedexpansion
for /l %%i in (1,1,10000) do (
	if not defined x set a=!a!1||set x=!n!
	set /a n+=1
)
echo;变量最长!x!
for /l %%i in (1,1,10) do (
	set e=!e!1
	if not defined y echo;!a!!e!>nul||set y=!x!
	set /a x+=1
)
echo;参数最长!y!
pause & exit /b

解决办法1:

使用setlocal命令包含vcvarall.bat

官方解释【SETLOCAL命令开始时,任何由外部脚本或命令行设置的变量或环境变量都不会影响当前批处理脚本中的代码执行,SETLOCAL命令会持续到出现匹配的ENDLOCAL命令或者到达批处理文件结尾为止】可以理解为SETLOCAL做了一个隔离,vcvarall.bat每次执行设置的变量不会影响到下一次执行

代码示例:

REM setlocal
call %VCDIR%\vcvarall.bat x86_amd64
REM endlocal

REM setlocal
call %VCDIR%\vcvarall.bat x86_amd64
REM endlocal

解决办法2:

vcvarsall.bat的源码提到了vcvarsall.bat执行成功后会设置一个环境变量VisualStudioVersion来保存当前MSVC编译器的版本号。所以只要判断这个变量是否定义就可以确定是否已经正确设置MSVC环境变量:

代码示例:

@echo 

set VCDIR="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build"

if not defined VisualStudioVersion (
    call %VCDIR%"\vcvarsall.bat" x86_amd64
)

参考链接:【WINDOWS / DOS 批处理】setlocal命令、endlocal命令详解_扬科网络的博客-CSDN博客

msvc:BAT脚本判断是否设置MSVC编译的环境变量(执行vcvarsall.bat)_msvc 生成后事件 调用bat-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值