如何在vbs中设置可以在调用批处理脚本中读取的环境变量

     2023-02-24     19

关键词:

【中文标题】如何在vbs中设置可以在调用批处理脚本中读取的环境变量【英文标题】:How to set environment variables in vbs that can be read in calling batch script 【发布时间】:2011-04-13 20:33:25 【问题描述】:

我有一个调用 vbscript 文件的批处理文件。我正在尝试让 vbscript 文件更改一个环境变量,该环境变量稍后在调用 vbscript 文件的批处理文件中使用。

这里是文件中的 sn-pes。

父.bat

Set Value="Initial Value"
cscript Child.vbs
ECHO Value = %VALUE%

Child.vbs

Set wshShell = CreateObject( "WScript.Shell" )
Set wshSystemEnv = wshShell.Environment( "Process" )
wshSystemEnv("VALUE") = "New Value"

【问题讨论】:

【参考方案1】:

你不能。进程可以将环境变量传递给子进程,但不能传递给它的父进程——在这种情况下,父进程是 cmd.exe,它正在运行您的 Parent.bat 文件。

当然还有其他方式可以将信息传递回父批处理文件 - 输出到标准输出或文件是一种显而易见的方式,例如

== Child.vbs ===
WScript.echo "New Value"

== Parent.cmd ===
for /f "tokens=*" %%i in ('cscript //nologo child.vbs') do set Value=%%i
echo %Value%

【讨论】:

只是补充:孩子不能修改父母的环境,没有父母允许它在父母端使用额外的脚本。想象一下,如果孩子可以修改父母的环境,会发生什么令人讨厌的事情。所以简短的回答是孩子不能修改父母的环境在任何流程子流程场景【参考方案2】:

是的,您可以....但是,您必须在会话中重置变量。请参阅以下链接:

Is there a command to refresh environment variables from the command prompt in Windows?

'RESETVARS.vbs

Set oShell = WScript.CreateObject("WScript.Shell")
filename = oShell.ExpandEnvironmentStrings("%TEMP%\resetvars.bat")
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set oFile = objFileSystem.CreateTextFile(filename, TRUE)

set oEnv=oShell.Environment("System")
for each sitem in oEnv 
    oFile.WriteLine("SET " & sitem)
next
path = oEnv("PATH")

set oEnv=oShell.Environment("User")
for each sitem in oEnv 
    oFile.WriteLine("SET " & sitem)
next

path = path & ";" & oEnv("PATH")
oFile.WriteLine("SET PATH=" & path)
oFile.Close

这就是我的做法:

SET oShell = CREATEOBJECT("Wscript.Shell") 
dim varSet
SET varSet = NOTHING 

  SET varSet = oShell.Environment("SYSTEM") 
  varSet("WinVer") = "6.0.2008"

然后在我从 CMD 脚本调用的单独 VB 脚本 (resetvars.vbs) 中:

cscript //nologo \\%APPSERVER%\apps\IE9.0\restartvars.vbs   
call %TEMP%\resetvars.bat

【讨论】:

【参考方案3】:

我认为你做不到。至少,您需要在调用过程中弄乱环境块,并且不能保证它会尊重这一点......

【讨论】:

【参考方案4】:

关于这个:

@echo off
set vbsFile=%temp%\createguid.vbs
call :CreateVbs
call :GetGuid NewGuid
echo.%NewGuid%
del %vbsFile%>nul
GOTO:EOF

:CreateVbs
echo.set obj = CreateObject("Scriptlet.TypeLib")>%vbsFile%  
echo.WScript.StdOut.WriteLine obj.GUID>>%vbsFile% 
GOTO:EOF

:GetGuid
for /f "tokens=*" %%i in ('cscript //nologo %vbsFile%') do set %1=%%i
GOTO:EOF

这不是纯批处理脚本,但可以正常工作。

【讨论】:

【参考方案5】:
@echo off&color 4a&title %~n0&AT>NUL
IF %ERRORLEVEL% EQU 0 (
    goto 2
) ELSE (
    echo.
)
if not "%minimized%"=="" goto 1
set minimized=true & start /min cmd /C "%~dpnx0"&cls&exit
:1
wmic process where name="cmd.exe" CALL setpriority "realtime">nul&echo set shell=CreateObject("Shell.Application") > %~n0.vbs&echo shell.ShellExecute "%~dpnx0",,"%CD%", "runas", 1 >> %~n0.vbs&echo set shell=nothing >> %~n0.vbs&start %~n0.vbs /realtime&timeout 1 /NOBREAK>nul& del /Q %~n0.vbs&cls&exit
:2
echo %~dpnx0 admin mode look up&wmic process where name="cmd.exe" CALL setpriority "realtime"&timeout 3 /NOBREAK>nul
:3
echo x=msgbox("end of line" ,48, "%~n0") > %~n0.vbs&start %~n0.vbs /realtime&timeout 1 /NOBREAK>nul& del /Q %~n0.vbs&cls&exit

【讨论】:

调用 VBScript 时在批处理脚本中设置参数

】调用VBScript时在批处理脚本中设置参数【英文标题】:SettingparametersinbatchscriptwhilecallingVBScript【发布时间】:2020-06-0520:56:30【问题描述】:我有一个bat文件,它调用转换文件编码的vbscript。在通过设置文件的一部分运行代码时,... 查看详情

如何在批处理脚本的 for /f 循环中从输出中设置多个变量? [复制]

】如何在批处理脚本的for/f循环中从输出中设置多个变量?[复制]【英文标题】:Howtosetmultiplevariablesfromoutputinfor/floopinbatchscript?[duplicate]【发布时间】:2021-01-1705:08:55【问题描述】:我正在尝试编写脚本,但我真的不擅长编写批处... 查看详情

