【问题标题】:Copying multiple files by *.extension with xcopy使用 xcopy 通过 *.extension 复制多个文件
【发布时间】:2016-09-12 13:49:45
【问题描述】:

我正在制作一个批处理脚本,将所有.doc.pdf.xls 等从磁盘复制到随身碟。

我当前的代码如下:

@echo off
Title ""

::All Docs
 XCOPY C:\*.doc W:\xdatabase /C /S /I /F /H > W:\database\XC\AllInf.txt

::All PDFs
 XCOPY C:\*.pdf W:\xdatabase /C /S /I /F /H >> W:\database\XC\AllInf.txt

::All WRI
 XCOPY C:\*.wri W:\xdatabase /C /S /I /F /H >> W:\database\XC\AllInf.txt

::All TXT
 XCOPY C:\*.txt W:\xdatabase /C /S /I /F /H >> W:\database\XC\AllInf.txt

::All PPT
 XCOPY C:\*.ppt W:\xdatabase /C /S /I /F /H >> W:\database\XC\AllInf.txt

::All XLS
 XCOPY C:\*.xls W:\xdatabase /C /S /I /F /H >> W:\database\XC\AllInf.txt

问题是:如何在添加更多扩展的同时避免代码中的所有重复?

【问题讨论】:

    标签: batch-file xcopy


    【解决方案1】:

    这在一行上工作,不需要脚本文件。需要单个百分号,而不是双倍:

    for %f in (xlsm xlsb) do xcopy SourceDir\*.%f DestinationDir\ /S
    

    或者在你的情况下

    for %e in (doc pdf xls wri txt ppt xls) do XCOPY C:\*.%e W:\xdatabase /C /S /I /F /H > W:\database\XC\AllInf.txt
    

    根据我的测试,robocopy 支持多个没有循环的扩展。

    ROBOCOPY C:\ W:\xdatabase /S *.doc *.pdf *.xls *.wri *.txt *.ppt *.xls
    

    但是,根据我的经验,xcopy 似乎在 speed 上击败了 robocopy,即使有多个扩展名,但我只测试了一小部分文件。

    【讨论】:

    • +1 包括 robocopy,这对我很有帮助,因为这显然是一个 XY 问题,并且 robocopy 比 xcopy 更适合多个扩展。
    【解决方案2】:

    在所有编程语言中都是正确的:如果您必须连续多次执行某件事,请使用循环。

    @echo off
    Title ""
    
    for %%e in (doc pdf wri txt ppt xls) do (
        XCOPY "C:\*.%%e" W:\xdatabase /C /S /I /F /H > W:\database\XC\AllInf.txt
    )
    

    for 循环在批处理脚本中可能很棘手。一个方便的指南在这里:http://ss64.com/nt/for.html

    【讨论】:

    • 哦,我很感激,这正是我经常问的问题
    • @Derley 您还可以查看 robocopy,了解在一个命令中包含多个源的方法。
    • @Tomalak 这个for循环不能在一个语句中完成吗?
    • @johny 我不这么认为。 xcopy 只接受一个源参数。
    • @johnywhy 这也是一个循环。你把它写在一行上没有区别。
    猜你喜欢
    • 1970-01-01
    • 2011-01-29
    • 2018-01-22
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多