Ir ao conteúdo
  • Cadastre-se

Bat Arquivo .bat para renomear um documento de um destino e colar em outro destino


Ir à solução Resolvido por ricardo_br,

Posts recomendados

Boa tarde amigos :)

    Estou precisando de um apoio em uma criação de um arquivo .bat, estou trabalhando com relatórios, e estes relatórios são gerados em 5 em 5 minutos com um nome aleatório em .csv, gostaria de saber se é possível programar um .bat para sempre que for gerado este relatório pelo sistema em 5 em 5 minutos ele renomeie para o nome de painel e que mova ele de destino . É possível realizar este script, ainda sou leigo com o .bat

doc.JPG

Link para o comentário
Compartilhar em outros sites

por exemplo, o relatório foi gerado pelo sistema, ai preciso que ele renomei o arquivo .csv posso jogar um (ren *.csv xxx.csv), após isso preciso que ele recorte e cole em uma outra pasta, creio que após isso vou ter que elaborar um .bat para excluir e assim ficar fazendo este procedimento em loop .

Link para o comentário
Compartilhar em outros sites

Veja se seria algo assim:

 

@echo off

:: Coloque aqui o caminho para a pasta fonte dos arquivos:
set Fonte=Fonte
:: Coloque aqui o caminho para a pasta destino:
set Destino=Destino
:: Coloque aqui o intervalo em que o batch deve verificar se existem arquivos novos em segundos:
set Intervalo=480
:: Especifique aqui o nome do arquivo:
set Arquivo=painel.xls

IF /i not exist "%Destino%" md "%Destino%"

:Repetir
for /f "delims=" %%a in ('dir /o-d /a-d /b "%Fonte%\*.xls"') do (
                                                                 call :Copiar "%%~a"
                                                                 goto :Next
                                                                )
:Next
timeout /t %Intervalo% >nul
goto :Repetir

:Copiar
IF /i exist "%Destino%\%Arquivo%" del /q "%Destino%\%Arquivo%"
cls
echo.
echo  Ultima Copia %Date% %time:~0,8% "%Fonte%\%~1" -^> "%Destino%\%Arquivo%"
copy "%Fonte%\%~1" "%Destino%\%Arquivo%" 1>nul
goto :EOF

 

JOIHFuA.gif

 

Link para o comentário
Compartilhar em outros sites

Coloquei algumas melhorias:

 

@echo off

:: Coloque aqui o caminho para a pasta fonte dos arquivos:
set Fonte=Fonte
:: Coloque aqui o caminho para a pasta destino:
set Destino=Destino
:: Coloque aqui o intervalo em que o batch deve verificar se existem arquivos novos em segundos:
set Intervalo=480
:: Especifique aqui o nome do arquivo:
set Arquivo=painel.xls

IF /i not exist "%Destino%" md "%Destino%"

:Repetir
for /f "delims=" %%a in ('dir /o-d /a-d /b "%Fonte%\*.xls"') do (
                                                                 call :Copiar "%%~a"
                                                                 goto :Next
                                                                )
:Next
timeout /t %Intervalo% >nul
goto :Repetir

:Copiar
set HDestino=
set HFonte=
IF /i exist "%Destino%\%Arquivo%" (
                                   for /f "Delims=" %%a in ('certutil -hashfile "%Destino%\%Arquivo%" ^|find /i /v ":"') do set "HDestino=%%a"
                                   for /f "Delims=" %%a in ('certutil -hashfile "%Fonte%\%~1" ^|find /i /v ":"') do set "HFonte=%%a"
                                  )

IF /i exist "%Destino%\%Arquivo%" IF "%HDestino%"=="%HFonte%" goto :EOF
cls
echo.
echo  Ultima Copia %Date% %time:~0,8% "%Fonte%\%~1" -^> "%Destino%\%Arquivo%"
copy "%Fonte%\%~1" "%Destino%\%Arquivo%" 1>nul
goto :EOF

 

Link para o comentário
Compartilhar em outros sites

@ricardo_br consegui fazer um que faça os comandos necessários, porém eu precisaria escrever ele em echo off, estes dois .bat abaixo estão funcionando como preciso porém precisaria criar um que rodaria este arquivo bat em 5 em 5 minutos  

 

ren *.csv xxx.csv (esta execução no .bat pega o arquivo .csv com qualquer nome e coloca nome de xxx )

move "C:\Users\Fronza\Documents\pasta\xlm1\*csv" "C:\Users\Fronza\Documents\pasta\xlm2" (este ira mover o arquivo, neste .bat ele ja subscreve o arquivo de destino, seria assim que eu precisava)

 

 

 

Link para o comentário
Compartilhar em outros sites

46 minutos atrás, Victor Hugo Manasczek disse:

precisaria criar um que rodaria este arquivo bat em 5 em 5 minutos 

 

Isso você pode fazer dentro do bat por isso coloquei o campo intervalo onde você devera especificar o intervalo em segundos, para 5min = 300

 

Mais se quiser também poderá fazer pelo Agendador de Tarefas onde poderá configurar para executar o bat de 5 em 5 minutos.

 

46 minutos atrás, Victor Hugo Manasczek disse:

