Como posso alterar meu arquivo em lote para renomear um único arquivo para uma cadeia aleatória de caracteres?
Você pode passar o nome do arquivo que deseja alterar como um argumento %1
para o arquivo em lote.
Aqui está o arquivo de lote modificado:
@echo off
setlocal enableDelayedExpansion
set "chars=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
:retry
set "name="
for /l %%N in (1 1 8) do (
set /a I=!random!%%36
for %%I in (!I!) do set "name=!name!!chars:~%%I,1!"
)
if exist !name!%~x1 goto :retry
endlocal & ren %1 %name%%~x1
Notas:
- Apenas a parte do nome do arquivo de
%1
é aleatória. - A extensão existente é preservada.
Exemplo:
F:\test>dir *.dat
Volume in drive F is Expansion
Volume Serial Number is 3656-BB63
Directory of F:\test
15/12/2015 12:59 0 random.dat
1 File(s) 0 bytes
0 Dir(s) 1,776,913,768,448 bytes free
F:\test>test random.dat
F:\test>dir *.dat
Volume in drive F is Expansion
Volume Serial Number is 3656-BB63
Directory of F:\test
15/12/2015 12:59 0 IYSPA2FS.dat
1 File(s) 0 bytes
0 Dir(s) 1,776,913,768,448 bytes free
Leitura Adicional
- Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
- enabledelayedexpansion - Expansão com atraso fará com que as variáveis sejam expandidas em tempo de execução e não no tempo de análise.
- para / l - Realize condicionalmente um comando para um intervalo de números.
- parâmetros - Um argumento de linha de comando (ou parâmetro) é qualquer valor passado para um script em lote.