Questão Como fazer este script ler todas as subpastas


eu encontrei script abrindo arquivos aleatórios. Eu mudei uma coisa e agora é aberto arquivo aleatório de C: / Alguém pode me dizer como alterá-lo para abrir o arquivo aleatório de C: / e todas as subpastas?

@echo off & setlocal
:: start of main
rem Set your path here:
set "workDir=C:\"

rem Read the %random%, two times is'nt a mistake! Why? Ask Bill.
rem In fact at the first time %random% is nearly the same.
@set /a "rdm=%random%"
set /a "rdm=%random%"

rem Push to
pushd "%workDir%"

rem Count all files in your path. (dir with /b shows only the filenames)
set /a "counter=0"
for /f "delims=" %%i in ('dir /b ^|find "."') do call :sub1

rem This function gives a value from 1 to upper bound of files
set /a "rdNum=(%rdm%*%counter%/32767)+1"

rem Start a random file
set /a "counter=0"
for /f "delims=" %%i in ('dir /b ^|find "."') do set "fileName=%%i" &call :sub2

rem Pop back from your path.
popd "%workDir%"

goto :eof
:: end of main

:: start of sub1
:sub1
rem For each found file set counter + 1.
set /a "counter+=1"
goto :eof
:: end of sub1

:: start of sub2
:sub2
rem 1st: count again,
rem 2nd: if counted number equals random number then start the file.
set /a "counter+=1"
if %counter%==%rdNum% (start "" "%fileName%")
goto :eof
:: end of sub2

:: -snap--- end of batch

0


origem


Todos os arquivos devem ter a mesma chance de serem selecionados, ou está tudo bem se os arquivos mais altos na árvore de diretórios forem mais prováveis? - Ben N
Sim, todos os arquivos devem ter chances iguais de serem abertos. - k073l
dir /s - /s Exibe arquivos no diretório especificado e em todos os subdiretórios. - DavidPostill♦
Olá! Como não somos um serviço de criação de scripts, precisamos que você nos forneça mais detalhes sobre onde você está ficando preso, além do código que você copiou de algum lugar. Então, onde você está ficando preso exatamente ao implementar as mudanças que você está pedindo? O que você já tentou, e quais foram os resultados dessas tentativas? Sem essa informação e trabalho de sua parte, essa pergunta receberá votos negativos e poderá ser fechada como "muito ampla". - Ƭᴇcʜιᴇ007


Respostas:


Você precisa do /s interruptor

mudança

for /f "delims=" %%i in ('dir /b ^|find "."') do call :sub1

para

for /f "delims=" %%i in ('dir /b /s ^|find "."') do call :sub1

e mudar

for /f "delims=" %%i in ('dir /b ^|find "."') do set "fileName=%%i" &call :sub2

para

for /f "delims=" %%i in ('dir /b /s ^|find "."') do set "fileName=%%i" &call :sub2

2



Oi k073I, isso ajudou? - blaze_125
Eu não sei. Deixei funcionar por 20 minutos e nada. - k073l
Por ser honesto eu tentei há algum tempo - k073l