Bash windows cmd环境

Bash windows cmd环境,bash,batch-file,cmd,environment,Bash,Batch File,Cmd,Environment,我有一个程序在特定环境下启动cmd控制台。问题是控制台是通过单击按钮启动的,因此我无法使用该环境自行创建自定义启动器 我想要的是: 给定一个文件,其中包含通过在自定义启动的cmd中运行set命令生成的set变量,我希望通过读取该文件在当前cmd控制台中设置环境 例如: in.txt请注意右侧相同变量中的空格: var1=c:\program files path=c:\;c:\bin var2=d:\folder with libs 在运行以下脚本后:./script.sh in.txt当

我有一个程序在特定环境下启动cmd控制台。问题是控制台是通过单击按钮启动的,因此我无法使用该环境自行创建自定义启动器

我想要的是: 给定一个文件,其中包含通过在自定义启动的cmd中运行set命令生成的set变量,我希望通过读取该文件在当前cmd控制台中设置环境

例如:

in.txt请注意右侧相同变量中的空格:

var1=c:\program files
path=c:\;c:\bin
var2=d:\folder with libs  
在运行以下脚本后:./script.sh in.txt当前cmd控制台中的环境应在运行set命令后输出:


注意:只要环境设置正确,bash脚本就可以在脚本中使用。

只需将in.txt重命名为in.bat,内容应为:

set var1=c:\program files
set path=c:\;c:\bin
set var2=d:\folder with libs

并在.bat中运行

我已设法编写了以下工作脚本:

用法:script.bat文件名 如果未提供文件名,则打印使用情况 在删除环境变量以进行可能的恢复之前,使用环境变量创建备份文件envbkp.bat

@echo off

set _exitStatus=0
set _argcActual=0
set _argcExpected=1

echo.

for %%i in (%*) do set /A _argcActual+=1

if %_argcActual% NEQ %_argcExpected% (
    call :_ShowUsage %0%
    set _exitStatus=1
    goto:_EOF
)

set _exitStatus=
set _argcActual=
set _argcExpected=

if exist ".\envbkp.bat" del ".\envbkp.bat"
echo @echo off > envbkp.bat
for /f "tokens=1* delims==" %%a in ('set') do (
    echo set %%a=%%b>> .\envbkp.bat
    set %%a=
)

for /f "tokens=1* delims==" %%a in ('type %~1') do (
    set %%a=%%b
)
goto:_EOF

:_ShowUsage
    echo [USAGE]: %~1 env_file
    echo.
if NOT "%~2" == "" (
    echo %~2
    echo.
)
goto:eof

:_EOF
@echo off

set _exitStatus=0
set _argcActual=0
set _argcExpected=1

echo.

for %%i in (%*) do set /A _argcActual+=1

if %_argcActual% NEQ %_argcExpected% (
    call :_ShowUsage %0%
    set _exitStatus=1
    goto:_EOF
)

set _exitStatus=
set _argcActual=
set _argcExpected=

if exist ".\envbkp.bat" del ".\envbkp.bat"
echo @echo off > envbkp.bat
for /f "tokens=1* delims==" %%a in ('set') do (
    echo set %%a=%%b>> .\envbkp.bat
    set %%a=
)

for /f "tokens=1* delims==" %%a in ('type %~1') do (
    set %%a=%%b
)
goto:_EOF

:_ShowUsage
    echo [USAGE]: %~1 env_file
    echo.
if NOT "%~2" == "" (
    echo %~2
    echo.
)
goto:eof

:_EOF