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

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

首先,我知道有很多类似的问题,我知道是因为我必须尝试改编至少 5 个,但我仍然在这里提问,因为我对 CMD 的掌握很差(实际上我以为我已经擅长了这一点),这让我对通用的、无用的错误感到沮丧,我无法理解语法的哪一部分是错误的。这可能是因为其他问题涉及各自 OP 的文件夹/文件名结构,当我尝试将代码改编为我自己的文件夹/文件结构时,它拒绝工作。因此,我在这里寻求一个for真正适用于我自己的文件和文件夹结构的 CMD 循环解决方案。

我有一个父文件夹,其中包含许多其他文件夹,其中包含文件:

Parent Folder
     Subfolder
           File1
           File2
     Subfolder
           File1
           File2
     Subfolder
           File1
           File2

...等等。

我想使用 CMDfor循环与move命令结合将子文件夹中的所有文件提取到父文件夹,并使每个子文件夹保持为空。

当给出 CMDfor循环时,请分解命令的每个部分正在做什么,因为这将有助于确保我理解代码,并希望最大限度地减少我自己让它工作的麻烦。

答案1

好的,我终于通过改编另一个问题的代码找到了答案。感谢@AFH 澄清了我对这个答案的评论中不确定的部分,以及他对此的总体帮助 - 非常感谢。


将子文件夹中的所有文件提取到其父文件夹

for /r "PARENTFOLDER" %d in (*.*) do move "%d" "PARENTFOLDER"

请记住将所有实例替换为PARENTFOLDER您要将文件提取到的文件夹的路径。


从子文件夹提取所有文件删除空子文件夹

您不太可能需要在从中提取文件后保留剩下的空子文件夹 - 我当然不需要 - 因此下面的命令也会自动删除它们。

for /r "PARENTFOLDER" %d in (*.*) do move "%d" "PARENTFOLDER" && cd "PARENTFOLDER" && for /f "delims=" %d in ('dir /s /b /ad ^| sort /r') do rd "%d"

再次将所有实例替换为PARENTFOLDER您要将文件提取到的文件夹的路径。

然而,此时,它不再是一行代码,粘贴到命令行时会变得有点复杂,因此将整个内容放入批处理文件中会更容易。使用父文件夹路径的变量允许您仅替换文件开头的一个实例PARENTFOLDER,这也是更安全的选择,可防止意外删除您可能想要保留的空文件夹。


批处理文件

粘贴到文本文件中,将其替换PARENTFOLDER为您要使用的文件夹的路径,然后使用扩展名保存.bat。在任何目录中运行。

@ECHO OFF
SETLOCAL
SET parent="PARENTFOLDER"
CD /d %parent% 
FOR /r %parent% %%d IN (*.*) DO MOVE "%%d" %parent% 
FOR /f "delims=" %%d IN ('DIR /a:d /s /b ^| SORT /r') DO RD "%%d"
ECHO Done. Press any key to terminate script.
PAUSE >NUL

相关内容