使用通配符文件夹批量复制某些文件

Batch copy certain files with wildcard folders

我的 bat 文件数量有限 skills/knowledge。基本上,我用它们来整理某些文件类型的文件夹或将文件备份到保管箱文件夹。

我现在想用它们在某个文件夹路径中查找文件并将其复制到镜像文件夹路径的本地驱动器...文件夹路径有 50 个文件夹和 1000 多个子文件夹。 网络位置的几个示例:
Reports\ASD01\ASD01_01 Reports\ASD01\ASD01_02 Reports\ASD01\ASD01_03 Reports\DVC05\DVC05_01 Reports\DVC05\DVC05_12 Reports\DVC05\DVC05_13 Reports\DVC06\DVC06_01

每个文件夹包含多个文件。我有兴趣将 pdf 和 CSV 从子文件夹复制到本地驱动器上的镜像文件夹。

我有一个 google 并且 XCOPY 无法复制文件夹作为通配符 Reports\*\*\*.pdf

我会 运行 bat 定期更新任何新文件。 我无法复制子文件夹的全部内容,因为它们太大了。

我希望我已经提供了足够的信息,并感谢对此的任何帮助!

假设您想在目的地重新创建文件夹结构,那么 Robocopy 就是您的选择。

 Robocopy "C:\Source\Reports"  "C:\Destination\Reports" *.pdf /S /DCopy:T /NP /MT:64 /R:2 /W:2 /B

以上将所有 PDF 文件从源复制到目标并将它们放在相同的子文件夹中。

您可以在 cmd 脚本中按原样使用上述内容,或将其粘贴到 CLI 中。

如果您不想要文件夹结构,那么 For 循环是您的好朋友。

但是,您必须根据要在 CLI 中还是在 CMD 脚本中使用它来稍微更改它

CLI

@For /F "Tokens=*" %A IN ('
  WHERE /R "C:\Source\Reports" /F "*.pdf"
') DO @(
  IF  NOT EXIST "C:\Destination\%~nxa" @(
    Copy /B /Y /F "%~fA" "C:\Destination\%~nxa"
  )  ELSE @(
     ECHO."C:\Destination\%~nxa" Already Exists, NOT Copying  "%~fA" due to conflict!
  )
)

CopyReplace.cmd

@(
  ECHO OFF
  SETLOCAL EnableDelayedExpansion
  SET "_Src=C:\Source\Reports"
  SET "_Dst=C:\Destination"
  SET "_FileGlob=*.pdf"
)

For /F "Tokens=*" %%A IN ('
  WHERE /R "%_Src%" /F "%_FileGlob%"
') DO (
  IF  NOT EXIST "%_Dst%\%%~nxa" (
    Copy /B /Y /F "%%~fA" "%_Dst%\%%~nxa"
  )  ELSE (
     ECHO."%_Dst%\%%~nxa" Already Exists, NOT Copying  "%%~fA" due to conflict!
  )
)