首先,我知道有很多类似的问题,我知道是因为我必须尝试改编至少 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