使用 xcopy 通过 *.extension 复制多个文件

Copying multiple files by *.extension with xcopy

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

我当前的代码如下:

@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

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

在所有编程语言中始终如此:如果您必须连续多次执行某件事,请使用循环。

@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

这在一行上有效,不需要脚本文件。需要单百分号,而不是双百分号:

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,即使有多个扩展名,但我只测试了非常小的一批文件。