Estou escrevendo um arquivo em lote para realizar algumas operações em computadores remotos do meu prédio. Todos eles são nomeados com o mesmo prefixo, mas o número no final muda (01–65). Tentei seguir um tutorial on-line para criar um loop de arquivo em lote baseado em números e descobri o seguinte:
FOR /l %%N in (1,1,65) do (
set HOSTNAMETOUSE=prefix-%%N
ECHO %HOSTNAMETOUSE%
)
Isso funciona muito bem depois de atingir 10, pois são dois dígitos. O que preciso é que os números 1-9
apareçam como 01-09
, pois isso corresponde ao nosso esquema de nomenclatura. Essencialmente, preciso de um dígito zero à esquerda para as primeiras 9 iterações.Como posso fazer isso com arquivos em lote do Windows?
Responder1
Seu código postado não pode funcionar porque %HOSTNAMETOUSE%
é expandido quando a instrução é analisada, e todo o bloco entre parênteses é analisado em uma única passagem, antes que o loop seja executado. Portanto, o valor expandido é constante para todas as iterações.
Você deve usar a expansão atrasada para obter o valor no tempo de execução.
@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
set HOSTNAMETOUSE=prefix-%%N
ECHO !HOSTNAMETOUSE!
)
Agora, prefixe 0 conforme necessário.
Como você nunca precisa de mais do que um 0, você pode usar uma instrução IF.
@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
if %%N lss 10 (set HOSTNAMETOUSE=prefix-0%%N) else set HOSTNAMETOUSE=prefix-%%N
ECHO !HOSTNAMETOUSE!
)
Mas isso não é conveniente se a largura do seu número tiver mais de 2 dígitos. Uma solução mais geral é adicionar uma sequência denzeros com o comprimento desejado e, em seguida, use uma operação de substring para manter onmaioria dos dígitos à direita.
@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
set "n=00%%N"
set "HOSTNAMETOUSE=!n:~-2!
ECHO !HOSTNAMETOUSE!
)
Você pode estender facilmente esta solução para praticamente qualquer número de zeros à esquerda.
Responder2
Eu faria assim:
- Adicione '0' a cada número (então '01' mas também '065')
- Substring últimos 2 caracteres desta string
Como você substring em arquivo em lote (2 últimos caracteres):
SET string=abcd
echo %string%
SET string2=%string:~-2%
echo %string2%
Responder3
Nada de novo na resposta de @dbenham, apenas criei algumas das variáveis de valores coletadas na linha de comando e colocadas aqui para facilitar o copiar e colar - o crédito é todo do @dbenham acima:
set first=%1
set last=%2
set len=%3
setlocal EnableDelayedExpansion
FOR /l %%N in (%first%, 1, %last%) do (
set "n=0000000000000%%N"
set "padded=!n:~-%len%!
echo !padded!
)
Responder4
UsandoZtreeWin, navegue até o diretório correto pressionando \e pressione Enterpara entrar no diretório onde você pode CtrlTmarcar os arquivos que deseja renomear e, em seguida, CtrlRrenomeá-los para????<0>*.*
Por exemplo:
foo-0-bar.jpg -> foo-00-bar.jpg
foo-1-bar.jpg -> foo-01-bar.jpg
foo-2-bar.jpg -> foo-02-bar.jpg
...
No exemplo acima, ????
representa os primeiros 4 caracteres (foo-), <0>
insere um zero na 5ª posição e *.*
representa o restante do nome do arquivo (-bar.jpg) que permanecerá inalterado.
Marcando seus arquivos:
Renomeando seus arquivos:
ZTreeWiné um poderoso gerenciador de arquivos e diretórios em modo texto de 32 e 64 bits, modelado de perto no lendário XTreeGold(tm), mas aprimorado para os sistemas operacionais populares de hoje.