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

Posted

技术标签:

【中文标题】使用通配符文件夹批量复制某些文件【英文标题】:Batch copy certain files with wildcard folders 【发布时间】:2019-12-05 07:18:49 【问题描述】:

我对 bat 文件的技能/知识有限。基本上,我使用它们来整理某些文件类型的文件夹或将文件备份到保管箱文件夹。

我现在想使用它们在某个文件夹路径中查找文件并将其复制到镜像文件夹路径的本地驱动器...文件夹路径有 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 从子文件夹复制到本地驱动器上的镜像文件夹。

我有一个谷歌和 XCOPY 不能复制文件夹作为通配符 Reports\*\*\*.pdf

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

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

【问题讨论】:

您是否要求将在reports 下找到的所有 .pdf 和 .csv 文件复制到您指定的目录中? 我想要复制所有包含 PDF 和 CSV 的文件夹。目录也被镜像。 【参考方案1】:

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

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

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

您可以在 cmd 脚本中使用上述 As-Is,或将其粘贴到 CLI 中。

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

但是你必须稍微改变它,这取决于你是想在 CLI 还是在 CMD 脚本中使用它

命令行

@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!
  )
)

复制替换.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!
  )
)

【讨论】:

我明天可以试一试,然后告诉你! 这行得通。谢谢。有没有办法在没有 以管理员身份运行 权限的情况下运行它?我认为我的一些同事没有管理员权限。 只要源和目标不需要管理员权限,您应该能够在 rhem 之间读取和复制

以上是关于使用通配符文件夹批量复制某些文件的主要内容,如果未能解决你的问题,请参考以下文章

linux下使用通配符批量删除文件

windows批处理问题,如何批量删除某几个子文件夹下面,文件名包含特定字符串的所有文件?

使用目录上的通配符从文件夹复制内容

sh 使用通配符复制文件

如何在类路径中使用通配符来添加多个 jar? [复制]

将通配符文件名从主包复制到文档?