Ir ao conteúdo
  • Cadastre-se

Bat tem como fazer uma loading bar no .bat?


Posts recomendados

O comando que estou utilizando teria alguma forma de fazer uma loading bar para esses comandos?

 

@echo off

rd /Q /s c:\$Recycle.bin

del /q/f/s %temp%\*
del /q/f/s C:\Windows\temp

del /q/f/s C:\Windows\Prefetch

del /q/f/s C:\Windows\SoftwareDistribution

Dism.exe /online /Cleanup-Image /StartComponentCleanup

 

E esses comandos com del realmente fazem a limpeza?

Link para o comentário
Compartilhar em outros sites

Veja se esse tópico pode ajudar na parte de loading bar:

 

Esse comando de apagar a pasta da lixeira com rd /q /s "C:\$Recycle.bin" acho meio perigoso não sei se isso vai dar erro ou se o Windows simplesmente cria a pasta novamente, seria melhor apagar apenas os arquivos e não a pasta inteira.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Se o programa não possuir retorno de status, você pode montar conforme o link indicado.

Lembrar que no caso é uma estimativa, ou por etapa. Se você estimar a média de arquivos, você coloca o print para cada etapa concluída. É comum nesses casos apenas informar a etapa, por exemplo, executando tarefa 1 de 5.

 

Link para o comentário
Compartilhar em outros sites

@ricardo_br @Silvio da Fonseca

 

@echo off setlocal EnableDelayedExpansion rem Count the number of files in this dir (just as an example) set n=0 for %%f in (*.*) do set /A n+=1 set /a lengthbar=100 rem Fill "bar" variable with 70 characters set "bar=" for /L %%i in (1,1,%lengthbar%) do set "bar=!bar!X" rem Fill "space" variable with filler spaces set "space=" for /L %%i in (1,1,%lengthbar%) do set "space=!space!_" rem "Process" the files and show the progress bar in the title set i=0 echo Processing files: for %%f in (*.*) do ( set /A i+=1, percent=!i!*%lengthbar%/!n! for %%a in (!percent!) do ( set bar2=!bar:~0,%%a! set /a left=%lengthbar%-%%a for %%b in (!left!) do ( set space2=!space:~-%%b! title %%a%% !bar2!!space2! ) ) echo !i!- %%f ping -n 5 localhost > NUL )

 

teria alguma forma de adapitar isso para o que eu quero?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@rieidi_gamer no dos passos, antes de você iniciar cada tarefa de "del" você emite um "echo".

 

Nos "scripts" precisa entender o que ele está sendo realizado, veja que ele efetua uma "leitura" dos arquivos a serem deletados e conforme são excluídos, ele fazer um "render" da barra de progresso.

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

@rieidi_gamer  Se vai mudar para c++ de uma olhada no meu código

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define TAMANHO_BUFFER 256

#define TAMANHO_BARRA 60

void
barra_progresso(int progresso, char adorno);

int
extrai_progresso(int valor_atual, int valor_total);

void
barra_comum(int tamanho_barra, char adorno, char meio);

void
pausa_msg(char *msg);

int main(void)
{
    int contador;
    for (contador = 0; contador < 400; contador++) {
        barra_progresso(extrai_progresso(contador, 400), '>');
        usleep(10000);
    }
    return(0);
}

void
barra_progresso(int progresso, char adorno)
{
    int progresso_atua = (progresso*TAMANHO_BARRA)/100;
    int progresso_falta = TAMANHO_BARRA-progresso_atua;
    int contador;
    printf("\r[");
    for (contador = 0; contador < progresso_atua; contador++) {
        printf("%c", adorno);
    }
    
    for (contador = 0; contador < progresso_falta; contador++) {
        printf(" ");
    }
    printf("]-%i%%", progresso);
    fflush(stdout);
}

int
extrai_progresso(int valor_atual, int valor_total)
{
    return(((valor_atual+1)*100)/valor_total);
}

void
barra_comum(int tamanho_barra, char adorno, char meio)
{
    int contador;
    putchar(adorno);
    for (contador = 0; contador < tamanho_barra; contador++) {
        putchar(meio);
    }
    printf("%c\n", adorno);
}

void
pausa_msg(char *msg)
{
    char buffer[TAMANHO_BUFFER];
    if (msg != NULL) {
        puts(msg);
    }
    puts("Pressione enter para continuar...");
    fgets(buffer, TAMANHO_BUFFER, stdin);
}

versão online!

 

Isso é apenas um recorte desse código.

apaga_arquivos.zip

Era só um teste e não funciona 😞

Link para o comentário
Compartilhar em outros sites

fiquei com preguiça de fazer em c, então fiz em python(não testei)
 

import os
from tqdm import tqdm

dirs = ["%temp%","temp","PREFETCH","SoftwareDistribution"]
counter = []
for dir in dirs:
    counter.extend([os.path.join(os.path.expandvars(dir),name) for name in os.listdir(os.path.expandvars(dir))])
# Adicione o argumento "desc" para exibir uma descrição na barra de progresso
for dir in tqdm(counter, desc="Removendo arquivos"):
    os.system(f"rd /Q /s {dir}")

bibliotecas:
TQDM

OS

 

você pode transformar em executável usando a biblioteca auto-py-to-exe.

 

 

segundo nossa querida IA, o código equivalente em c seria esse aqui:
 

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>

const char* dirs[] = {"%temp%", "temp", "PREFETCH", "SoftwareDistribution"};
int counter_size = 0;
char** counter = NULL;

void add_dir(const char* dir) {
struct dirent entry;
DIR dir_ptr = opendir(dir);
if (dir_ptr == NULL) {
return;
}
while ((entry = readdir(dir_ptr)) != NULL) {
if (entry->d_type == DT_DIR && strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
char path = malloc(strlen(dir) + strlen(entry->d_name) + 2);
sprintf(path, "%s/%s", dir, entry->d_name);
add_dir(path);
} else if (entry->d_type == DT_REG) {
char path = malloc(strlen(dir) + strlen(entry->d_name) + 2);
sprintf(path, "%s/%s", dir, entry->d_name);
counter = realloc(counter, sizeof(char*) * (counter_size + 1));
counter[counter_size++] = path;
}
}
closedir(dir_ptr);
}

int main() {
for (int i = 0; i < sizeof(dirs) / sizeof(dirs[0]); i++) {
char* expanded_dir = getenv(dirs[i]);
if (expanded_dir != NULL) {
add_dir(expanded_dir);
}
}
for (int i = 0; i < counter_size; i++) {
char command[256];
sprintf(command, "rd /Q /s "%s"", counter[i]);
system(command);
free(counter[i]);
}
free(counter);
return 0;
}

 

Link para o comentário
Compartilhar em outros sites

@rieidi_gamer mas*

é só pedir para a IA converter e dps reajustar (assumindo que você domina c#)

using System;
using System.Collections.Generic;
using System.IO;
using ConsoleProgress;

class Program {
    static void Main() {
        string[] dirs = { "%temp%", "temp", "PREFETCH", "SoftwareDistribution" };
        var counter = new List<string>();
        foreach (string dir in dirs) {
            counter.AddRange(Directory.GetFiles(Environment.ExpandEnvironmentVariables(dir)));
        }
        int count = counter.Count;
        var progressBar = new ProgressBar(count, "Removendo arquivos");
        for (int i = 0; i < count; i++) {
            string dir = counter[i];
            progressBar.Report(i + 1);
            Directory.Delete(dir, true);
        }
        progressBar.Dispose();
    }
}

 

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!