0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 24
1

Как сравнить на соответствие файлы(поочерёдно) из 2 папок

19.12.2021, 10:33. Показов 2469. Ответов 46
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужен код который должен будет с помощью цикла(for скорее всего) сравнивать файлы из C:\test\backup и C:\test\COPING на наличие несоответствия и выводить в консоль "Найдено несоответствие" на английском, также файл который не соответствует по содержанию файлу с таким же названием в C:\test\backup занести в переменную (при возможности ещё и в файл C:\test\FILES\files.txt)

На данный момент есть вот такой код:

Windows Batch file
1
@xcopy C:\test\COPING C:\test\backup /i /y /s
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2021, 10:33
Ответы с готовыми решениями:

Как вывести файлы поочерёдно с помощью cat
Добрый день! Есть смежный вопрос по выведению командой cat, есть файл в котором хранятся пути к...

Как сравнить содержание двоих папок по internet?
есть проблема:) Кто в теме, помогите пожалуйста. Реанимировал знакомой внешний HDD: WD USB2.0...

Как посредством CMD сравнить все файлы в заданной директории и удалить файлы с одинаковым содержимым?
В папке "папка" находятся текстовые файлы 1.txt 2.txt 3.txt 4.txt, некоторые из этих файлов имеют...

Сравнить искомый элемент поочерёдно с элементами массива
Помогите пожалуйста с написанием следующей программы: 1.Осуществить ввод массива одним из...

Сравнить 2 строки на соответствие
Итак, по заданию требуется следующие, имеется файл "input.txt", в котором записаны 2 каких либо...

