批处理:复制满足包含和排除条件的文件

时间:2011-10-04 22:58:23

标签: batch-file copy iteration

我的要求是编写一个批处理脚本来比较两个文件夹中的文件。如果SourceFolder和TargetFolder中都存在文件,则使用SourceFolder中的文件覆盖TargetFolder中的文件。

使用for-statement和if语句我可以实现这个目的:

for /R %Source% %%G in (Prefix.*.ext) do (
    if exist %Target%%%~nxG (
        del %%G
        copy %Target%%%~nxG %Source% 
    ) 
)

虽然附加要求是仅复制以“前缀”开头的文件。并以“.ext”结尾,并排除包含“exclude”一词的所有文件。

在英语中:从该源文件夹中复制以“前缀”开头的所有文件,以“.ext”结尾,不包含文本“exclude”。并且已存在于目标文件夹中。

这是我被卡住的地方。有谁知道如何批量执行此操作?

2 个答案:

答案 0 :(得分:5)

您可以使用xcopy。首先,我假设Prefix和ext是实际字符串,使用变量而不是像%Prefix%那样包装它们。

其次,您必须创建一个新的文本文件。将其命名为excludes.txt并将其放在与批处理文件相同的目录中。 (如果您不想创建批处理文件,则只需将其放在运行该命令时处于活动状态的目录中)。此文件的唯一内容应该是没有引号或其他标记的EXCLUDE字符串。

好的,命令本身:

xcopy %Source%\Prefix.*.ext %Target% /U /EXCLUDE:excludes.txt

要打破它:

  1. %Source%\Prefix.*.ext选择源文件夹中以Prefix开头并以.ext结尾的文件
  2. %Target%指定文件的目的地
  3. /U仅复制目标目录中已存在的文件
  4. /EXCLUDE:excludes.txt这将在excludes.txt中读取并排除任何与excludes.txt文件的任何部分匹配的文件。
  5. 就是这样!这可能比使用嵌套IF编写FOR语句更容易。

答案 1 :(得分:0)

在阅读this SO question后,我最终这样做了。 (在回答问题之前)

pushd %Target%
attrib +h *Exclude
for /R %%G in (Prefix.*.ext) do (
    if exist %Target%%%~nxG (
        del %%G
        copy %Target%%%~nxG 
    ) 
)
attrib -h *Exclude
popd

xcopy解决方案可能看起来更好,但如果我可以帮助它,我不想创建(和删除)文件。