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

Posted

技术标签:

【中文标题】如何使用 CMD 将所有具有特定扩展名的文件从所有子目录移动到其父目录?【英文标题】:How to move all files with specific extension from all subdirectories to their parent using CMD? 【发布时间】:2011-05-20 10:11:36 【问题描述】:

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

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

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

【问题讨论】:

您是否希望使用任何特定的编程语言来做到这一点? 对不起,我应该提到这一点。在 MS-DOS 中使用 CMD。 【参考方案1】:

这对我有用:

.bat / .cmd 文件中:

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

对于直接输入到命令提示符窗口(不是 PowerShell):

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

此命令将递归地将所有*.pdf 文件从源(及其所有子目录)复制到目标目录。

要排除子目录中的文件,请省略/r 开关。

希望对你有帮助。

【讨论】:

%x 就够了,%%x 用于批处理文件 我认为for /r "b:\" %x in (*.mp3) do copy "%x" "c:\temp\cdrw" 有效,但不知道它是否处理子文件夹。 有没有办法自动覆盖/保留所有重复的命名文件,而不是需要回复每个“是/否/全部”对话框 @Thunder_Ruler 回答 a(表示“全部”)将覆盖所有,但我不知道覆盖所有选项。【参考方案2】:

将所有文本文件复制到一个文件夹并保留目录结构:

xcopy *.txt /s D:文件夹

【讨论】:

【参考方案3】:

c:/folder1位置打开CMD

运行以下命令:

mv ./subfolder1/*.pdf .
mv ./subfolder2/*.pdf .

./subfolder1/*.pdf 选择 ./subfolder1/ 中的所有 (*) pdf 文件

mv 命令将它们全部移动到相对路径.,即当前目录c:/folder1

您还可以输入完整或绝对路径来代替相对路径(如./subfolder1/./subfolder2/.),如c:/folder1/subfolder1/c:/folder1/subfolder2/c:/folder1/

【讨论】:

【参考方案4】:

外部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】:

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

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

【讨论】:

少量文件的好主意。我正在尝试使用 100,000 个文件,但这种方法确实会冻结。 这对大约 10 个目录中的几百个文件非常有效。我认为这在您有很多位置时特别有用,即使文件数量很少。【参考方案6】:
@echo on

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

pause

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

【讨论】:

【参考方案7】:

我知道这是***的,但以防万一它对任何人都有帮助。

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

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

【讨论】:

【参考方案8】:

Robocopy 为我创造了奇迹:

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

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

【讨论】:

你说“移动所有文件”但你提到了copy 对吗? /MOV复制后删除源【参考方案9】:

我认为没有通配符可用于子文件夹,因此您想使用循环遍历每个子文件夹并移动 *.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)。命令提示符遇到通配符时不会递归操作。

【讨论】:

顺便说一句,这将遍历所有子文件夹,而不仅仅是第一个分支。 来自 WinXP 和 Win7 的提示:(发错帖,忽略) 你是对的,发帖人想要一个我误读的递归解决方案。 谢谢 Eaglebird,我尝试了您的解决方案,我得到“%%G 在这个时候是意外的”。我会上传一个屏幕截图,但我不知道该怎么做。 试图上传问题中的图片,但该控件似乎在 IE 7.0 中不起作用【参考方案10】:
MOVE "C:\FOLDER 1\PDF FILES\*.pdf" "C:\FOLDER 1"
MOVE "C:\FOLDER 1\DB FILES\*.db" "C:\FOLDER 1"

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

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

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

【讨论】:

【参考方案11】:

这里只是在黑暗中冒险,但如果我没记错的话,DOS 可以处理 glob,mv 的等价物是 MOVE,所以:

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

【讨论】:

我尝试了copy B:\*\*.* C:\temp\cdrw\ 并得到了这个错误:The filename, directory name, or volume label syntax is incorrect.

以上是关于如何使用 CMD 将所有具有特定扩展名的文件从所有子目录移动到其父目录?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除具有特定扩展名的所有文件

如何在Python中的目录中查找具有特定文件扩展名的所有文件

如何删除Google驱动器中具有特定扩展名的所有文件

循环遍历具有特定扩展名的所有文件

如何在 Visual Studio Code 中列出/搜索特定类型的所有文件

powershell 递归删除具有特定扩展名的所有文件