从批处理文件启动时,Visual Studio 2017命令行工具不起作用

时间:2018-11-28 15:38:37

标签: windows visual-studio batch-file cmd

我遇到了一个非常奇怪的行为,旧的批处理文件在Windows XP下运行良好。在cmd窗口中通过批处理文件编译(Vs2017 + Win10)下的hello.c这样的简单文件时,为什么不起作用?

当意识到Win10具有新的安全策略时,我在Microsoft网站上阅读了一些文章。他们建议使用开发人员命令行窗口进行命令行编译。

实际上,手动操作效果很好。但是当我以超级管理员身份登录Win10并尝试通过批处理文件运行所有程序时, 它没有用,只是完成了环境配置。

手动运行批处理文件中的命令时,所有操作均按预期进行(成功生成了可执行文件)。 怎么了?

这是批处理文件的内容:

%comspec% /k "C:\Program Files(x86)\Microsoft Visual Studio\2017  \Community\VC\Auxiliary\Build\vcvars64.bat"
cd g:\testdir
g: 
cl TestBatFileCompile.c

1 个答案:

答案 0 :(得分:0)

初步注释

  • vcvars64.bat 只需调用 vcvarsall.bat ,然后将 x64 参数传递给它,然后是它自己的参数(如果有的话)< / li>
  • vcvarsall.bat 主要设置 VStudio 构建工具正常工作所需的一些env vars(在运行它之前,set VSCMD_DEBUG=3,用于详细输出)。检查[MS.Docs]: Build C/C++ code on the command line了解更多详情

为了进一步清晰起见,我增强/简化了示例:

script.bat

@echo off

echo Running vcvars...
%comspec% /K "c:\Install\x86\Microsoft\Visual Studio Community\2017\VC\Auxiliary\Build\vcvarsall.bat" x64
echo Ran vcvars: %ERRORLEVEL%

echo Running cl...
cl /nologo dummy.c /link /NOLOGO
echo Ran cl: %ERRORLEVEL%

dummy.c

int main() {
    return 0;
}

输出

e:\Work\Dev\StackOverflow\q053523085>dir /b
dummy.c
script.bat

e:\Work\Dev\StackOverflow\q053523085>script.bat
Running vcvars...
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.2
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'

e:\Work\Dev\StackOverflow\q053523085>rem HMMM, SOMETHING DOESN'T SEEM QUITE RIGHT. LET'S TRY EXITING CMD...

e:\Work\Dev\StackOverflow\q053523085>exit
Ran vcvars: 0
Running cl...
'cl' is not recognized as an internal or external command,
operable program or batch file.
Ran cl: 9009

发生了什么事?

  • cmd /K[MS.Docs]: Cmd)在现有实例的顶部打开了一个新的 cmd 实例(使用同一窗口)
      在此(2 nd )实例中调用了
    • vcvarsall ,它完成了工作并完成了工作,一切似乎都悬而未决了
  • 但是在键入 exit 后,事实证明 cl 确实可以运行,但是位于1 st cmd < / em>实例(如果需要的话,在后台),并且由于变量 vcvarsall 先前未设置,因此失败

要使其正常工作,请使用[MS.Docs]: call调用 vcvarsall

call "c:\Install\x86\Microsoft\Visual Studio Community\2017\VC\Auxiliary\Build\vcvarsall.bat" x64

输出(在新的 cmd 窗口中):

e:\Work\Dev\StackOverflow\q053523085>dir /b
dummy.c
script.bat

e:\Work\Dev\StackOverflow\q053523085>script.bat
Running vcvars...
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.2
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
Ran vcvars: 0
Running cl...
dummy.c
Ran cl: 0
e:\Work\Dev\StackOverflow\q053523085>dir /b
dummy.c
dummy.exe
dummy.obj
script.bat