首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运行bat文件设置env for exe

运行bat文件设置env for exe
EN

Stack Overflow用户
提问于 2022-04-08 16:13:23
回答 3查看 796关注 0票数 1

我试图使用“set”设置一些环境变量,以便在本地而不是在系统级别上设置它们,这在使用SETX时会发生。但是,变量似乎没有传递到正在执行的最终命令(.exe),我如何设置本地env变量并将修改后的env传递给exe?

代码语言:javascript
运行
复制
@echo off
setlocal 

:: Assign all Path variables
SET STARTUP="%~dp0startup"

set ADSK_3DSMAX_STARTUPSCRIPTS_ADDON_DIR=%STARTUP%
echo ADSK_3DSMAX_STARTUPSCRIPTS_ADDON_DIR %STARTUP%

start /d "%PROGRAMW6432%\Autodesk\3ds Max 2022\" 3dsmax.exe /i
endlocal
exit
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-08 21:41:21

以下批处理文件适用于任何用例:

代码语言:javascript
运行
复制
@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Assign all directory path variables
set "STARTUP=%~dp0startup"
set "ADSK_3DSMAX_STARTUPSCRIPTS_ADDON_DIR=%STARTUP%"

if not exist "%ProgramFiles%\Autodesk\3ds Max 2022\3dsmax.exe" goto Progx86
start "" /D "%ProgramFiles%\Autodesk\3ds Max 2022" 3dsmax.exe /i
exit /B

:Progx86
if not exist "%ProgramFiles(x86)%\Autodesk\3ds Max 2022\3dsmax.exe" goto DisplayError
start "" /D "%ProgramFiles(x86)%\Autodesk\3ds Max 2022" 3dsmax.exe /i
exit /B

:DisplayError
echo ERROR: Failed to find: "Autodesk\3ds Max 2022\3dsmax.exe"
echo/
pause
endlocal

第二行使用setlocal和选项EnableExtensionsDisableDelayedExpansion的原因由第6章问题解释:批处理文件取决于在 of 这个答案之外定义的环境。

使用语法定义环境变量的原因在我对为什么在命令行上使用'set var = text‘之后没有带有'echo %var%’的字符串输出?的回答中详细描述了。

这些更改的组合将导致工作批处理文件,即使在包含批处理文件的目录中也是如此,例如,大多数使用C:\Temp\Development & Test 100% (!)的批处理文件都会失败。

在几乎所有情况下,都不应该在批处理文件的末尾使用命令exit。有些情况下,批处理文件底部的exit确实很有用,但在大多数情况下,它是无用的,甚至是适得其反的,例如在调试批处理文件上,这意味着在命令提示符窗口中运行它,或者当批处理文件将来被另一个批处理文件调用时。

要了解所使用的命令及其工作方式,请打开一个命令提示符窗口,在那里执行以下命令,并非常仔细地读取为每个命令显示的所有帮助页。

  • echo /?
  • endlocal /?
  • exit /?
  • goto /?
  • pause /?
  • rem /?
  • set /?
  • setlocal /?
  • start /?

另请参阅:

  • 微软的Windows命令文档
  • 去哪里:EOF返回哪里? 它包含微软文档中找不到的有关exit /B的信息。
  • DosTips论坛主题:回音。未能给出文本或空行,而使用ECHO/
  • 微软关于Windows内核库函数CreateProcessSTARTUPINFO结构的文档,这些文档是cmd.exe在启动可执行文件时使用的,而不使用或使用它的内部命令start。命令start的使用会更改传递给结构中的函数和值的一些参数。 在这种情况下,对CreateProcess函数参数lpEnvironment的解释是最有趣的。此函数参数始终是空指针,因为cmd.exe不支持特定于可执行文件启动的环境变量的定义。 命令的选项/D start定义函数参数lpCurrentDirectory,即默认情况下没有空指针,但是定义了指向显式指定目录路径字符串的指针。
票数 2
EN

Stack Overflow用户

发布于 2022-04-08 16:17:38

解决方案可以是首先使用set在批处理文件中设置环境变量,然后直接运行可执行文件(不启动)。如果成功的话,告诉我!

票数 0
EN

Stack Overflow用户

发布于 2022-04-08 16:38:27

使用set "var1=data"设置字符串值-这避免了尾随空格造成的问题。

如果使用语法,则执行

代码语言:javascript
运行
复制
set ADSK_3DSMAX_STARTUPSCRIPTS_ADDON_DIR=""%~dp0startup""

这可能不是你所期望的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71800227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档