【问题标题】:Batch: Copy files where include and exclude conditions are met批处理:复制满足包含和排除条件的文件
【发布时间】:2011-10-04 22:58:23
【问题描述】:

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

使用 for 语句和 if 语句我可以做到这一点:

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

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

英文:复制源文件夹中以“Prefix.”开头、以“.ext”结尾、不包含“exclude”文本的所有文件。并且已经存在于目标文件夹中。

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

【问题讨论】:

  • 看看我对这个问题的解决方案。我认为您可能可以采用相同的方法。 stackoverflow.com/questions/7651406/…
  • @CareyGregory:我看了你对另一个问题的回答,但我看不出它有什么帮助。如果假设一个文件不包含多个“.”,它可能会有所帮助。
  • 我相信凯莉正在回答您的问题。本质上,您需要在要包含的文件上循环使用 FOR 并检查 IF 条件以过滤掉要排除的文件。也许您应该尝试一下,然后再提出一个更详细的问题,说明什么不适合您。

标签: batch-file copy iteration


【解决方案1】:

您可以为此使用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 文件的任何部分匹配的任何文件。

就是这样!这可能比编写带有嵌套 IF 的 FOR 语句更容易。

【讨论】:

  • 另一种创建排除文件的方法是在批处理文件中进行:您可以在文件开头调用echo EXCLUDE > C:\excludes.txt,然后使用/EXCLUDES:C:\excludes.txt。如果您想将所有内容保持在原位,这可能比提前创建文件更容易。
【解决方案2】:

在阅读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 解决方案可能看起来更好,但如果我能提供帮助,我宁愿不必创建(和删除)文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2015-07-29
    • 1970-01-01
    相关资源
    最近更新 更多