46
3048 / 1055 / 475
Регистрация: 29.05.2016
Сообщений: 4,438
19.12.2021, 11:26 2
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
set "backup=C:\test\backup"
set "coping=C:\test\coping"
set "files=C:\test\Files"
powershell -executionpolicy bypass -command "$files=Get-ChildItem '%backup%' -file;" ^
    "foreach ($file in $files) {" ^
        "if ((Get-FileHash $file.fullname).hash -ne (Get-FileHash """%coping%\$($file.name)""").hash) {" ^
            "write-host 'Found discrepancy';" ^
            "[string[]]$diff+=$file.name;" ^
            "$file.name | out-file '%files%\files.txt' -Append;" ^
        "};" ^
    "};" ^
pause
exit
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 24
19.12.2021, 11:35  [ТС] 3
Сейчас попробую

Добавлено через 5 минут
Resolve-Path : Не удается найти путь "C:\test\coping\coping.bat", так как он не существует.
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Utility\ Microsoft.PowerShell.Utility.psm1:110 з
нак:36
+ $pathsToProcess += Resolve-Path $Path | Foreach-Objec ...
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\test\coping\coping.bat:String) [Resolve-Path], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.ResolvePathCommand

Found discrepancy
out-file : Не удалось найти часть пути "C:\test\Files\files.txt".
строка:1 знак:245
+ ... name; $file.name | out-file 'C:\test\Files\files.txt' -Append; }; }; ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: ( [Out-File], DirectoryNotFoundException
+ FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand

Для продолжения нажмите клавишу ВВОД...:

у меня coping.bat лежит в C:\test

Добавлено через 1 минуту
смайлик сам добавился
0
3048 / 1055 / 475
Регистрация: 29.05.2016
Сообщений: 4,438
19.12.2021, 11:39 4
По пунктам:
1) 2,3,4 строки приведённого мною кода правите в соответствии с нахождением папок
2) Код сохраняете в виде батника
3) Запускаете
P.S. Код не нуждается в Вашей отсебятине в виде:
Цитата Сообщение от FORHILL Посмотреть сообщение
$pathsToProcess += Resolve-Path $Path | Foreach-Objec ...
Добавлено через 1 минуту
Покажите готовый батник в соответствии с тем, что я описал выше
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 24
19.12.2021, 11:47  [ТС] 5
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
set "backup=C:\test\backup"
set "coping=C:\test\COPING"
set "files=C:\test\Files"
powershell -executionpolicy bypass -command "$files=Get-ChildItem '%backup%' -file;" ^
    "foreach ($file in $files) {" ^
        "if ((Get-FileHash $file.fullname).hash -ne (Get-FileHash """%coping%\$($file.name)""").hash) {" ^
            "write-host 'Found discrepancy';" ^
            "[string[]]$diff+=$file.name;" ^
            "$file.name | out-file '%files%\files.txt' -Append;" ^
        "};" ^
    "};" ^
pause
exit
Добавлено через 1 минуту
И ещё

Resolve-Path : Не удается найти путь "C:\test\COPING\coping.bat", так как он не существует.
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Utility\ Microsoft.PowerShell.Utility.psm1:110 з
нак:36
+ $pathsToProcess += Resolve-Path $Path | Foreach-Objec ...
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\test\COPING\coping.bat:String) [Resolve-Path], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.ResolvePathCommand

Found discrepancy
Для продолжения нажмите клавишу ВВОД...:

Это не я писал в код $pathsToProcess += Resolve-Path $Path | Foreach-Objec ...
0
3048 / 1055 / 475
Регистрация: 29.05.2016
Сообщений: 4,438
19.12.2021, 11:48 6
В командной строке выполните команду и покажите вывод:
Windows Batch file
1
powershell -executionpolicy bypass -command "$psversiontable"
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 24
19.12.2021, 11:53  [ТС] 7
Name Value
---- -----
PSVersion 5.1.19041.1023
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.1023
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1

Добавлено через 3 минуты
Сейчас всё работает но интерпретатор ругается когда в COPING или в backup лежит *.bat
0
3048 / 1055 / 475
Регистрация: 29.05.2016
Сообщений: 4,438
19.12.2021, 11:55 8
Всё должно работать. Батник во вложении, пробуйте запускать его
Вложения
Тип файла: zip 1.zip (391 байт, 2 просмотров)
1
3048 / 1055 / 475
Регистрация: 29.05.2016
Сообщений: 4,438
19.12.2021, 11:59 9
Цитата Сообщение от FORHILL Посмотреть сообщение
Сейчас всё работает но интерпретатор ругается когда в COPING или в backup лежит *.bat
Его там и не должно лежать, перенесите его в нейтральную папку

Добавлено через 42 секунды
Или там нужны какие-то скрипты?
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 24
19.12.2021, 12:03  [ТС] 10
Да, работает . Можете ещё сказать как обратиться к переменной с out-file ом ?
если она вообще есть
0
3048 / 1055 / 475
Регистрация: 29.05.2016
Сообщений: 4,438
19.12.2021, 12:06 11
FORHILL, эта переменная активна в рамках powershell. Лучше скажите, что с ней нужно сделать и я добавлю эти действия в код
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 24
19.12.2021, 12:07  [ТС] 12
Батник из 1.zip не ругается если в этих папках есть *.bat
0
3048 / 1055 / 475
Регистрация: 29.05.2016
Сообщений: 4,438
19.12.2021, 12:08 13
Цитата Сообщение от FORHILL Посмотреть сообщение
Батник из 1.zip не ругается если в этих папках есть *.bat
Значит что-то не так с составленным Вами батником
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 24
19.12.2021, 12:10  [ТС] 14
Мне нужно чтобы из другого места программы можно было производить действия с несоответствующим файлом (удаление например или перемещение , копирование и т.д.)

Добавлено через 1 минуту
Это к вопросу про переменную
0
3048 / 1055 / 475
Регистрация: 29.05.2016
Сообщений: 4,438
19.12.2021, 12:12 15
Несоответствующим считается файл из папки C:\test\backup?
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 24
19.12.2021, 12:14  [ТС] 16
из C:\test\COPING
0
3048 / 1055 / 475
Регистрация: 29.05.2016
Сообщений: 4,438
19.12.2021, 12:16 17
Объясните зачем переменная, когда её содержимое дублируется в C:\test\Files\files.txt?

Добавлено через 33 секунды
Можно без проблем получить его содержимое и делать всё, что нужно
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 24
19.12.2021, 12:18  [ТС] 18
ОК , можете тогда сказать как получить из него последнее значение из files.txt?
0
3048 / 1055 / 475
Регистрация: 29.05.2016
Сообщений: 4,438
19.12.2021, 12:22 19
Допустим, так:
Windows Batch file
1
2
3
4
5
6
for /f "tokens=* delims=" %%a in (C:\test\Files\files.txt) do (
    set "value=%%a"
)
echo %value%
pause
exit
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 24
19.12.2021, 12:24  [ТС] 20
и в value хранится всё что есть в files.txt
0
19.12.2021, 12:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2021, 12:24
Помогаю со студенческими работами здесь

Замена папок на исполняемые файлы со скрытием реальных папок
Добрый вечер, на старом компьютере появился вирус, который портит флешки. Все папки заменяются на...

Сравнить две строки на соответствие
Здравствуйте! Подскажите пожалуйста, какая ошибка в этом коде; если я всё правильно понял, то...

Сравнить URL в операторах if else на соответствие каноническому адресу страницы
Подскажите пожалуйстак как сделать следующее: Хочу сделать проверку URL на соответствие...

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

Поочередно открывать файлы в определенном каталоге
Здравствуйте уважаемые программисты!!! Подскажите пожалуйста как написать, что бы прога поочередно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru