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

问题描述 投票:17回答:9

文件夹c:\folder1包含subfolder1subfolder2等。

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

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

windows file-io cmd directory subdirectory
9个回答
21
投票

这对我有用:

for /r "c:\source_directory\" %%x in (*.pdf) do move "%%x" "c:\target_directory\"

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

希望能帮助到你。


6
投票

外部for循环列出工作目录中的子目录,内部for循环列出要移动到目标路径的子目录:

for /d %f in (*.*) do for /d %e in (%f\*.*) do move "%e" DestinationPath

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

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

for /d %f in (*.*) do for /d %e in (%f\*.*) do echo move "%e" DestinationPath

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


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)。遇到通配符时,命令提示符不会递归操作。


4
投票

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

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

3
投票

我知道这是高级的,但万一它可以帮助任何人。

用于搜索.MKV文件的所有子文件夹,并将它们移动到批处理文件所在的当前目录。

FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.mkv) DO (
            move "%%X" "%CD%"
        )
    popd
)

2
投票

Robocopy为我创造了奇迹:

 robocopy c:\cache c:\cache-2012 ?????-2012*.hash /S /MOV

我用它来移动c:\cache及其众多子目录中带有特定掩码的所有文件。


2
投票
@echo on

for /r "F:\All_drawings\newdrg\" %%x in (*.tiff) do move "%%x" "F:\Alldrawings"

pause

{将所有文件从newdrg文件夹及其“子文件夹”移动到目标文件夹Alldrawings,此命令用于命令行的批处理文件操作,在两个地方使用单个“%”}。


1
投票

只是在黑暗中采取狂野的刺,但如果我记得正确DOS可以处理globs和相当于mvMOVE,所以:

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


1
投票
MOVE "C:\FOLDER 1\PDF FILES\*.pdf" "C:\FOLDER 1"
MOVE "C:\FOLDER 1\DB FILES\*.db" "C:\FOLDER 1"

在move命令之后,您将拥有源文件夹,后跟文件将移动到的目标位置。每个文件扩展名前面的*是一个通配符函数,它将选择该目录中存在的所有指定文件类型。

此外,如果您愿意,可以使用这些命令创建.bat文件。为此,请将命令粘贴到记事本中,并将其另存为.bat而不是.txt

然后,您可以双击该文件,它将在每次执行时执行文件中的命令。如果您有任何需要这样的重复性任务,这将非常有用。

© www.soinside.com 2019 - 2024. All rights reserved.