Как написать bat файл, который проверяет 2-а тактовых файла на разность записанной в них информации и в третий текстовый файл записывает эту разность
Задача: Два каталога содержат файлы, имеющие одинаковые и разные имена. Командный файл должен обеспечить копирование файлов, имеющих разные имена в третью директорию
То что уже написал:
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%
)
)
)
Помогите разобраться с циклом. Как правильно проверить два файла на совпадение (внутреннее их содержимой) и то что не совпадает записать в другой тестовый файл
Ответы (1 шт):
Автор решения: nekit
→ Ссылка
Вот исправленный код, все объяснения в комментариях:
@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