Esse código funciona e escolhe um arquivo aleatório, mas quando o coloco dentro do loop externo, "" "vazio.
rem scrambler
setlocal EnableDelayedExpansion
@echo off
cd j:\target
rem for /R %%t in (*.mp3) do (
REM echo ********************
REM echo T folder is %%~dpt
cd j:\source
set n=0
for /R %%f in (*.mp3) do (
set /A n+=1
set "file[!n!]=%%f"
)
set /A "rand=(n*%random%)/32768+1"
rem copy "!file[%rand%]!" j:\target
echo "!file[%rand%]!"
cd j:\target
REM copy "!file[%rand%]!" %%~dpt
REM move "!file[%rand%]!" j:\old
rem )
PS. O que estou tentando fazer é: pastas idênticas de origem e destino com arquivos mp3. Depois, percorro os arquivos de destino e, para cada arquivo de destino, os sobrescrito com um arquivo mp3 aleatório da pasta de origem. Eu (re) movo o arquivo da fonte e escolho aleatoriamente outro arquivo de origem para o próximo arquivo de destino, para esgotar todos os arquivos sem duplicatas. No final, o destino tem os mesmos arquivos e estrutura que a origem, mas agora eles estão embaralhados, ou seja, se eu conseguir alcançá-lo. Eu sei que a matriz leva algum tempo, então também quero otimizá-la.
windows
command-line
batch-file
vtastek
fonte
fonte
rand
uma string. Ele já está trabalhando com o código acima, imprimindo o nome do arquivo aleatório. Obrigado pela dica ECHO ON. O erro está eco"!file[%rand%]!"
aqui. Se você ativar o loop externorem for /R %%t in (*.mp3) do (
, poderá vê-lo. Eu suspeito que a parte EnableDelayedExpansion, devo colocá-lo em outro lugar, eu acho.Respostas:
Existem várias falhas no seu código
for /r
você recria / substitui a mesmafile[]
matriz a partir dos arquivos de origem.fonte
file[n]
e diminuirn
.