我想要移动所有带有以下扩展名的文件:.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
如果您以前从未使用过批处理脚本,其工作原理如下:
- 打开记事本(不是MS Word 或写字板)
- 复制/粘贴脚本
- 文件 -> 另存为
- 在“类型”下拉菜单中,选择“所有类型”
- 将文件另存为
something.bat
(您可以更改,something
但.bat
需要保留) - 将文件放在与需要处理的文件相同的目录中
- 双击文件
确保在实际使用前对其进行测试。最后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