返回

如何在 Windows 中递归复制目录结构,只包含特定文件?

windows

递归复制目录结构:只包含特定文件

问题

我们经常需要复制目录结构,但只复制某些特定文件。例如,我们可能需要复制包含所有 .pdf 文件的目录结构。手动查找和复制这些文件既耗时又容易出错。

解决方案

使用 Windows 批处理文件可以轻松解决此问题。批处理文件是一种脚本文件,可以自动化任务和执行复杂命令。

批处理文件

@echo off
setlocal enabledelayedexpansion

set "sourceFolder=folder1"
set "targetFolder=copy_of_folder1"
set "includeFiles=.pdf"

if not exist "%targetFolder%" mkdir "%targetFolder%"

for /r "%sourceFolder%" %%i in (*.*) do (
  set "filename=%%~nxi"
  if "!filename!" in (%includeFiles%) (
    xcopy "%%i" "%targetFolder%\%%~fxi" /y /i
  )
)

批处理文件解释

  • 设置变量

    • sourceFolder:源文件夹的路径。
    • targetFolder:目标文件夹的路径。
    • includeFiles:要复制的文件的扩展名(用逗号分隔)。
  • 创建目标文件夹 :如果目标文件夹不存在,则创建它。

  • 遍历源文件夹 :使用 FOR 循环递归遍历源文件夹及其子文件夹。

  • 复制文件 :对于每个文件,检查其扩展名是否与 includeFiles 中的扩展名匹配。如果匹配,则使用 xcopy 命令将文件复制到目标文件夹。

  • 覆盖选项/y 选项告诉 xcopy 在覆盖现有文件时不要提示用户确认。

  • 时间戳选项/i 选项告诉 xcopy 在复制文件时保持文件的时间戳。

使用说明

  1. 将批处理文件保存为 .bat 文件。
  2. 编辑文件,设置 sourceFoldertargetFolderincludeFiles 变量。
  3. 双击文件运行脚本。

常见问题解答

  1. 我可以只复制特定类型的文件吗?

    • 是的,只需编辑 includeFiles 变量,使其包含你要复制的文件的扩展名。
  2. 我可以递归复制所有子文件夹吗?

    • 是的,批处理文件使用 /r 选项递归遍历源文件夹。
  3. 我可以指定目标文件夹的路径吗?

    • 是的,编辑 targetFolder 变量以设置目标文件夹的路径。
  4. 我可以在不覆盖现有文件的情况下复制文件吗?

    • 是的,删除 /y 选项。
  5. 如何复制所有文件,而不考虑文件类型?

    • includeFiles 变量留空即可复制所有文件。

结论

使用 Windows 批处理文件可以轻松地递归复制目录结构,只包含特定文件。这种方法既快速又准确,可以节省大量时间和精力。