Ir ao conteúdo

Bat macro em batch para renomear todo novo arquivo e comprimir


Ir à solução Resolvido por ricardo_br,

Posts recomendados

Postado

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?

Postado

Sim pode usar o agendador de tarefas para verificar sempre no intervalo que você quiser. o arquivo do prompt do winrar é o rar.exe pode usar ele para adicionar arquivos em um arquivo rar.

Postado

@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"

 

Postado

@Swalls é que na parte que vai renomear tem várias aspas ai da erro em:

 

@fname_%datahora%.@ext = "nomedoarquivo"_202211010559."bak"

 

você está tentando renomear para um nome usando várias aspas no meio do nome....

  • Curtir 1
Postado

@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"

Postado

@ricardo_br adiciona a data e hora atual sem erro.
mas eu queria mudar o nome no, ex

abacate_20160101.bak

quero transformar em abacate_datadehoje

vi um post seu mostrando como fazer isso mas não estou achando.

 

Postado

@Swalls Poderia dar alguns exemplos de nomes de arquivo como eles poderiam aparecer? Posso remover tudo depois do underscore (_) ou então posso remover todos os números do nome e depois adicionar a data que você quer....

  • Curtir 1
Postado

@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 😍

  • Solução
Postado

@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
Postado

@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"

 

Postado

@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"

Postado

@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

 

Postado

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

Postado

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

Postado

@ricardo_br ainda não testei, infelizmente proximo backup só amanha.

eu retirei o echo off para poder ver o winrar trabalhando, não dá código de erro, só ficou em 2% de zipagem do arquivo infinitamente.

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

 

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