2

У меня есть много файлов, разбросанных по нескольким каталогам в иерархическом порядке. У меня есть некоторые из этих файлов, скопированные в один каталог без всех подкаталогов. Мне нужен способ обновить все исходные файлы из единого линейного каталога файлов.

например,

Файлы:

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 т. д ...

Это довольно простой процесс, и я, вероятно, мог бы написать командный файл, но есть ли программное обеспечение, которое делает это специально?

2 ответа2

2

Вот метод пакетного файла, который я только что придумал. Вроде нормально работает. Это может быть улучшено (аргументы командной строки и т.д.) Я оставлю это кому-то другому ...

Чтобы заставить его работать, нужно изменить 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%
1

Если я правильно понял проблему, это объединить обновленные файлы из одного каталога в другой каталог, который содержит исходные файлы и другие, которые не должны быть затронуты.

В целях простоты использования эти инструменты имеют порты Windows: Unison (GUI доступен), Rsync, «diff & patch».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .