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

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

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

Folder1
   File1
   Folder2
      File2
   Folder3
      File3
      Folder4
         File4

我想要执行一些命令,其结果是:

Folder1
   File1
   File2
   File3
   File4

或类似的东西。我对 Windows 不太熟悉,因此希望答案尽可能详细。

答案1

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

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

答案2

当我需要展平大型层次结构(在我的情况下是 png)时,我最终使用了这个 powershell 方法:

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

答案3

Windows 可执行文件: 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

或使用目录作品

或者电源外壳

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

或者(正如刚才提到的)

或者如上所述的手动搜索、剪切和粘贴

方法有很多,您可以根据自己的技能和倾向选择其中任何一种,并根据您的需要进行改进。

你可能需要这个删除空目录经过上述操作

答案4

对于那些不太懂技术的人来说,命令行选项相当简单。

  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 个音乐文件的文件夹扁平化。效果很好。

您可以在以下位置找到 FOR 命令行实用程序的选项https://technet.microsoft.com/en-us/library/bb490909.aspx

相关内容