Batch file loosing variables in FOR loop -


i struggling 1 time now. tried , without enabledelayedexpansion, no joy. simply, variable %myfilename% empty right after it's set in loop:

::echo off setlocal enabledelayedexpansion echo -- backup databases -- set mypath=d:\sql_backup set mydbases=db1 db2 db3 db4  /f "tokens=2-4 delims=/ " %%a in ('date /t') (set mydate=%%c%%a%%b) /f "tokens=1-2 delims=/:" %%a in ("%time%") (set mytime=%%a-%%b) set mydate=%mydate:.=-%  %%q in (%mydbases%) (     echo db %%q processing      set myfilename=%mypath%\%%q_%mydate%_%mytime%.bak     set servername=.     echo %myfilename%     echo sqlcmd -b -e -s %servername% -d master -q "backup database [%%q] disk = n'%myfilename%' init , nounload , name = n'%%q backup', noskip , stats = 10, noformat"     if %errorlevel% == 0 (         echo ok     ) else if %errorlevel% == 1 (         echo failed!     ) )  echo. set mydate= set mytime= set backupfilename= set mypath= set mydbases= set myfilename= 

what lost %myfilename% imediatelly:

echo db db1 processing  set myfilename=db1_11-11-2016_0-54.bak  set servername=.  echo <<<----------here missing myfilename ----------<<<  echo sqlcmd -b -e -s . -d master -q "backup database [zdvrhnika] disk = n'' init , nounload , name = n'zdvrhnika backup', noskip , stats = 10, noformat " 

any idea?

edit after changing myfilename , servername variables simple texts, found out, not change @ all! myfilename empty, , servername ".", regardless of set them to?! , regardless of whether use setlocal enabledelayedexpansion or not. it's not script fault, environment stuff.

within block statement (a parenthesised series of statements), entire block parsed , then executed. %var% within block replaced variable's value at time block parsed - before block executed - same thing applies for ... (block).

hence, if (something) else (somethingelse) executed using values of %variables% @ time if encountered.

two common ways overcome 1) use setlocal enabledelayedexpansion **and use !var! in place of %var% access changed value of var ** or 2) call subroutine perform further processing using changed values.


Comments

Popular posts from this blog

sql server - Cannot query correctly (MSSQL - PHP - JSON) -

php - trouble displaying mysqli database results in correct order -

C++ Linked List -