2016-04-30 7 views
0

私は質問しましたが、完全に説明されていないので、私の質問です。バッチスクリプトVariabesを別の変数に設定する方法

iは変数とセクション

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

あり、その内部settings.iniを持って、

@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 

ini.batと呼ばれる別のバッチファイルや変数を呼び出すGetdata.batと呼ばれる別のバットファイルを得ました.iniファイルからこのセクションについては

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

私のメインの.batファイルiam ca Getdata.batが私のメインの.batに

ファイルlling私はこの

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 
+0

'%EventRunningeHS%' 'インナー%のplacenameHS%' – JosefZ

+2

@JosefZを拡大すべきであるエコーを呼び出す:はい、私はすでに[私の答え](http://stackoverflow.com/questions/36958759/batch-script-how-to-set-variabes-inside-another-variable/36959503#36959503)でこの解決策を他のOPに与えました同じトピックについての質問... – Aacini

+0

@Aacini私は、この種の質問にはどこかで答えが必要であることを予言しました。あまりにも怠惰な検索:)しかし、私は、OPの質問は十分に精巧で、重複としてフラグを立てて罰を受けることはないと感じています。あなたの答えを教えてください... – JosefZ

答えて

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:私はmain.batを実行したときに

@echo off 

call Getdata.bat 

SET placenameHS=Hotan 

echo Original output: 
echo %EventRunningeHS% 

echo Proposed solution: 
call echo %EventRunningeHS% 

これが出力されます。

Original output: 
[Hide And Seek Event] Has started at [ %placenameHS% ]. 
Proposed solution: 
[Hide And Seek Event] Has started at [ Hotan ]. 
関連する問題