45

我知道在 unix 世界中,如果您编辑.profileor.cshrc文件,您可以执行source ~/.profileorsource ~/.cshrc以对当前会话产生影响。如果我在 Windows 上更改了系统变量中的某些内容,如何在不退出命令提示符会话并打开另一个命令提示符会话的情况下使其影响当前的命令提示符会话?

4

8 回答 8

61

在通常的 Windows 命令提示符(即 cmd.exe)中,只需使用call mybat.bat我想要的。我得到了它设置的所有环境变量。

于 2012-05-08T14:17:12.440 回答
17

dos shell 将支持 .bat 文件,其中仅包含对变量的赋值,这些变量在执行时将在当前环境中创建变量。

  c:> type EnvSetTest.bat
  set TESTXYZ=XYZ

  c:> .\EnvSetTest.bat

  c:> set | find "TESTX"
  TESTXYZ=XYZ
  c:>

IHTH。

于 2012-05-01T22:15:41.080 回答
9

以下示例将帮助您解决问题。

env.bat该文件用于设置变量。它的内容受到打击。

set name="test3"

test.bat 我们的主要批处理文件。

call env.bat
call print.bat
pause

现在print.bat批处理文件打印变量。其内容如下

echo %name%
于 2018-06-11T07:31:26.060 回答
4

恐怕不会,但您可以开始使用支持点源的 Powershell。由于 powershell 窗口实际上是基于 cmd 的,因此您的所有 dos 命令将继续工作,并且您获得了新的权力,更多的权力。

于 2012-05-01T18:40:20.140 回答
1

我发现这个工作的唯一方法是从我自己的配置窗口启动一个新的 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 提示符,并将所需的设置导出到命令窗口。

于 2013-04-25T17:13:45.287 回答
0

这是一些有限用例的解决方法。您可以读入命令文件并在线执行它们。例如调用命令文件如下所示:

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命令(我希望)。祝你好运。

于 2018-06-07T00:31:58.273 回答
-1

例如设置 VC# vars

C:\Windows\System32\cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
于 2014-01-12T06:56:21.833 回答
-8

在 Windows 上使用 git bash,它工作得很好!

于 2018-06-11T07:26:22.707 回答