如何将具有特定文件扩展名的文件从父文件夹及其子文件夹移动到新文件夹

如何将具有特定文件扩展名的文件从父文件夹及其子文件夹移动到新文件夹

我想要移动所有带有以下扩展名的文件:.JPEG .MP3 .MP4 .MOV .AVI .PDF .PSD .WAV .TXT

...到以其中包含的文件扩展名命名的新父文件夹。目前,我在这么多子文件夹中(在一个父文件夹下)有太多文件,无法手动执行此操作。我尝试使用 * 搜索父文件夹,然后按文件类型排序,但文件太多,我的系统要么冻结,要么无法使用/缓慢。请假设我对脚本/批处理文件一无所知,但我可以按照说明进行复制和粘贴;)请提供建议。

答案1

(编辑和评论后)此脚本应该可以执行此操作,包括子文件夹:

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

如果您以前从未使用过批处理脚本,其工作原理如下:

  1. 打开记事本(不是MS Word 或写字板)
  2. 复制/粘贴脚本
  3. 文件 -> 另存为
  4. 在“类型”下拉菜单中,选择“所有类型”
  5. 将文件另存为something.bat(您可以更改,something.bat需要保留)
  6. 将文件放在与需要处理的文件相同的目录中
  7. 双击文件

确保在实际使用前对其进行测试。最后pause不需要,它只会提示您在关闭窗口之前按下一个键。

答案2

好的,我修复了代码。您需要做两件事。首先,您应该有一个“directory_of_Files”,其中包含所有文件和带有文件的子文件夹。接下来,您应该有一个新的父文件夹“new_parent_directory”,它是空的。new_parent_directory 将按“directory_of_Files”内文件的文件结尾进行组织。本质上,此脚本会查找目录中的所有文件以及该目录中的目录,然后创建文件结尾列表,然后根据这些文件结尾在新目录中创建目录,然后获取父目录中的所有文件并将它们移动到新建立的目录中。

如果您已经安装了python.....

在终端中输入

python

然后,

import os

然后,

#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])

我在 Mac OSX 10.11 上用 Python 2.7 测试了此代码。您也可以将所有代码复制到文本文件中,将其保存为“something.py”,然后使用代码从终端运行它,

python something.py

相关内容