批处理脚本如何将Variabes设置为另一个变量

时间:2016-04-30 21:28:47

标签: batch-file batch-processing

我问了一个问题,但没有完全解释,所以这是我的问题。

我在里面有settings.ini有变量的部分

[HideAndSeekEvent]
EventRunning=[Hide And Seek Event] Has started at [ %placenameHS% ].

并获得另一个名为ini.bat的批处理文件

@setlocal enableextensions enabledelayedexpansion
@echo off
set file=%~1
set area=[%~2]
set key=%~3
set currarea=
for /f "usebackq delims=" %%a in ("!file!") do (
    set ln=%%a
    if "x!ln:~0,1!"=="x[" (
        set currarea=!ln!
    ) else (
        for /f "tokens=1,2 delims==" %%b in ("!ln!") do (
            set currkey=%%b
            set currval=%%c
            if "x!area!"=="x!currarea!" if "x!key!"=="x!currkey!" (
                echo !currval!
            )
        )
    )
)
endlocal

和另一个名为Getdata.bat的bat文件从.ini文件中调用变量,对于此部分有

for /f "delims=" %%a in ('call ini.cmd settings.ini HideAndSeekEvent EventRunning') do (
    set EventRunningeHS=%%a
)

在我的主.bat文件中,我调用了Getdata.bat文件

在我的主.bat中我得到了一些像这样的东西

SET placenameHS=Hotan
echo %EventRunningeHS%

它应该显示

[Hide And Seek Event] Has started at [ Hotan ].

但它显示:

[Hide And Seek Event] Has started at [ %placenameHS% ].

[注意]我没有设置我通过SQLCMD查询得到它的地名

osql -S %Server% -U %SQLUser% -P %SQLPass% -d Dother_Events -Q "SET NOCOUNT ON; SELECT Place_Name FROM _HideANDSeek_Map WHERE ID = %IDHS%" %osqluser% -b -w 9999 -h-1 -o .\Logs_in_use\HSLN7.txt
set /p HSLN7=<.\Logs_in_use\HSLN7.txt

1 个答案:

答案 0 :(得分:0)

我测试了您发布的代码和数据以及建议的解决方案。这些是我在测试中使用的文件。

<强>的Settings.ini

[HideAndSeekEvent]
EventRunning=[Hide And Seek Event] Has started at [ %placenameHS% ].

<强> ini.cmd

@setlocal enableextensions enabledelayedexpansion
@echo off
set file=%~1
set area=[%~2]
set key=%~3
set currarea=
for /f "usebackq delims=" %%a in ("!file!") do (
    set ln=%%a
    if "x!ln:~0,1!"=="x[" (
        set currarea=!ln!
    ) else (
        for /f "tokens=1,2 delims==" %%b in ("!ln!") do (
            set currkey=%%b
            set currval=%%c
            if "x!area!"=="x!currarea!" if "x!key!"=="x!currkey!" (
                echo !currval!
            )
        )
    )
)
endlocal

<强> Getdata.bat

@echo off

for /f "delims=" %%a in ('call ini.cmd settings.ini HideAndSeekEvent EventRunning') do (
    set EventRunningeHS=%%a
)

<强> main.bat

@echo off

call Getdata.bat

SET placenameHS=Hotan

echo Original output:
echo %EventRunningeHS%

echo Proposed solution:
call echo %EventRunningeHS%

这是我运行main.bat时的输出:

Original output:
[Hide And Seek Event] Has started at [ %placenameHS% ].
Proposed solution:
[Hide And Seek Event] Has started at [ Hotan ].