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
Post a Comment