Как написать bat файл, который проверяет 2-а тактовых файла на разность записанной в них информации и в третий текстовый файл записывает эту разность

Рейтинг: 0Ответов: 1Опубликовано: 25.02.2023

Задача: Два каталога содержат файлы, имеющие одинаковые и разные имена. Командный файл должен обеспечить копирование файлов, имеющих разные имена в третью директорию

То что уже написал:

rem @echo off

set directoria1=C:\Users\felix\YandexDisk\Уник\Уник_3курс_\Предметы\2семестр\ОС\Лабы\1\Варианты\13\directoria1
@echo %directoria1%
cd %directoria1%
dir /b > text.txt

set directoria2=C:\Users\felix\YandexDisk\Уник\Уник_3курс_\Предметы\2семестр\ОС\Лабы\1\Варианты\13\directoria2
@echo %directoria2%
cd %directoria2%
dir /b > text.txt

@echo off
set directoria1_txt=C:\Users\felix\YandexDisk\Уник\Уник_3курс_\Предметы\2семестр\ОС\Лабы\1\Варианты\13\directoria1\text.txt
set directoria2_txt=C:\Users\felix\YandexDisk\Уник\Уник_3курс_\Предметы\2семестр\ОС\Лабы\1\Варианты\13\directoria2\text.txt
set directoria3_txt=C:\Users\felix\YandexDisk\Уник\Уник_3курс_\Предметы\2семестр\ОС\Лабы\1\Варианты\13\11.02.2023 
type %directoria1_txt%
type %directoria2_txt%

for /f %i in (type %directoria1_txt%) do (
    for /f %j in (type %directoria2_txt%) do (
        if not %i == %j (
            copy %i cd %directoria3_txt%
        )
    )
)

Помогите разобраться с циклом. Как правильно проверить два файла на совпадение (внутреннее их содержимой) и то что не совпадает записать в другой тестовый файл

Ответы

▲ 0

Вот исправленный код, все объяснения в комментариях:

@Echo off
SetLocal EnableDelayedExpansion

Rem Поскольку все папки находятся в одной, путь можно сократить
Cd /D "C:\Users\felix\YandexDisk\Уник\Уник_3курс_\Предметы\2семестр\ОС\Лабы\1\Варианты\13"

Dir /B directoria2 > dir.txt

Rem В bat-файлах в цикле for нужно два знака процента
For /F %%i In ('Dir /B directoria1') Do (
    Rem Тут используется findstr для поиска имени файла в directoria2
    FindStr /C:"%%i" dir.txt > Nul 2> Nul
    Rem Если строка не найдена, нужно скопировать файл
    If Not !ErrorLevel!==0 ( Copy "directoria1\%%i" directoria3 > Nul )
)

Del dir.txt
EndLocal