Ir ao conteúdo
  • Cadastre-se

Variável númerica (criar sequencia de pastas ex: 001,002)


Ir à solução Resolvido por Marcelo-Poa,

Posts recomendados

Galera, alguém poderia me ajudar? Então, é que precisava de um bat pra pedir para digitar a quantidade de pastas e elas criarem até chegar em determinado número, por exemplo: Eu digitei 100 e o bat criará as pastas 001, 002, 003, 004, 005 ... até chegar em 100, com 3 dígitos, o bat que tenho aqui é esse:

 

@ECHO OFF
set /p qf="digite a quantidade de pastas: "
set /a "x=001"
:while1
    if %x% leq %qf% (
        echo "%x%"
        set /a "x=x + 001"
        goto :while1)
 

Só que ele cria sem os "0" à esquerda, daí está criando: 1, 2, 3, 4, 5, 6... até chegar no número que digitei, alguém poderia me dizer o que eu coloco na variável para ele definir 3 dígitos? 
Se souberem algum outro comando que execute essa função me mandem aqui por favor :)

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
  • Solução

Já tive um problema como esse, acontece que set /a faz operações matemáticas as coisas são interpretadas de modo para matemática então esse modo contagem não funciona a solução é criar uma outra variável b para tratar o resultado como cadeia de caracteres!

 

 

set / a a=a+1

 

set b=00%a%

 

Nesse caso você cria uma variável b com dois zeros na frente depois o resultado de a, nas primeiras nove contagens o resultado de b é satisfatório porém quando chegar ao numero 10 fica 0010, e assim não é como você quer, a solução é não usar a variável b completamente e sim somente os três últimos caracteres, então a variável b fica:

 

%b:~-3%

 

criando a pasta:

 

md %b:~-3%

Link para o comentário
Compartilhar em outros sites

@Marcelo-Poa Opa cara, tinha feito outro esqueminha que tava funcionando, mas esse dai é bem mais simples e usa menos comandos, no outro eu estava usando esse:

 

set /a "x=001"
:while2
    if %x% gtr 0 (
    set df=00)
    if %x% gtr 9 (
    set df=0)
    if %x% gtr 99 (
    set df=)
    if %x% leq %qf% (
        mkdir "Número %df%%x%"
        set /a "x=x + 1"
    goto :while2)

 

Eu acrescentava os 0 em na variavel df e colocava uma condição para definir quantos dígitos ele acrescentava :) 

Obrigado ai pela ajuda, essa que você mandou ai é bem mais simples e executa menos comandos.

E só mais uma coisa, Você sabe me dizer como faço pra pular algum número da sequencia? Tipo, eu digitei o número 20, dai queria que pulasse o 15, dai a sequencia ficaria, 1,2,3...14,16,17...20, sabe me dizer? Fiz uma aqui só que o comando é um pouquinho grande:

 

:while2

    if %x% equ 15 (
    set /a "x=x +1")

 

Tinha acrescentado essa condição com o número que eu queria pular antes do resto da condição, só que se eu quisesse pular uns 10 números, teria que escrever 10 vezes a função, se você puder me informar uma maneira melhor ficarei agradecido :)

Link para o comentário
Compartilhar em outros sites

12 horas atrás, Thyago Barbosa disse:

Oi Thyago, quanto ao pulo na sequencia não ví como simplificar, exceto o caso do pulo ser em razão da existência das pastas.

Por exemplo se já existirem um número de pastas, é possível pular as que já existem.

 

echo off

cls

:start

set /a a=a+1

set b=00%a%

if not exist %b:~-3% mkdir %b:~-3%

if %a% NEQ 100 goto start

 

No exemplo de cima vai criar somente as pastas que não existem, isso é para evitar muitas mensagens de erro ao tentar criar as pastas!

@Thyago Barbosa

Link para o comentário
Compartilhar em outros sites

@Marcelo-Poa Então, no caso não é pra pular as que já existem, mas sim NÃO criar determinado número, tipo, não tem nenhuma pasta criada, quero criar uns 50 números, mas NÃO quero criar a pasta 10, 15, 23, 27, 29 por exemplo. 

O que eu tava usando também, era depois das condições x+1 eu colocava rmdir nos números que eu não queria

ai ficava assim no final dos comandos:

 

rmdir /s /q "Numero 10"

rmdir /s /q "Numero 15"

rmdir /s /q "Numero 23"

rmdir /s /q "Numero 27"

rmdir /s /q "Numero 29"

 

Me falaram sobre um comando chamado array, que servia pra PULAR um número que não queria, mas não sei como usa.

Link para o comentário
Compartilhar em outros sites

Esse array desconheço, se existiu e coisa do ms-dos antigo


Pensei um pouco o que da para fazer é criar uma nova variável e digitar as pastas que você quer excluir
nesse método a variável é quebrada em partes:

echo off
cls
set /p qf="digite a quantidade de pastas: "
set /p excluir="digite a sequencia de pastas a excluir: "
:start
set /a x=x+1
set b=00%x%
if "%excluir:~0,3%"=="%b:~-3%" goto start
if "%excluir:~4,3%"=="%b:~-3%" goto start
if "%excluir:~8,3%"=="%b:~-3%" goto start
if "%excluir:~12,3%"=="%b:~-3%" goto start
if "%excluir:~16,3%"=="%b:~-3%" goto start
mkdir %b:~-3%
if %x% NEQ %qf% goto start
pause

se você digitar em excluir a sequencia  010,015,023 essas pastas não são criadas


no primeiro if excluir você esta lendo os três primeiros caracteres

no segundo começa a ler depois do quarto caractere, tres e depois dele

no terceiro começa a ler depois do oitavo caractere, tres e depois dele

essa sequencia vai ate onde você quiser.


 

Link para o comentário
Compartilhar em outros sites

@Marcelo-Poa Gostei desse comando, o único problema é que se tiver mais "IF %excluir%" do que a quantidade de Números, fica dando erro, tipo, se eu coloquei até a sequencia 16,0 e só digitei 12 caracteres nessa variavel ele dá erro e não funciona. Tem algum comando que resolve esses problemas de erros ai? porque dai eu deixava uma quantidade longa de IF %excluir%, e só acrescentava a quantidade de Números na variavel %excluir%

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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