我的要求是编写一个批处理脚本来比较两个文件夹中的文件。如果文件同时存在于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”结尾,并将所有包含“排除”字的文件排除在外。
在英文中:复制以‘前缀’开头的所有文件,以‘. text’结尾,不包含“排除”文本。并且已经存在于目标文件夹中。
这就是我被困的地方。有人知道如何成批地做这件事吗?
发布于 2011-10-05 18:08:54
为此您可以使用xcopy
。首先,我假设前缀和ext是实际的字符串,如果要使用变量,就必须像%Prefix%
那样包装它们。
其次,您必须创建一个新的文本文件。将其命名为excludes.txt
,并将其放在与批处理文件相同的目录中。(如果不想创建批处理文件,则只需在运行命令时将其放在活动目录中即可)。该文件的唯一内容应该是没有引号或其他标记的排除字符串。
好的,命令本身:
xcopy %Source%\Prefix.*.ext %Target% /U /EXCLUDE:excludes.txt
要把它分解:
%Source%\Prefix.*.ext
选择源文件夹中以前缀开头并以.ext%Target%
结尾的文件,指定仅复制目标directory/EXCLUDE:excludes.txt
中已经存在的文件的目标,这将在excludes.txt
中读取,并排除与excludes.txt
文件的任何部分匹配的任何文件。就这样!这可能比用嵌套的IF编写FOR语句更容易。
发布于 2011-10-06 00:26:43
在阅读了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解决方案看起来可能更好一些,不过如果我能帮忙的话,我希望不必创建(和删除)文件。
https://stackoverflow.com/questions/7654980
复制相似问题