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

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

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

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

【问题讨论】:

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

标签: windows file-io cmd directory subdirectory


【解决方案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.
            猜你喜欢
            • 1970-01-01
            • 2017-05-27
            • 1970-01-01
            • 2018-01-30
            • 1970-01-01
            • 2019-11-03
            • 2016-05-25
            • 2010-09-06
            • 2013-09-20
            相关资源
            最近更新 更多