![替换档案中的分散文件](https://linux22.com/image/1328009/%E6%9B%BF%E6%8D%A2%E6%A1%A3%E6%A1%88%E4%B8%AD%E7%9A%84%E5%88%86%E6%95%A3%E6%96%87%E4%BB%B6.png)
我有许多文件以分层方式分散在多个目录中。我将其中一些文件复制到单个目录中,但没有复制所有子目录。我需要一种方法来从单个线性文件目录中更新所有原始文件。
例如,
文件:
C:\dir1\dira\file1
C:\dir1\dira\file2
C:\dir1\dirb\file3
C:\dir1\dirc\file4
D:\dir2\dira\file5
和
B 文件
E:\dir\file1
E:\dir\file2
E:\dir\file3
E:\dir\file4
E:\dir\file5
B 文件已被修改,我需要将修改“推送”到 A 文件(仅具有相同文件名的文件)。
例如E:\dir\file1
复制到C:\dir1\dira\file1
等等……
这是一个相当简单的过程,我可能可以编写一个批处理文件,但是有没有专门执行此操作的软件?
答案1
这是我刚刚想到的批处理文件方法。它似乎工作得很好。它可以改进(命令行参数等...)我将把这个留给别人...
要使其工作,需要更改 3 项:涉及复制的两个目录和要更新的扩展(可能只是。)。
该程序的操作是:
对于中的每个文件C:\root dir 1\*\*.ext
,该文件都将从在中找到的文件进行更新C:\root dir 2\*.ext
。(注意第一个是递归的,第二个是平面的)(比较纯粹基于文件名。如果在根目录 1 中的多个位置找到同名文件,则它们都将使用平面目录中的同一文件进行更新)
@echo off
setlocal enableextensions
SETLOCAL EnableDelayedExpansion
set OLDDIR=%CD%
set FLATDIR=C:\Root Dir 1(Hierarchical dir)\
cd /D "C:\Root Dir 2(Flat dir)"
for /r %%q in (*.ext) do (
cd "%%~dpq"
if exist "!FLATDIR!%%~nxq" (
echo Updating %%~dpnxq
copy /Y /B "!FLATDIR!%%~nxq" "%%~dpnxq" > nul
)
)
cd /d %OLDDIR%
答案2
如果我正确理解了这个问题,那就是将更新的文件从一个目录合并到另一个包含原始文件和不应触及的其他文件的目录。
按照易用性排序,这些工具都有 Windows 端口:Unison(可用 GUI)、Rsync、“diff & patch”。