我试图使用“set”设置一些环境变量,以便在本地而不是在系统级别上设置它们,这在使用SETX时会发生。但是,变量似乎没有传递到正在执行的最终命令(.exe),我如何设置本地env变量并将修改后的env传递给exe?
@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
发布于 2022-04-08 21:41:21
以下批处理文件适用于任何用例:
@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
和选项EnableExtensions
和DisableDelayedExpansion
的原因由第6章问题解释:批处理文件取决于在 of 这个答案之外定义的环境。
使用语法定义环境变量的原因在我对为什么在命令行上使用'set var = text‘之后没有带有'echo %var%’的字符串输出?的回答中详细描述了。
这些更改的组合将导致工作批处理文件,即使在包含批处理文件的目录中也是如此,例如,大多数使用C:\Temp\Development & Test 100% (!)
的批处理文件都会失败。
在几乎所有情况下,都不应该在批处理文件的末尾使用命令exit
。有些情况下,批处理文件底部的exit
确实很有用,但在大多数情况下,它是无用的,甚至是适得其反的,例如在调试批处理文件上,这意味着在命令提示符窗口中运行它,或者当批处理文件将来被另一个批处理文件调用时。
要了解所使用的命令及其工作方式,请打开一个命令提示符窗口,在那里执行以下命令,并非常仔细地读取为每个命令显示的所有帮助页。
echo /?
endlocal /?
exit /?
goto /?
pause /?
rem /?
set /?
setlocal /?
start /?
另请参阅:
exit /B
的信息。cmd.exe
在启动可执行文件时使用的,而不使用或使用它的内部命令start
。命令start
的使用会更改传递给结构中的函数和值的一些参数。
在这种情况下,对CreateProcess
函数参数lpEnvironment
的解释是最有趣的。此函数参数始终是空指针,因为cmd.exe
不支持特定于可执行文件启动的环境变量的定义。
命令的选项/D
start
定义函数参数lpCurrentDirectory
,即默认情况下没有空指针,但是定义了指向显式指定目录路径字符串的指针。发布于 2022-04-08 16:17:38
解决方案可以是首先使用set在批处理文件中设置环境变量,然后直接运行可执行文件(不启动)。如果成功的话,告诉我!
发布于 2022-04-08 16:38:27
使用set "var1=data"
设置字符串值-这避免了尾随空格造成的问题。
如果使用语法,则执行
set ADSK_3DSMAX_STARTUPSCRIPTS_ADDON_DIR=""%~dp0startup""
这可能不是你所期望的。
https://stackoverflow.com/questions/71800227
复制相似问题