【问题标题】:Batch Script How to Set Variabes into another variable批处理脚本如何将变量设置为另一个变量
【发布时间】:2016-04-30 21:28:47
【问题描述】:

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

我在里面有 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

【问题讨论】:

  • call echo %EventRunningeHS% 应该扩展内部 %placenameHS%
  • @JosefZ:是的,我已经在my answer 中为其他 OP 关于同一主题的问题提供了此解决方案...
  • @Aacini 我预感这种问题一定在 SO 的某个地方有答案。懒得搜索:) 但是,我觉得 OP 的问题已经详细阐述,不值得通过标记为重复来惩罚。请给出你的答案...
  • @JosefZ:如果您阅读other question,您会发现 OP 没有对我的回答发布任何反馈。相反,他发布了一个新问题作为答案,没有解释他为什么这样做,然后他发布了这个新的[重复]问题!我不知道如何处理在评论中发布“我解释了一切”,但没有解释任何内容的用户...:/
  • 在您的其他问题中,我发布了一个答案。你测试过吗?有效?如果不是,问题是什么?如果您有兴趣解决您的问题,这是您应该发布的基本反馈,但您确实 NOT 发布了关于我的答案的一个详细信息!正如@JosefZ 的评论所指出的,这个问题的解决方案与我在另一个问题上的回答相同。你测试过吗?这里的问题是您似乎对解决方案并不真正感兴趣。否则,您现在应该向 JosefZ 的评论或我的回答发布任何有用的反馈(而不是发布无用的 cmets)。

标签: batch-file batch-processing


【解决方案1】:

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

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
)

ma​​in.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 ].

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多