【问题标题】:Batch script copy folder using wildcard使用通配符的批处理脚本复制文件夹
【发布时间】:2015-07-15 21:52:52
【问题描述】:

我需要复制一个与通配符匹配的文件夹,例如 FOLDER_*。该文件夹将存在其他文件,因此我需要该命令将其与其他所有文件隔离开来。此外,该命令需要递归搜索目录,并仅返回与通配符匹配的 FOLDER,其内容保持不变。然后它需要将其复制到另一个文件夹。有任何想法吗?我已经尝试了很多变体 - 这是我尝试的最后一件事。

for /D /R %%f in (FOLDER_*) do xcopy %%f %~dp0\TestResults

【问题讨论】:

  • 您的代码应该可以工作(在这里可以工作),那么问题到底出在哪里?它是否找到两个 FOLDER_* 项目?
  • 为什么不使用分配给变量的DIR /ad /b 来进行复制?也可以使用DIR /ad /b /s进行递归搜索。
  • 我上面的代码最终会复制文件夹的内容,但不会将它们保存在各自的文件夹中。 user4317867,你能详细说明你的建议吗?如果是这样,我会试一试。
  • 这段代码似乎复制了文件夹结构,而不是文件内容。
  • for /D /R %%f in (FOLD_*) do xcopy /t /e /a /s %%f\.. %~dp0\TestResults

标签: batch-file recursion wildcard xcopy


【解决方案1】:

下一个代码 sn-p 应该复制所有找到的 FOLDER_* 文件夹,包括它们的子文件夹,但忽略它们的所有父文件夹,例如 upfolder\FOLDER_* 中的 upfolder\(当然可以改进以包含它)。for /F 循环针对 dir /b /s /ad(子文件夹的静态列表)而不是 for /D /R,因为选项 /d /r 未记录。
注意递归,如FOLDER_main\FOLDER_sub1\FOLDER_sub11 等。
可操作的mkdirxcopy 命令只是echoed,仅用于调试目的:

@echo OFF
for /F "delims=" %%f in ('dir /B /S /AD FOLDER_*') do (
  echo mkdir "%~dp0\TestResults\%%~nxf" 2>NUL
  echo xcopy /S /E /C "%%~ff" "%~dp0\TestResults\%%~nxf\"
)

例如,考虑向xcopy 添加更多开关

  • /H 也复制隐藏文件和系统文件。
  • /R 覆盖只读文件。
  • /Y 禁止提示您确认是否要覆盖现有目标文件。

【讨论】:

    猜你喜欢
    • 2018-02-18
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    相关资源
    最近更新 更多