【问题标题】:Is there an equivalent source command in Windows CMD as in bash or tcsh?Windows CMD 中是否有与 bash 或 tcsh 中等效的源命令?
【发布时间】:2012-05-11 06:09:01
【问题描述】:

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

【问题讨论】:

    标签: windows bash unix cmd tcsh


    【解决方案1】:

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

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

    set name="test3"
    

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

    call env.bat
    call print.bat
    pause
    

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

    echo %name%
    

    【讨论】:

      【解决方案2】:

      在 windows 上使用 git bash,效果很好!

      【讨论】:

        【解决方案3】:

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

        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-ing 命令。您将需要以这种方式测试哪些命令来源。只是为了设置一些环境变量而进行了几次试验。

        我认为我们不能执行逻辑或循环,因为命令处理器会在开始时扫描文件。我只是有一个简单的解决方法来重用环境定义等共享的东西。大多数其他事情不需要实际的source 命令(我希望)。祝你好运。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 如果mybat.bat运行其他批处理脚本,需要call他们允许执行返回到当前脚本。
          • call 但是不适用于 powershell 脚本。假设您要导入一个函数并调用它,source 将在 bash 中工作
          • 这是一个非常古老的问题,但我认为这应该是正确的答案。 "call myfile.bat" --> 从批处理文件中读取环境变量,并在当前环境中设置那些调用“call”命令的环境变量。那么所有这些变量都可以在当前 shell 中使用。
          • 哦,它是完美的 42... 我几乎希望我没有投票,只是把它留在那里。非常感谢! :)
          【解决方案5】:

          例如设置 VC# vars

          C:\Windows\System32\cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
          

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

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

                c:> type EnvSetTest.bat
                set TESTXYZ=XYZ
              
                c:> .\EnvSetTest.bat
              
                c:> set | find "TESTX"
                TESTXYZ=XYZ
                c:>
              

              IHTH。

              【讨论】:

              • @thomasa88:您可以再次单击反对票按钮以删除反对票
              • @BeniBela 您只能撤消投票几分钟,然后它就会被锁定。 shellter:已更正投票,感谢您的好回答 :) 还发现 setlocal 可用于局部变量,并且可以像这样在本地和全局之间移动数据:wiki.answers.com/Q/…
              【解决方案8】:

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

              【讨论】:

              • 感谢沉约翰。我已经在网上搜索并没有找到任何等价物。我见过 Powershell,也许我会开始使用它而不是旧的命令提示符。
              • 无法让 powershell 执行此操作
              • TLDR:力量! 无限力量!
              • "call" 对我有用,第二个回答也有超过 10 个赞。
              猜你喜欢
              • 2015-07-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多