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


0

我想移动所有带扩展名的文件,例如: .JPEG .MP3 .MP4 .MOV .AVI .PDF .PSD .WAV 。文本

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


你可以用 find 因为你已经标记了这个Q,但更好的想法是使用 tar,它有开关支持这个。经典调用(在源代码树的顶部) tar cf - | (cd target;tar xf -) 它复制了整棵树。你想看看 man 你的页面 tar 了解如何仅选择所需的文件。
MAP

糟糕,这是一个错字 tar 命令,应该是 tar cf - . | (cd target;tar xf -) (必须告诉它要注意的事情。
MAP

1
你用的是什么操作系统?
Jonatan Öström

请注意 超级用户 不是脚本编写服务。如果你告诉我们你到目前为止所尝试的内容(包括你正在使用的任何脚本)以及你被困在哪里,那么我们可以尝试帮助解决具体问题。你也应该阅读 我怎么问一个好问题?
DavidPostill

Answers:


0

(编辑和评论后)这个脚本应该这样做,包括子文件夹:

@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 最后在不需要的时候,它会提示你在关闭窗口之前按一个键。


这几乎可以正常工作,因为它创建具有文件扩展名的文件夹,但只将具有相应扩展名的文件移动到与新创建的文件夹相同的文件夹中.bat文件。它不会移动子目录中的文件或文件夹中的文件。我必须将.bat文件复制并粘贴到每个子文件夹(超过500)以按扩展名对所有文件进行排序,在每个子文件夹中留下多个JPEG .MP3等文件夹。有没有办法从包含文件的所有500多个文件夹所在的一个文件夹执行?
Nevermind Susan

编辑批处理脚本,应该包含子文件夹。对不起,我在你的问题'^^中没有看到这一点
Nathan.Eilisha Shiraini

仍然不包括子文件夹的内容。也许这是我做错了。在我昨晚睡觉之前,我在根文件夹(星号周期星号)中搜索以提取所有文件(280,000个文件),一旦完成,使用您创建的批处理文件将它们分类到文件中但不成功;批处理文件执行显示重复的0个文件移动访问被拒绝。我以管理员身份登录。并使用open作为管理员。以及打开批处理文件时。有任何想法吗?感谢您的帮助。
Nevermind Susan

0

好的,我修复了我的代码。你需要做两件事。首先,您应该有一个“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

“我没有测试过这个,”请不要发布未经测试的代码......
DavidPostill

我不知道Python可以用在Windows操作系统上。我已经下载了它,但不知道如何实现您的响应。
Nevermind Susan

谢谢大卫,我不知道规则。是的,Susan,python只是另一个脚本语言。没什么特别的。也许它比其他语言更好一点,因为它更具人性化。我提供的脚本将移动,而不是重命名所有文件。如果你只想重命名,那么你在原来的位置有原始备份,然后将最后一行更改为os.rename而不是shutil.move
dcook

库克,我没有在这台计算机上的Windows 7上运行OSX或Linux。我在另一台桌面上安装了LinuxMint / WindowsXP,但这台笔记本电脑上只有Windows7。 Python可供下载用于windows7,我已下载并打开应用程序并打开cmd框(我猜相当于终端)所以我输入了python并按下了enter并收到:“NameError:name'python'未定义'
Nevermind Susan

有没有办法将屏幕截图附加到我的评论?第一次使用超级用户
Nevermind Susan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.