【问题标题】:How to replicate a directory structure using xcopy in windows如何在 Windows 中使用 xcopy 复制目录结构
【发布时间】:2013-06-01 20:34:40
【问题描述】:

我有一个包含文件夹列表的文本文件。我的文本文件如下所示:

"D:\old\FOLDER1" "D:\旧\FOLDER2" "D:\old\FOLDER3" "D:\旧\FOLDER4" "D:\旧\FOLDER5"

所有这些文件夹下都有子文件夹和文件

我想要做的是使用 xcopy 复制 FOLDER1, FOLDER2 , FOLDER3 FOLDER4FOLDER5 复制文件夹,复制这些文件夹的结构 所以在输出中,我想得到 ​​p> D:\output\bkup\FOLDER1\............包括所有子文件夹和文件 D:\output\bkup\FOLDER2\............包括所有子文件夹和文件 D:\output\bkup\FOLDER3\.......... 包括所有子文件夹和文件 D:\output\bkup\FOLDER4\............包括所有子文件夹和文件 D:\output\bkup\FOLDER5\............ 包括所有子文件夹和文件

我写了下面的脚本,它适用于一个文件夹

set sourceFolder="D:\old\FOLDER5"
set destinationFolder=%sourceFolder:~7,-1%
echo %destinationFolder%
xcopy /s /e /i /h /r /y %sourceFolder%  "D:\output\bkup%destinationFolder%"

但是由于要复制的目录数是 100+,我喜欢使用 for 循环或将要复制的目录列表传递到文本文件中,这就是我不知道如何处理它的原因。

请帮帮我,我不是批处理文件编写专家。

【问题讨论】:

  • @rene 感谢您的宝贵时间,我收到一个错误“docopy”不被识别为内部或外部命令,
  • 进行了编辑并添加了对文本文件 "My File With Source Folders.txt"xcopy 的支持。
  • @user2434611 通过添加冒号修复了我的答案中的错误
  • @rene 非常感谢您帮助我,您的代码非常适合我的需要
  • @rene 在实践中,我的目录名很长,文本文件中的每一行都是这样的 "F:\SCRIPTS\00\48\64\06\BAT140_PLM_PRIM_Feature line Proposals table - edit" 所以之后进程生成的sourceFolder是; “BAT140_PLM_PRIM_Feature”而不是“BAT140_PLM_PRIM_Feature line Proposals table - edit”,部分路径被切断,任何想法

标签: windows batch-file scripting xcopy


【解决方案1】:

您可以使用 for /f 逐行读取(如果需要,解析)文本文件。使用 "delims=" 来读取整个行。不要忘记添加引号以防止有多个参数并在子过程中去除引号

for /f "delims=" %%a in (yourtextfile.txt) do call :docopy "%%a"
goto :eof

:docopy
set sourceFolder=%~1
set destinationFolder=%sourceFolder:~7,-1%
echo %destinationFolder%
xcopy /s /e /i /h /r /y %sourceFolder%  "D:\output\bkup%destinationFolder%" 
goto :eof

【讨论】:

    【解决方案2】:

    试试robocopy,它更能满足您的需求,适用于 XP Prof. 或更新版本:

    set "sourceFolder=D:\old\FOLDER5"
    set "destinationFolder=%sourceFolder:~7,-1%"
    robocopy "%sourceFolder%" "%destinationFolder%" /MIR
    

    这会在“%destinationFolder%”产生一个完整的 MIRror。

    如果您想从带有xcopy 的文本文件中复制文件夹,请使用以下代码:

    set "sourceFolder=D:\old\FOLDER5"
    set "destinationFolder=%sourceFolder:~7,-1%"
    for /f "usebackqdelims=" %%i in ("My File With Source Folders.txt") do xcopy /seihry "%%i" "D:\output\bkup%destinationFolder%"
    

    带有源文件夹的文本文件是"My File With Source Folders.txt"

    【讨论】:

      【解决方案3】:

      Microsoft forum 线程中获取解决方案:

      复制另一个文件夹结构而不复制文件。

      这里的“ProjectsX”文件夹被替换为“ProjectsY” - 在 SVN 目录中

      /E - 包括空目录

      /XF * - 排除所有文件

      /XD ".svn" "obj" - 排除指定目录

      D:\SVN>robocopy ProjectsX ProjectsY /E /XF * /XD ".svn" "obj"
      

      感谢之前answer by Endoro 中对robocopy 的提示。但是你真的不需要镜像。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-14
        • 2011-03-22
        • 1970-01-01
        • 1970-01-01
        • 2012-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多