Ir ao conteúdo
  • Cadastre-se

Bat macro em batch para renomear todo novo arquivo e comprimir


Ir à solução Resolvido por ricardo_br,

Posts recomendados

estou no serviço então não consigo postar o código aqui (atualizo dps).

como faço um arquivo batch detectar sempre que tiver um novo arquivo .bak e comprimir como .rar?

consegui fazer o código para renomear e transferir para o HD externo, mas não sei como fazer ele detectar um novo, talvez o agendador de tarefas? existe um comando em batch para transformar em .rar?

Link para o comentário
Compartilhar em outros sites

@ricardo_br

to com alguns problemas :/

fiz o código e fica dizendo "erro de sintaxe" sendo que não vejo erro algum
Agora que reparei, Os arquivos bak vem com nome_2016xxxx e eu queria substituir esse 2016xxxx para %date%%time%, porém tudo que consegui foi adicionar à  frente.

Eu poderia fazer em python mas não posso instalar serviços na máquina, também não tenho perm para usar powershell

 

parte do código que renomeia:

@echo off
REM insira o caminho original dos backups abaixo
set caminho_backup="caminho aqui"



REM insira o novo caminho dos backups
set novo_caminho="caminho aqui"




REM iniciando mudanças
set data=%date:~6,4%-%date:~3,2%-%date:~0,2%
set hora=%time:~0,2%-%time:~3,2%
set datahora=%data%%hora%
forfiles /P %caminho_backup% /M *.bak /D +%date% /C "cmd /c rename @path @fname_%datahora%.@ext"

 

Link para o comentário
Compartilhar em outros sites

@ricardo_br se esse é o caso, porque  quando eu uso

"cmd /c rename @path @fname_%data%.@ext" ele funciona?

ou quando eu removo a "-" que separa os numeros, funciona também.

você sabe como eu poderia fazer para remover a data de 2016 que já vem no nome?

 

@echo off

REM insira o caminho original dos backups abaixo

set caminho_backup=""

REM insira o novo caminho dos backups

set novo_caminho=""

REM iniciando mudanças

set data=%date:~6,4%%date:~3,2%%date:~0,2%

set hora=%time:~0,2%%time:~3,2%

set datahora=%data%%hora%

forfiles /P %caminho_backup% /M *.bak /D +%date% /C "cmd /c rename @path @fname_%datahora%.@ext"

Link para o comentário
Compartilhar em outros sites

@ricardo_br remover tudo depois do underscore.

 

bakclients_201633225.bak

bakdaskfirmds_201633225.bak

bakconditionfkor_201633225.bak

bakcdicaixa_201633225.bak

...

bakclients_dataehoradehoje.bak

bakdaskfirmds_dataehoradehoje.bak

bakconditionfkor_dataehoradehoje.bak

bakcdicaixa_dataehoradehoje.bak

...

bakclients_datadehoje.rar

bakdaskfirmds_datadehoje.rar

bakconditionfkor_datadehoje.rar

bakcdicaixa_datadehoje.rar

...

 

se possível, se n for pedir muito, comenta seu código para eu entender 😍

Link para o comentário
Compartilhar em outros sites

  • Solução

@Swalls veja se da para entender:

 

@echo off
chcp 1252 >nul

REM insira o caminho original dos backups abaixo
set "caminho_backup=%userprofile%\desktop"

REM insira o novo caminho dos backups
set "novo_caminho="c:\backup"

REM iniciando mudanças
set data=%date:~6,4%-%date:~3,2%-%date:~0,2%
set hora=%time:~0,2%-%time:~3,2%
set datahora=%data%%hora%


:: Pega os arquivos que tem data maior que hoje e envia os dados na forma de 3 parâmetros para a função Renomear
:: onde:
:: %%~a = caminho completo
:: %%~na = somente nome do arquivo
:: %%~xa = somente a extensão do arquivo
for /f "tokens=1 delims=" %%a in ('forfiles /P %caminho_backup% /M *.bak /D +%date% /C "cmd /c echo @path"') do call :Renomear "%%~a" "%%~na" "%%~xa"

exit

:Renomear
:: Dentro dessa função os parâmetros são reconhecidos como (conforme a ordem em que são passados):
:: %~1 = caminho completo
:: %~2 = somente nome do arquivo
:: %~3 = somente a extensão
:: %%~a = vai ser o nome do arquivo até o primeiro underscore:

for /f "tokens=1 delims=_" %%a in ("%~2") do ren "%~1" "%%~a_%datahora%%~3"
goto :EOF

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Swalls sobre os sets, erro meu deveria ser:

