Já faz um tempo desde que eu tive que escrever um arquivo de lote, e estou tendo problemas com o seguinte:
@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
Eu gostaria de armazenar a variável %% c do loop FOR na variável DBFileName, para que eu possa passar essa variável para outras funções.
Esse arquivo em lote ainda não está completo, mas eu já atinhei esse bloqueio e estou preso!
Resultado esperado:
Filename: tempdb.mdf
Filename: testdb.mdf
Filename: master.mdf
Filename: model.mdf
Filename: msdb.mdf
Filename: fubar.mdf
Resultado real:
Filename:
Filename:
Filename:
Filename:
Filename:
Filename:
Alguma ideia?
obrigado
Minha resposta (não é suficiente para responder à pergunta)
Foi atrasada a expansão das variáveis, trazendo de volta más lembranças.
Necessário para usar! em vez de%
Exemplo de 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
Usando! em vez de% o script aguarda para avaliar a variável até atingir esse ponto