将多个子文件夹中的所有文件移动到父文件夹中

Sea*_*ean 15 windows batch-file cmd.exe

我通常会打开父文件夹并搜索*以选择子文件夹中的所有文件,但在这种情况下,我需要整理超过 1,000,000 个文件,因此我的资源管理器在尝试复制这么多文件时经常崩溃通过图形用户界面。我不确定通过命令提示符或批处理文件这样做会更有效,但我想值得一试。

我需要做的是让它这样

|parent
|    |123
|    |    123abc.png
|    |456
|    |    456def.png
|    |789
|    |    789ghi.png
Run Code Online (Sandbox Code Playgroud)

变成

|parent
|    123abc.png
|    456def.png
|    789ghi.png
Run Code Online (Sandbox Code Playgroud)

是的,我的实际文件结构具有指定给文件夹名称的文件名的前 3 个字符,如果这有助于对它们进行排序的话。

mis*_*256 24

在命令提示符下使用FOR /R

[FOR /R] 从 [drive:]path 开始沿着文件夹树向下走,并对每个匹配的文件执行 DO 语句。

首先在要从中移动文件的父文件夹之外创建一个暂存文件夹。这将避免可能的循环引用。

在你的情况下,命令看起来像这样:

FOR /R "C:\Source Folder" %i IN (*.png) DO MOVE "%i" "C:\Staging Folder"
Run Code Online (Sandbox Code Playgroud)

如果要将其放入批处理文件中,请更改%i%%i.

注意双引号很重要,不要错过任何一个。它们确保正确处理任何包含空格的文件名。

移动完成后,您可以根据需要重命名/移动暂存文件夹。

提示:如果您有硬盘驱动器空间可以刻录并且手头有时间,您可能希望安全播放并复制文件而不是移动它们,以防万一出现问题。只需在上面的命令中更改MOVECOPY


小智 6

forfiles /s /m *.FILETYPE /c "cmd /c move @file .."应该将指定 FILETYPE 的任何文件移动到其父文件夹中

  • 但这会将所有内容(包括文件夹)从运行位置上移一级。您不妨使用资源管理器选择当前文件夹中的所有内容,然后将鼠标全部拖动到一个文件夹中 (2认同)

小智 5

这是一些示例代码:

:loop
    for /d %%D in (%1\*) do (move "%%D\*" %1\ && rmdir "%%D")
    SHIFT
    set PARAMS=%1
if not %PARAMS%!==! goto loop
Run Code Online (Sandbox Code Playgroud)

在此版本中,您将要从中删除子文件夹的文件夹拖到批处理中,它会将所有文件从子文件夹移动到父文件夹中。我用它来下载随机有或没有子文件夹的档案文件。请注意,它是在考虑到单个子文件夹的情况下制作的,具体针对我的情况。

当您在脚本上一次拖动多个子文件夹时,“Shift”是移动到下一个参数。