Como eu abro um arquivo aleatório em uma pasta, e defino que apenas arquivos com a (s) extensão (ões) de arquivo (s) especificada (s) devem ser abertos?

2

Como abro um arquivo aleatório em uma pasta e defino que somente arquivos com a (s) extensão (s) de nome de arquivo especificada (s) devem ser abertos? (De preferência, suportando nomes de arquivos Unicode também.)

Eu já dei uma olhada e encontrei este script em lote (.BAT):

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

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

Fonte: link

Funciona na abertura de qualquer arquivo aleatório em uma pasta, mas eu gostaria de poder definir que apenas arquivos com a (s) extensão (s) de nome de arquivo especificada (s) devem ser abertos. (Por exemplo, uma pasta contém arquivos .MKV (vídeo), .TP (vídeo), .MP4 (vídeo) e .JPG (imagem), e gostaria de abrir aleatoriamente apenas arquivos de vídeo, e não os arquivos de imagem .JPG.)

Ele também não suporta nomes de arquivos Unicode. Isso faz com que o Windows exiba essa mensagem de erro se abrir aleatoriamente um arquivo com um nome de arquivo Unicode:

Windows cannot find (filename of file with Unicode filename, with the Unicode characters replaced with a question mark). Make sure you typed the name correctly, and try again.

Propósitos:

  • Se você quiser assistir a um vídeo aleatório de uma pasta, mas a pasta também contém arquivos que não são de vídeo
  • Se você gostaria de ver uma imagem aleatória de uma pasta, mas a pasta também contém arquivos que não são de imagem.
  • Etc.

Sugestões para melhorar o código do arquivo .BAT (especialmente a 'aleatoriedade', já que muitas vezes recebo o mesmo arquivo duas ou três vezes sucessivamente) ou outra solução melhor (mesmo um script não-batch) é bem-vinda. Estou usando o Windows 7.

    
por galacticninja 30.11.2012 / 15:15

2 respostas

0

No Python, você pode abrir um arquivo JPG aleatório assim:

import glob,random,os
files = glob.glob("*.jpg")
file = random.choice(files)
print "Opening file %s..." % file
cmd = "rundll32 url.dll,FileProtocolHandler \"" + file + "\""
os.system(cmd)

Para abrir arquivos de vídeo como .MKV, .MP4 e .TP, substitua a linha files = glob.glob("*.jpg") por essas linhas:

files = glob.glob("*.mkv")
files.extend(glob.glob("*.mp4"))
files.extend(glob.glob("*.tp"))
    
por 30.11.2012 / 15:54
0

Esta é uma adição à resposta da poplitea .

Para usar o script Python na resposta do poplitea , salvei o script Python em C:\Programs\Scripts\ , com o nome do arquivo, open-random-video.py (script Python que abre vídeos aleatórios).

Em seguida, salvei o seguinte script como um arquivo em lote (.BAT) :

C:\Python27\python.exe "C:\Programs\Scripts\open-random-video.py" cd

Observe que: C:\Python27\ é onde o Python está instalado. Este diretório pode mudar dependendo de onde você instalou o Python. cd significa o diretório atual.

Eu então coloco o arquivo .BAT nas pastas que eu quero abrir arquivos aleatórios, e apenas execute o arquivo .BAT se eu quiser um arquivo aleatório aberto nessa pasta.

    
por 06.12.2012 / 07:03