Dos Batch File Help: Armazenando %% c variável de FOR loop [Resolved]

2

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

    
por David W 28.07.2011 / 01:58

1 resposta

1

O que você pode ter que fazer para a instrução FOR é CALL uma sub-rotina ao passar %%c como argumento.

Por exemplo:

for /f %%c in ('dir %%b\*.mdf /b') do (call :SetVar"%%c")
...
:SetVar
  Set DBFileName=%1
  echo Filename: %DBFileName%
  goto :eof
    
por 28.07.2011 / 02:18