set "caminho_backup=%userprofile%\desktop" 

set "novo_caminho=c:\backup"

 

Tente com aspas em %caminho_backup%:

 

for /f "tokens=1 delims=" %%a in ('forfiles /P "%caminho_backup%" /M *.bak /D +%date% /C "cmd /c echo @path"') do call :Renomear "%%~a" "%%~na" "%%~xa"

 

Link para o comentário
Compartilhar em outros sites

@ricardo_br mestre ricardo, porque quando eu faço isso:
 

forfiles /P %caminho_backup% /M *%datahora% /C "cmd /c %rar% a @file @path -ep -df"

sendo rar

set rar="C:\Program Files\WinRAR\Rar.exe"

ele me diz que o argumento é invalido

jSPuQB0.png

 

quando eu adiciono no path as vezes dá o erro "arquivo do tipo fontconfig não encontrado"

Link para o comentário
Compartilhar em outros sites

@ricardo_br mestre ricardo, quando botei meu script em produção ele renomeou e zipou o arquivo, mas quando chegou no segundo arquivo(um pouco grande) ficou parado em 2% e o primeiro ainda estava travado como se tivesse em uso, atrasando a gente pois tive que matar o serviço 😶. O sr sabe me dizer o que errei?
ps: coloquei o rar no path.


chcp 1252 >nul

REM insira o caminho original dos backups abaixo
set caminho_backup="O:"

REM insira o novo caminho dos backups
set novo_caminho=""

REM insira o caminho do executável rar do seu programa winrar
set rar="C:\Program Files\WinRAR\Rar.exe"

REM iniciando mudanças
set "dt=%date:~0,2%%date:~3,2%%date:~6,4%"
set "hr=_%time:~0,2%%time:~3,2%"
set datahora=%dt%%hr%


:: Pega os arquivos que tem data maior que hoje e envia os dados na forma de 3 parâmetros para a função Renomear
:: onde:
:: %%~a = caminho completo
:: %%~na = somente nome do arquivo
:: %%~xa = somente a extensão do arquivo
for /f "tokens=1 delims=" %%a in ('forfiles /P %caminho_backup% /M *.bak /D +%date% /C "cmd /c echo @path"') do call :Renomear "%%~a" "%%~na" "%%~xa"

exit



:Renomear
:: Dentro dessa função os parâmetros são reconhecidos como (conforme a ordem em que são passados):
:: %~1 = caminho completo
:: %~2 = somente nome do arquivo
:: %~3 = somente a extensão
:: %%~a = vai ser o nome do arquivo até o primeiro underscore:

for /f "tokens=1 delims=_" %%a in ("%~2") do ren "%~1" "%%~a_%datahora%%~3"



forfiles /P %caminho_backup% /M *_%datahora%.bak /C "cmd /c rar a -r @fname @path -ep"



goto :EOF

 

Link para o comentário
Compartilhar em outros sites

@ricardo_br segundo meu superior, para evitar infecções no discos rígidos externos de backup, o local de salvamento é o mesmo de origem e passamos manualmente depois.

os tamanho variam entre 38.000KB sendo maior com 25GB (ficando 1,5GB ao ser compactado).

ele travou em 2% compactando um de 3GB e não liberou o de 38kkb, achei incrivel que ele já faz na ordem de menor para o maior sem que seja especificado.

em maquina host funcionou normalmente..

Link para o comentário
Compartilhar em outros sites

Pelo que eu vi o tamanho máximo de um arquivo rar é 9000 PB (muito mais que 25 GB) então não deve ser isso.

 

Eu coloquei umas aspas na parte da mascara do forfiles /m porque parece que pode ter espaços dentro do %datahora%....

 

Veja se funciona:

https://pastebin.com/raw/43utNSHw

 

Se não funcionar, tenta colocar um pause antes do exit para ver que erros aparecem....

Link para o comentário
Compartilhar em outros sites

Em 09/11/2022 às 14:48, ricardo_br disse:

 

https://pastebin.com/raw/43utNSHw

 

Se não funcionar, tenta colocar um pause antes do exit para ver que erros aparecem....

esse deu erro de sintaxe.

 

o antigo funciona mas a partir do segundo item a zipagem travou, dessa vez em 8%. (não dá erro, só fica em 8% ad eternum)

eu ativo em maquina host para não consumir o processador do servidor, e ele zipa no SSD do servidor, onde o backup é feito.
mas ele só consegue zipar um, o outro trava em dado momento.

se eu faço tudo na maquina local funciona normal, porém zipar passar arquivos desse tamanho e depois voltar é 1h kkk.

 

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!