2016-04-30 3 views
0

Ich stellte eine Frage, aber es wurde nicht vollständig erklärt, so dass das meine Frage ist.Batch Script Wie Variabes in eine andere Variable gesetzt werden

Ich habe settings.ini im Inneren Es gibt Abschnitte mit Variablen

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

und bekam eine andere Batch-Datei ini.bat

genannt
@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 

und eine andere bat-Datei Getdata.bat genannt Variablen zu nennen dort aus INI-Datei und für diesen Abschnitt ist

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

in meiner Haupt-.bat-Datei iam ca Befüllungs die Getdata.bat

Datei

in meinem Haupt-.bat bekam ich soetwas wie dieses

SET placenameHS=Hotan 
echo %EventRunningeHS% 

es

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

zeigen sollte Aber es zeigen:

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

[ HINWEIS] Ich setze nicht den Ortsnamen, den ich von SQLCMD bekommen habe Anfrage

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

'nennen echo% EventRunningeHS%' sollte innere '% placenameHS%' – JosefZ

+2

@JosefZ erweitern: Ja Ich habe diese Lösung bereits in [meine Antwort] (http://stackoverflow.com/questions/36958759/batch-script-how-to-set-variabes-inside-another-variable/36959503#36959503) zu den anderen OPs gegeben Frage zum selben Thema ... – Aacini

+0

@Aacini Ich habe mir gedacht, dass diese Art von Frage irgendwo bei SO eine Antwort haben muss. Zu faul, um zu suchen :) Allerdings habe ich das Gefühl, dass die Frage des OP gut ausgearbeitet ist und keine Strafe verdient, indem man sie als Duplikat markiert. Bitte geben Sie Ihre Antwort ... – JosefZ

Antwort

0

Ich habe den Code und die von Ihnen geposteten Daten sowie die vorgeschlagene Lösung getestet. Dies sind die Dateien, die ich im Test verwendet habe.

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% 

Dies ist der Ausgang, wenn ich main.bat laufen:

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