我知道在 unix 世界中,如果您编辑.profile
or.cshrc
文件,您可以执行source ~/.profile
orsource ~/.cshrc
以对当前会话产生影响。如果我在 Windows 上更改了系统变量中的某些内容,如何在不退出命令提示符会话并打开另一个命令提示符会话的情况下使其影响当前的命令提示符会话?
8 回答
在通常的 Windows 命令提示符(即 cmd.exe)中,只需使用call mybat.bat
我想要的。我得到了它设置的所有环境变量。
dos shell 将支持 .bat 文件,其中仅包含对变量的赋值,这些变量在执行时将在当前环境中创建变量。
c:> type EnvSetTest.bat
set TESTXYZ=XYZ
c:> .\EnvSetTest.bat
c:> set | find "TESTX"
TESTXYZ=XYZ
c:>
IHTH。
以下示例将帮助您解决问题。
env.bat
该文件用于设置变量。它的内容受到打击。
set name="test3"
test.bat
我们的主要批处理文件。
call env.bat
call print.bat
pause
现在print.bat
批处理文件打印变量。其内容如下
echo %name%
恐怕不会,但您可以开始使用支持点源的 Powershell。由于 powershell 窗口实际上是基于 cmd 的,因此您的所有 dos 命令将继续工作,并且您获得了新的权力,更多的权力。
我发现这个工作的唯一方法是从我自己的配置窗口启动一个新的 cmd 窗口。例如:
@echo off
echo Loading...
setlocal enabledelayedexpansion
call 1.cmd
call 2.bat
...
...
if "%LocalAppData%"=="" set LocalAppData=%UserProfile%\Local Settings\Application Data
SET BLAHNAME=FILE:%LocalAppData%\BLAH
call blah blah
cmd
最后一个 cmd 将启动一个新的 cmd 提示符,并将所需的设置导出到命令窗口。
这是一些有限用例的解决方法。您可以读入命令文件并在线执行它们。例如调用命令文件如下所示:
echo OFF
SETLOCAL ENABLEDELAYEDEXPANSION
:
echo. ----------------
echo. set-up java
echo. ----------------
echo.
rem call %DEV_SCRIPTS%\setup-java
for /F "tokens=*" %%A in ( %DEV_SCRIPTS%\setup-java.bat ) do (
%%A
)
call %DEV_SCRIPTS%\show-java
:
在setup-java.bat
文件中你不能使用%
扩展。你需要使用!
; 例如:
set JRE_HOME=!JRE_08!
rem
set JRE_TARGET=!JRE_HOME!
所以你是source
从文本文件中乱写命令。您将需要测试以这种方式获取的命令。只是为了设置一些环境变量而进行了几次试验。
我不认为我们可以做逻辑或循环,因为命令处理器在开始时会扫描文件。我只是有一个简单的解决方法来重用环境定义等共享的东西。大多数其他事情都不需要实际的source
命令(我希望)。祝你好运。
例如设置 VC# vars
C:\Windows\System32\cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
在 Windows 上使用 git bash,它工作得很好!