如何使用CMD将具有特定扩展名的所有文件从所有子目录移动到其父目录?

mih*_*hai 17 windows directory file-io cmd subdirectory

文件夹c:\folder1包含subfolder1,subfolder2等等.

这些子目录包含.pdf.db文件.

如何使用Windows命令解释器.pdf将所有文件移动到c:\folder1

小智 21

这对我有用:

for /r "c:\source_directory\" %%x in (*.pdf) do move "%%x" "c:\target_directory\"
Run Code Online (Sandbox Code Playgroud)

此命令将使用Windows 7中的cmd递归地复制al pdf文件从源目录到目标目录 - 经过测试和工作.

希望能帮助到你.

  • %x就足够了,%% x用于批处理文件 (5认同)

小智 6

对于OP来说已经晚了两年,但由于这是我试图解决的问题,我认为我会为后人发布解决方案.外部for循环列出工作目录中的子目录,内部for循环列出要移动到目标路径的子目录.

for /d %f in (*.*) do for /d %e in (%f\*.*) do move "%e" DestinationPath
Run Code Online (Sandbox Code Playgroud)

如果DestinationPath不是工作目录的子文件夹,这将最有效,因为它将尝试将DestinationPath移动到自身.

要在批量运行之前确认命令,请开始只回显最终的移动命令,如下所示:

for /d %f in (*.*) do for /d %e in (%f\*.*) do echo move "%e" DestinationPath
Run Code Online (Sandbox Code Playgroud)

并复制/粘贴其中一个结果以运行它并确认它按预期方式工作.然后移除回声并开始移动.


Wil*_*ard 6

在 Windows 资源管理器(GUI,而不是命令提示符)中还有另一种方法可以做到这一点:

  • 导航到顶级目录
  • 在右上角的搜索框中,输入 *.pdf 并点击搜索
  • 选择所有文件并将它们拖到顶级文件夹
  • 响应有关覆盖文件的任何提示


Eag*_*ird 5

我不认为有一个通配符可以用于子文件夹,所以你想使用循环遍历每个子文件夹并移动*.pdf;

FOR /R [your root folder path] %%G IN (*.pdf) DO move %%G [new path]

DO之后的命令本身就在它自己的引号中.如果您预计源或目标中的空格,请使用双引号将其封装,例如:

FOR /R "source folder with spaces" %%G IN (*.pdf) DO move "%%G" "dest path with spaces"

注意%% G周围的引号,这些是移动命令解析路径所必需的.

**编辑:响应接受的答案,分别在Windows XP和Windows 7上的命令提示符:

命令提示

这表明通配符在路径中不起作用,仅适用于单个目录中的文件(例如C:\ folder*.files).遇到通配符时,命令提示符不会递归操作.

  • 谢谢Eaglebird,我尝试了你的解决方案,我得到了"%% G此时出乎意料".我会上传截图但我不知道该怎么做. (2认同)

小智 2

只是在黑暗中进行了一次疯狂的尝试,但如果我没记错的话,DOS 可以处理 glob 以及相当于mvis的东西MOVE,所以:

MOVE C:\FOLDER1\*\*.PDF C:\FOLDER1\