It's been a while since i've had to write a batch file, and i'm having trouble with the following:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f %%a in ('dir f:\*mssql* /ad/b') do (
for /f %%b in ('dir f:\%%a\data /ad/s/b') do (
for /f %%c in ('dir %%b\*.mdf /b') do (
Set DBFileName=%%c
echo Filename: %DBFileName%
)
)
)
ENDLOCAL
GOTO:EOF
I would like to store the variable %%c from the FOR loop into the variable DBFileName, so that I can then pass this variable to other functions.
This batch file isn't complete as yet, but i've hit this roadblock already and i'm STUCK!
Expected output:
Filename: tempdb.mdf
Filename: testdb.mdf
Filename: master.mdf
Filename: model.mdf
Filename: msdb.mdf
Filename: fubar.mdf
Actual output:
Filename:
Filename:
Filename:
Filename:
Filename:
Filename:
Any ideas? thanks
My answer (not enough rep to answer own question)
It was delayed expansion of variables, bringing back bad memories.
Needed to use ! instead of %
Example script:
:FindSQL
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f %%a in ('dir f:\*mssql* /ad/b') do (
for /f %%b in ('dir f:\%%a\data /ad/s/b') do (
for /f %%c in ('dir %%b\*.mdf /b') do (
Set DBFileName=%%c
Echo Filename: !DBFileName!
Set DBPath=%%b\%%c
)
)
)
echo At this point the DBPath variable still works..
echo See? %DBPath%
ENDLOCAL
GOTO:EOF
By using ! instead of % the script waits to evaluate the variable until it reaches that point