Como mover arquivos com uma extensão de arquivo específica de dentro de uma pasta pai, assim como suas subpastas para uma nova pasta

0

Eu quero mover todos os arquivos com extensões como: .JPEG .MP3 .MP4 .MOV .AVI .PDF .PSD .WAV .TXT

... para novas pastas pai nomeadas após a extensão dos arquivos contidos nela. Atualmente eu tenho muitos arquivos dentro de tantas subpastas (em uma pasta pai) para fazer isso manualmente. Eu tentei pesquisar a pasta pai com * para, em seguida, classificar por tipo de arquivo, mas é muito e meu sistema congela ou está inutilizável / lento. suponha que eu não saiba nada em relação a scripts / arquivos em lote, mas posso seguir instruções, copiar e colar;) por favor avise.

    
por Nevermind Susan 21.07.2016 / 09:38

2 respostas

0

(Após edição e comentários) Este script deve fazê-lo, incluindo subpastas:

@echo off
for \r %%f in (*) do (
    if not exist %%~xf mkdir %%~xf
    move /y %%f %%~xf\%%~nf.%%~xf
)
pause

Se você nunca usou um script em lote antes, veja como funciona:

  1. Abra o Notepad ( não MS Word ou WordPad)
  2. Copie / cole o script nele
  3. Arquivo - > Salvar como
  4. No menu suspenso "Tipo", selecione "Todos os tipos"
  5. Salve o arquivo como something.bat (você pode alterar o something , mas o .bat precisa estar lá)
  6. Coloque o arquivo no mesmo diretório que os arquivos necessários para trabalhar
  7. Clique duas vezes no arquivo

Certifique-se de testá-lo antes de realmente usá-lo. O pause no final não é necessário, ele apenas solicitará que você pressione uma tecla antes de fechar a janela.

    
por 21.07.2016 / 09:57
0

Ok, eu consertei meu código. Você precisa fazer duas coisas. Primeiro, você deve ter um "diretório_de_arquivos" que contém todos os arquivos e subpastas com arquivos. Em seguida, você deve ter uma nova pasta pai, "new_parent_directory", que está vazia. new_parent_directory será organizado pelas terminações dos arquivos dentro de "diretório_de_arquivos". Essencialmente, este script procura por todos os arquivos dentro de um diretório e diretórios dentro desse diretório, então, cria uma lista de terminações de arquivos e, em seguida, cria diretórios em um novo diretório baseado nessas terminações de arquivos e, em seguida, leva tudo os arquivos dentro do diretório pai e os move para os diretórios recém-estabelecidos.

Se você tem python instalado .....

No terminal, digite

python

então,

import os

então,

#this is ths directory that contains all your files 
#YOU MUST CHANGE THIS!!!!!!
directory_of_Files = "/Users/name/Desktop/test1"

#AND YOU MUST CHANGE THIS!!!!!!
new_parent_directory = "/Users/name/Desktop/newhometest"

#From here down, it's all magic. 
all_subfolders = [x[0] for x in os.walk(directory_of_Files)]

#Get the full file name and only the files
filenames=[]
for subfolder in all_subfolders:
    os.chdir(subfolder)
    for file in filter(os.path.isfile, os.listdir(os.getcwd())):
        if not file.startswith("."):
            filenames.append(os.getcwd()+"/"+file)

#get the file endings
all_files_endings = []
for i in filenames:
    all_files_endings.append(i.split(".",1)[1])

#remove the duplications
all_files_endings = list(set(all_files_endings))

#create some folders in the new_directory with the file endings
for fileExtensions in all_files_endings:
    os.mkdir(new_parent_directory + "/" + fileExtensions)    

#move the files from their old destination to their new destination 
newnames=[]
for subfolder in all_subfolders:
    os.chdir(subfolder)
    for file in filter(os.path.isfile, os.listdir(os.getcwd())):
        if not file.startswith("."):
            newnames.append(new_parent_directory+"/"+file.split(".",1)[1]+"/"+file)
            print file 
if len(filenames) == len(newnames):
    for i in range(len(filenames)):
        shutil.move(filenames[i], newnames[i])

Eu testei isso no Mac OSX 10.11 com o python 2.7. Você também pode simplesmente copiar todo o código em um arquivo de texto, salvá-lo como "something.py" e, em seguida, executá-lo a partir do terminal com o código,

python something.py
    
por 21.07.2016 / 10:48