假设所有文件名都不相同,如何在Windows 7中展平文件夹?


19

例如,假设我具有以下文件夹层次结构:

Folder1
   File1
   Folder2
      File2
   Folder3
      File3
      Folder4
         File4

我想执行一些导致以下结果的命令:

Folder1
   File1
   File2
   File3
   File4

或类似的东西。我对Windows不太熟悉,所以我希望在回答中尽可能多地了解细节。


您是否正在寻找现有的程序来为您执行此操作,或者正在寻找执行此操作的一段代码(哪种编程语言)?
马特·鲍尔

@MattBall:我正在寻找最简单的方法。理想情况下,这将是打开终端并输入一些命令。同样,我对Windows不太熟悉,所以请告诉我是否有更好的方法。谢谢。

Answers:


32

绝对最简单的方法是进入公用根文件夹并搜索所有文件(即搜索*)。找到所有文件后,标记所有文件,然后按Ctrl + X并再次导航到公用根文件夹。现在按Ctrl + V将所有文件粘贴到根文件夹中。完成后,删除所有子目录。

我不知道这是否可以作为批处理工作来完成。


1
我喜欢这种方式的简单性,但是我尝试使用40k文件进行操作,这使资源管理器进程崩溃。
UpTheCreek 2013年

总指挥官的回答对我来说似乎更容易。
Ev0oD

13

最后,当我需要展平大型分层结构(在我的情况下为png)时,我使用了这种powershell方法:

Get-ChildItem C:\sourcefolder -Recurse -Filter "*.png" | Copy-Item -destination C:\destinationfolder\

对于扁平化,也许Move-Item更适合吗?
geisterfurz007

4

Windows exe:http//en.sourceforge.jp/projects/sfnet_flatfolder/

或AHK:

fileselectfolder,MyFold,::{20d04fe0-3aea-1069-a2d8-08002b30309d}
SetWorkingDir, %MyFold%
loop, *.*,0,1
{
  parentpath := RegExReplace(A_LoopFileDir,"\\","-")
  ;StringReplace, parentpath, A_LoopFileDir, \,-,All
  newname = %parentpath%-%A_LoopFileName%
  ;msgbox %newname%
  If a_loopfiledir <>
    filemove, %a_loopfilefullpath%,%newname%
}

loop, %myfold%\*.*,2,1
  fileremovedir, %a_loopfilefullpath%,1

exitapp

或使用目录作品

Powershell

(ls -r -include *.jpg) | % { mv -literal $_ $_.Name.Insert(0, [String]::Format("{0} - ", $_.Directory.Name))}

批处理(如上所述)

或如上所述手动搜索,剪切和粘贴

有很多方法,根据您的技能和爱好,您可以选择其中任何一种,并根据需要进行细化。

完成上述操作后,您可能需要此“ 删除空目录


1
PowerShell命令是短期和良好的工作
马克西姆叶夫列莫夫

3

如果您只需要不时手动平整dir,Total Commander是完美的选择。

在Total Commander中:转到您要展平的目录。在菜单中,单击命令>分支视图。您会看到所有内容都变平了,可以将其移动/复制到另一个文件夹。

如果您需要修改文件名:在展平视图中选择所有文件,在菜单中转到文件>多重重命名工具。在这里,您可以使用“重命名掩码”从路径到实际文件名添加一些信息,您只需要在此处使用插件标签/按钮,搜索和替换功能以及小傻瓜按钮,即可在其中对文件名进行最后编辑文本编辑器。听起来可能很复杂,但实际上是IMO最简单的方法:)


什么是Windows Commander?你是说总指挥官吗?
UpTheCreek 2013年

正是:)使用了10年,当时的名称是Windows Commander。编辑删除
teejay 2013年

谢谢。刚刚尝试过。虽然不能用于40k小文件:((在10分钟内消耗了大量CPU,然后反复出现“无法创建文件”错误。)
UpTheCreek 2013年

不幸的是,CPU使用率和隐含的速度缓慢是可以理解的,但可以理解:)该错误还有其他原因。可能是命名错误,总指挥官错误或TC无法处理这么多文件。我会先重命名较小数量的文件,或者使用TC的较新版本
teejay 2013年

@teejay,我不得不仔细研究您的建议,但最终我成功了。我使用了expander2插件来提取路径的各个部分,并使它们成为文件名的前缀。您可能想为下一个家伙添加一些细节。Tx。
killogre

3

对于那些不太喜欢技术的人,可以使用命令行选项非常简单。

  1. 在“ flatten.cmd”处创建一个文件
  2. 在记事本中打开该文件
  3. 在文件中,放置以下内容:

    FOR /R {SourcePath} %%G IN (*.mp3) DO move "%%G" {Destination}
    
  4. 将“ {SourcePath}”替换为要展平的文件夹。在您的情况下,“ c:\ Folder1”

  5. 将“ {Destination”}替换为要将文件移动到的文件夹。您的情况也为“ c:\ Folder1”。现在,代码应如下所示:

    FOR /R c:\Folder1 %%G IN (*.mp3) DO move "%%G" c:\Folder1
    
  6. 打开命令行窗口。可以通过多种方式做到这一点,但这很快:

    • 点击开始按钮
    • 单击所有程序
    • 点击配件
    • 单击命令提示符
  7. 在命令行窗口中,键入:

    cd {folder where you put the flatten.cmd file}
    flatten
    

这样做就可以了(Windows 8+),我只是这样做是为了平铺10,000个音乐文件的文件夹。奇迹般有效。

您可以在https://technet.microsoft.com/zh-cn/library/bb490909.aspx中找到FOR命令行实用程序的选项。


1

使用批处理脚本(不在我的头上):

查找FOR命令

第一行将所有文件从子目录上移到根目录。第二行删除子文件夹

for /f %f in ('dir "c:\folder\*" /s/b/a-d') do if not %~ff"=="c:\folder" move "%f" "c:\folder"
for /f %f in ('dir "c:\folder\*" /s/b/ad') do if not "%~ff"=="c:\folder" rd /s/q "%f" 

所以我必须打开一个终端并输入这些命令,以确保我用适​​当的路径替换“文件夹”?谢谢。

如果您不想用脚本编写它,则可以。OTOH .....
Preet Sangha

可以将其概括并附加到上下文菜单操作中吗?我希望能够右键单击一个文件,单击“平面文件”,然后将其中的所有文件上移到文件夹级别。之后删除文件夹也很好。
MAW74656

是的,它可以将其放入带有%1作为文件夹名称的批处理文件中。stackoverflow.com/questions/6162415/...
普里特僧伽

也许

1

嗨,您还可以使用xxcopy(www.xxcopy.com)工具,将其xcopy放在steriods(排序)上。使用此工具,您可以将文件夹中的文件“展平”到一个文件夹中。

c:> xxcopy / source-folders / flatten / SG

只需阅读以下链接:http : //www.xxcopy.com/xxcopy16.htm

干杯。

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.