【问题标题】:How do I copy file and folder structure using xcopy from a text file?如何使用 xcopy 从文本文件中复制文件和文件夹结构?
【发布时间】:2013-01-05 15:26:15
【问题描述】:

我有一个包含文件和文件夹列表的文本文件。我想要做的是使用 xcopy 复制文本文件中写入的内容。我的文本文件如下所示:

"C:\FOLDER"  
"C:\FOLDER\FILE1.TXT"
"C:\FOLDER\FILE2.TXT"
"C:\FOLDER\FOLDER2"
"C:\FOLDER\FOLDER2\FILE3.TXT"

对于给定的输出目录"C:\OUTPUT",我想复制整个结构,所以:

"C:\OUTPUT\FOLDER"  
"C:\OUTPUT\FOLDER\FILE1.TXT"
"C:\OUTPUT\FOLDER\FILE2.TXT"
"C:\OUTPUT\FOLDER\FOLDER2"
"C:\OUTPUT\FOLDER\FOLDER2\FILE3.TXT"

我怎样才能做到这一点?到目前为止,我已经编写了一个读取文件每一行的 for 循环,但如果该行是文件夹,它会复制所有文件。我要做的只是复制和创建文本文件中提到的文件和文件夹。

@echo off
for /f "delims=] tokens=1*" %%a in (textfile.txt) do (
   XCOPY /S /E %%a "C:\OUTPUT"
)

我走对了吗?

谢谢你和最好的问候,

安德鲁

【问题讨论】:

    标签: batch-file xcopy


    【解决方案1】:

    是的,你很接近。只需要使用现有路径作为附加的目标路径。

    更新

    @echo off
    for /f "delims=" %%A in (textfile.txt) do if exist "%%~fA\*" (
        md "C:\Output\%%~pA"
        copy /y "%%~fA" "C:\Output\%%~pnxA"
    )
    

    原创

    如果%%A = "C:\Folder\Folder2\File3.txt",那么%%~pA = Folder\Folder2

    @echo off
    for /f "delims=" %%A in (textfile.txt) do (
        md "C:\Output\%%~pA"
        if not exist "%%~fA\*" echo f | xcopy "%%~fA" "C:\Output\%%~pnxA" /y
    )
    

    if not exist "%%~fA\*" 确保仅在条目不是目录时才复制条目。 See Reference for more Techniques and Comments

    在命令行输入for /? 以查看变量修饰符列表。 %%~A 将从变量中删除周围的引号(如果有)。

    Post about xcopy prompting issue. 和 fix #2。

    备用设置,因为您很可能不需要 xcopy 功能。

    @echo off
    for /f "delims=" %%A in (textfile.txt) do (
        md "C:\Output\%%~pA"
        if not exist "%%~fA\*" copy /y "%%~fA" "C:\Output\%%~pnxA"
    )
    

    【讨论】:

    • 谢谢大卫!有没有办法让它不复制文件夹的内容?基本上我希望它复制文本文件中提到的文件,即使目录中可能存在不在文件中的文件。我正在寻找的规则是“如果该行是文件夹,则创建文件夹和文件夹结构。如果该行是文件,则将文件复制到目录”。上面的代码复制了整个文件夹内容,而不是仅仅创建文件夹。
    • 我是批处理脚本的新手,所以我不知道发生了什么!所以 %%~pA 将检索目录结构减去驱动器和文件名。 %%~A 给了我什么?你上面提到的if条件是否包含在sn-p中?我不确定它是如何执行检查的...
    • @Andrew 欢迎使用批处理脚本。会有很多头痛。 :) 我已经更新了我的答案,对于命令行中的几乎所有命令,您都可以使用/? 帮助参数来找出各种有用的信息。另请参阅我的答案,以获取一些用于批处理脚本的出色在线资源。 stackoverflow.com/a/14431974/891976
    • 此版本不复制任何文件。 if not exist "%%~A\" 有效,但它要求我指定文件是文件还是目录。我使用 /y 和 /i 命令抑制了覆盖和目录指定提示,但现在它询问文件是文件还是目录。我好近!多么棒的剧本!
    • @Andrew 不幸的是,这是xcopy 的常见问题。有关解决问题的多种方法,请参阅我添加到答案中的帖子。 1. 使用copy 而不是xcopy。 2.使用echo f | xcopy模拟f输入。 3. 在 xcopy 命令之前使用echo.>"%%~fA" 创建一个空白文件。我在答案中添加了解决方案 2,但其中任何一个都可以。
    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    相关资源
    最近更新 更多