dockerfile镜像脚本中设置环境变量的是哪一项

参考技术A我们在本地机中,可以通过echo$PATH查看PATH的具体指向;该设置也常用于软件执行的设置。但是在基于docker构建镜像(执行容器时)时,出现问题了?无法调用!即使是通过RUNecho"PATH=$HOME/meme/bin:$HOME/meme/libexec/meme-5.4.... 查看详情

在视图中调用脚本时设置超时?或在脚本中设置有效超时?

】在视图中调用脚本时设置超时?或在脚本中设置有效超时?【英文标题】:settimeoutoncallingascriptonview?orsettinganeffectivetimeoutinsidescript?【发布时间】:2018-07-2621:32:41【问题描述】:通过一些努力,我部分实现了我想要的,但如果... 查看详情

在 Xcode 构建阶段运行脚本中设置全局环境变量

...想在构建前后运行的通用脚本文件中。我一直无法弄清楚如何在该脚本中设置一些环境变量,以便Xc 查看详情

如何在流明 5.2 中设置时区?

】如何在流明5.2中设置时区?【英文标题】:HowcanIsetTimezoneinlumen5.2?【发布时间】:2016-05-1807:55:21【问题描述】:我没有找到有关如何在Lumen5.2中设置默认时区的任何相关信息(仅技巧)。有什么干净的方法可以做到这一点吗?... 查看详情

如何在 Netbeans 中设置环境变量?

】如何在Netbeans中设置环境变量?【英文标题】:HowtosetEnvironmentVariableinNetbeans?【发布时间】:2012-08-0303:01:36【问题描述】:我正在netbeans中运行基于maven的Spring项目。我在我的项目配置文件中使用环境变量来打开基于该变量值的... 查看详情

如何在 apache xampp 中设置环境变量?

】如何在apachexampp中设置环境变量?【英文标题】:howtosetenvironmentvariablesinapachexampp?【发布时间】:2016-09-3022:11:39【问题描述】:我想在windows的apachexampp中添加一些环境变量。我已经尝试过以下方法:在httpd.conf中添加这个SetEnvENV... 查看详情

如何在activemq中设置队列监控

】如何在activemq中设置队列监控【英文标题】:HowtosetupMonitoringforqueueinactivemq【发布时间】:2011-12-2707:13:32【问题描述】:我在ActiveMQ页面中阅读,使用JMX我们可以监控activemq中的队列。如果队列有消息(深度高)或ActiveMQ中的服... 查看详情

如何在 Flutter 中设置不同的 firebase 环境

】如何在Flutter中设置不同的firebase环境【英文标题】:HowtosetupdifferentfirebaseenvironmentsinFlutter【发布时间】:2018-10-2518:12:31【问题描述】:我正在尝试弄清楚如何在颤振项目中设置不同的firebase环境。我了解如何在firebase中执行此... 查看详情

如何使用 NMake 设置环境变量

...这个变量,还是需要在调用NMake之前创建一个设置变量的批处理脚本? 查看详情

如何在qtcreator中设置环境变量

参考技术A环境变量CPPLIBS在bashrc文件中已经存在,用如下命令:echo$CPPLIBS可以得到正确的路径。在terminal中使用qmake;make;命令后可以正确构建项目。原因是:qtcreator从系统中载入变量,于是找到/usr/bin/qtcreator.sh中加入该环境变... 查看详情

如何使用 python 在 GitHub 操作中设置环境变量

】如何使用python在GitHub操作中设置环境变量【英文标题】:HowtosetenvironmentvariablesinGitHubactionsusingpython【发布时间】:2022-01-0410:49:41【问题描述】:我想执行一个python脚本来在GitHub操作中设置一些环境变量。我想稍后在我的GitHub操... 查看详情

如何使用 cpanel 和 PHP 调用在应用程序管理器中设置的环境变量

】如何使用cpanel和PHP调用在应用程序管理器中设置的环境变量【英文标题】:HowdoyoucallyourenviromentvariablessetinapplicationmanagerusingcpanelandPHP【发布时间】:2022-01-0906:29:15【问题描述】:所以我使用应用程序管理器创建了一个测试应用... 查看详情

如何在 Postman 中设置全局函数?

】如何在Postman中设置全局函数?【英文标题】:HowdoIsetaglobalfunctioninPostman?【发布时间】:2017-02-2117:27:02【问题描述】:我想在我的第一个邮递员请求的预请求脚本中声明一个函数,然后在之后的每个请求中使用它。我已经在邮... 查看详情

在 Laravel 5.1 配置文件中读取 Vhosts 中设置的环境变量

】在Laravel5.1配置文件中读取Vhosts中设置的环境变量【英文标题】:ReadingEnvironmentVariablesSetInVhostsInLaravel5.1ConfigFiles【发布时间】:2015-11-1015:10:51【问题描述】:使用laravel5.1。因此,在我的apachevhost中,我将环境变量“ENV_DEV”设置... 查看详情

如何在 .NET Core(用户范围或系统范围)中设置全局环境变量

】如何在.NETCore(用户范围或系统范围)中设置全局环境变量【英文标题】:Howtosetaglobalenvironmentvariablein.NETCore(user-wideorsystem-wide)【发布时间】:2021-09-2617:06:32【问题描述】:在完整的.NET中,我们可以将EnvironmentVariableTarget枚举传... 查看详情

如何让bat,cmd文件后台运行?

...天涯问答:可以编辑一个vbs脚本,在其中以隐藏窗口运行批处理程序。------------------------------------------------------------Setws=CreateObject("Wscript.Shell")ws.run"cmd/c批处理程序名",vbhide将水平线中代码拷贝到记事本中,保存为... 查看详情