我的要求是编写一个批处理脚本来比较两个文件夹中的文件。如果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”。并且已存在于目标文件夹中。
这是我被卡住的地方。有谁知道如何批量执行此操作?
答案 0 :(得分:5)
您可以使用xcopy
。首先,我假设Prefix和ext是实际字符串,使用变量而不是像%Prefix%
那样包装它们。
其次,您必须创建一个新的文本文件。将其命名为excludes.txt
并将其放在与批处理文件相同的目录中。 (如果您不想创建批处理文件,则只需将其放在运行该命令时处于活动状态的目录中)。此文件的唯一内容应该是没有引号或其他标记的EXCLUDE字符串。
好的,命令本身:
xcopy %Source%\Prefix.*.ext %Target% /U /EXCLUDE:excludes.txt
要打破它:
%Source%\Prefix.*.ext
选择源文件夹中以Prefix开头并以.ext结尾的文件%Target%
指定文件的目的地/U
仅复制目标目录中已存在的文件/EXCLUDE:excludes.txt
这将在excludes.txt
中读取并排除任何与excludes.txt
文件的任何部分匹配的文件。就是这样!这可能比使用嵌套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解决方案可能看起来更好,但如果我可以帮助它,我不想创建(和删除)文件。