none
Problema com FOR em script .BAT RRS feed

  • Pergunta

  • Bom dia pessoal,

    Eu preciso de ajuda com esse script...

    Tenho um for para pegar um arquivo com lista de máquinas, e entao entrar no laço e executar...

    O que ocorre é que quando ele faz a 1 máquina e termina ela, o script fecha, ele nao volta pro início do for e executa a proxima maquina...

    se eu fecho o for com o ")" logo após o echo !machine! ele dá echo com as maquinas que estao dentro do machines.txt

    entao, nao sei ainda pq ele está saindo... alguém poderia me ajudar? (mesmo com o pause no final ele nao pausa)

    obrigado!!

    @echo off
    
    set server=\server01\share
    
    dir /b /o %server% |find "i32" |more +2 > 32.txt
    
    FOR /F "tokens=*" %%A in (32.txt) do SET file32=%%A
    
    dir /b /o %server% |find "i64" |more +2 > 64.txt
    
    FOR /F "tokens=*" %%B in (64.txt) do SET file64=%%B
    
    setlocal EnableDelayedExpansion
    
    for /f "tokens=*" %%C in (machines.txt) do (
    
    set "machine=%%C"
    
    echo !machine!
    
    if exist "\!machine!\c$\Program Files (x86)" goto 64bits
    
    goto goo
    
    :goo
    
    if exist "\!machine!\c$\Arquivos de Programas (x86)" goto 64bits
    
    goto 32bits
    
    :64bits
    
    xcopy /D /Y /F /C %server%\%file64% \!machine!\c$\
    
    PsExec.exe -d \!machine! "C:\%file64%" /q
    
    goto end
    
    :32bits
    
    xcopy /D /Y /F /C %server%\%file32% \!machine!\c$\
    
    PsExec.exe -d \!machine! "C:\%file32%" /q
    
    goto end
    
    :end
    
    echo Finished !micro!
    
    )
    pause
    


    • Editado Fábio JrModerator sexta-feira, 22 de novembro de 2013 13:44 Formatação código
    sexta-feira, 22 de novembro de 2013 10:51

Respostas

  • Consegui resolver...

    ali no for, ficou logo assim:

    call :inicia
    )
    pause
    exit /b

    ai o :inicia começa o primeiro if

    • Marcado como Resposta dimago sexta-feira, 22 de novembro de 2013 15:02
    sexta-feira, 22 de novembro de 2013 15:01

Todas as Respostas

  • Diego,

    Executar o script a partir de um prompt já aberto e sem a linha @echo off no inicio pode ajudar a identificar o erro.

    De cara eu vi uma coisa que pode estar gerando erro:

    if exist "\!machine!\c$\Program Files (x86)" goto 64bits

    nesta linha você está tentado identificar se um diretório existe em uma máquina remota, só que está faltando um "\" no inicio do caminho.


    Fábio de Paula Junior

    sexta-feira, 22 de novembro de 2013 13:47
    Moderador
  • Oi Fábio,

    Acabei colando errado, existe o \\ no script..

    me parece que o goto dá pau no for

    ai achei algo colocando um call :roda

    onde esse :roda eu coloco logo abaixo..

    vou fazer mais alguns testes...

    obrigado!


    • Editado dimago sexta-feira, 22 de novembro de 2013 14:55
    sexta-feira, 22 de novembro de 2013 14:53
  • Consegui resolver...

    ali no for, ficou logo assim:

    call :inicia
    )
    pause
    exit /b

    ai o :inicia começa o primeiro if

    • Marcado como Resposta dimago sexta-feira, 22 de novembro de 2013 15:02
    sexta-feira, 22 de novembro de 2013 15:01