ren *.csv xxx.csv (esta execução no .bat pega o arquivo .csv com qualquer nome e coloca nome de xxx )

move "C:\Users\Fronza\Documents\pasta\xlm1\*csv" "C:\Users\Fronza\Documents\pasta\xlm2" (este ira mover o arquivo, neste .bat ele ja subscreve o arquivo de destino, seria assim que eu precisava)

 

No caso eu preferi copiar ao invés de mover pela seguinte razão: Se tiver mais de um arquivo na pasta fonte ele ira mover o arquivo mais recente para pasta destino. Se dentro do intervalo "5 minutos" não for copiado um arquivo mais recente para a pasta "Fonte" pelo sistema que salva os arquivos lá o batch vai verificar a pasta Fonte novamente e o mais recente vai ser um arquivo que é mais antigo do que o que já está na pasta Destino, possivelmente substituindo o arquivo em Destino por uma versão mais antiga...

 

Não sei se deu para entender.

Link para o comentário
Compartilhar em outros sites

@ricardo_br

 

@echo off


set Fonte=C:\Users\Fronza\Documents\pasta\xlm2

set Destino=C:\Users\Fronza\Documents\pasta\xlm3

set Intervalo=480

set Arquivo=*.xls

IF /i not exist "%Destino%" md "%Destino%"

:Repetir
for /f "delims=" %%a in ('dir /o-d /a-d /b "%Fonte%\*.xls"') do (
                                                                 call :Copiar "%%~a"
                                                                 goto :Next
                                                                )
:Next
timeout /t %Intervalo% >nul
goto :Repetir

:Copiar
set HDestino=
set HFonte=
IF /i exist "%Destino%\%Arquivo%" (
                                   for /f "Delims=" %%a in ('certutil -hashfile "%Destino%\%Arquivo%" ^|find /i /v ":"') do set "HDestino=%%a"
                                   for /f "Delims=" %%a in ('certutil -hashfile "%Fonte%\%~1" ^|find /i /v ":"') do set "HFonte=%%a"
                                  )

IF /i exist "%Destino%\%Arquivo%" IF "%HDestino%"=="%HFonte%" goto :EOF
cls
echo.
echo  Ultima Copia %Date% %time:~0,8% "%Fonte%\%~1" -^> "%Destino%\%Arquivo%"
copy "%Fonte%\%~1" "%Destino%\%Arquivo%" 1>nul
goto :EOF

 

 

configurei desta forma e fala que o arquivo não pode ser encontrado.

image.png

Link para o comentário
Compartilhar em outros sites

@ricardo_br no caso os nomes que são gerados pelos relatórios são distintos, ele precisaria buscar pela extensão, ai qualquer arquivo que caísse na pasta ele iria transferir e renomer pela extensão. 

@ricardo_br consegui realizar a aplicação do .bat, na linha 9 precisei trocar o .xls por .csv (panguei kkk ), só que preciso que ele recorte o arquivo  e renomeie o arquivo de origem  para a pasta de destino.

 

 

no caso ele renomeia o arquivo antes ou depois de recortar para a pasta de destino 

 

 

Link para o comentário
Compartilhar em outros sites

Agora ele move o arquivo da fonte para destino mais só se a fonte for mais recente que o destino ou se o destino não existir, renomeando para o nome que você especificar.

 

No caso o batch deverá ser executado pelo agendador de tarefas no intervalo que você especificar...

 

@echo off

:: Coloque aqui o caminho para a pasta fonte dos arquivos:
set Fonte=Fonte
:: Coloque aqui o caminho para a pasta destino:
set Destino=Destino
:: Especifique aqui o nome do arquivo no Destino:
set Arquivo=painel.csv

IF /i not exist "%Destino%" md "%Destino%"

:Repetir
for /f "delims=" %%a in ('dir /o-d /a-d /b "%Fonte%\*.csv"') do (
                                                                 call :Mover "%%~a"
                                                                 goto :Next
                                                                )
:Next
exit

:Mover
if /i not exist "%Destino%\%Arquivo%" goto :IniciarM
set DataF=
set DataD=
for /f "delims=" %%a in ('forfiles /p "%Fonte%" /m "%~1" /c "cmd.exe /c echo @fdate@ftime"') do set "DataF=%%a"
for /f "delims=" %%a in ('forfiles /p "%Destino%" /m "%Arquivo%" /c "cmd.exe /c echo @fdate@ftime"') do set "DataD=%%a"

set "DataF=%DataF:~6,4%%DataF:~3,2%%DataF:~0,2%%DataF:~10,2%%DataF:~13,2%%DataF:~16,2%"
set "DataD=%DataD:~6,4%%DataD:~3,2%%DataD:~0,2%%DataD:~10,2%%DataD:~13,2%%DataD:~16,2%"

IF "%DataF%" LEQ "%DataD%" goto :EOF

:IniciarM
cls
echo.
echo  Ultima copia %Date% %time:~0,8% "%Fonte%\%~1" -^> "%Destino%\%Arquivo%"
if /i exist "%Destino%\%Arquivo%" del /q "%Destino%\%Arquivo%"
move "%Fonte%\%~1" "%Destino%\%Arquivo%" 1>nul	
goto :EOF

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!