![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Сравнение файлов в каталогах. |
|
|
Любой язык - [решено] Сравнение файлов в каталогах.
|
Старожил Сообщения: 433 |
Всем доброго времени суток.
Прочитал все похожие темы. но сам что-то дотумкать немогу. Потому прошу о помощи. Есть два каталога с файлами. например D:\1 и D:\2. Нужно сравнить файлы из 1 и 2 между собой и удалить все одинаковые из каталога 2 Файлы маленькие по размеру, если возможно сравнение по CRC или MD5, то вообще отлично. |
|
Отправлено: 11:07, 11-11-2013 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать PowerShell 3.0 и выше:
Function Get-FileHash { [CmdletBinding(DefaultParameterSetName = "Path")] param( [Parameter(Mandatory, ParameterSetName="Path", Position = 0)] [System.String[]] $Path, [Parameter(Mandatory, ParameterSetName="LiteralPath", ValueFromPipelineByPropertyName = $true)] [Alias("PSPath")] [System.String[]] $LiteralPath, [ValidateSet("SHA1", "SHA256", "SHA384", "SHA512", "MACTripleDES", "MD5", "RIPEMD160")] [System.String] $Algorithm="SHA256" ) begin { # Construct the strongly-typed crypto object $hasher = [System.Security.Cryptography.HashAlgorithm]::Create($Algorithm) } process { $pathsToProcess = @() if($PSCmdlet.ParameterSetName -eq "LiteralPath") { $pathsToProcess += Resolve-Path -LiteralPath $LiteralPath | Foreach-Object ProviderPath } else { $pathsToProcess += Resolve-Path $Path | Foreach-Object ProviderPath } foreach($filePath in $pathsToProcess) { if(Test-Path -LiteralPath $filePath -PathType Container) { continue } try { # Read the file specified in $FilePath as a Byte array [system.io.stream]$stream = [system.io.file]::OpenRead($FilePath) # Compute file-hash using the crypto object [Byte[]] $computedHash = $hasher.ComputeHash($stream) } catch [Exception] { $errorMessage = [Microsoft.PowerShell.Commands.UtilityResources]::FileReadError -f $FilePath, $_ Write-Error -Message $errorMessage -Category ReadError -ErrorId "FileReadError" -TargetObject $FilePath return } finally { if($stream) { $stream.Close() } } # Convert to hex-encoded string [string] $hash = [BitConverter]::ToString($computedHash) -replace '-','' $retVal = [PSCustomObject] @{ Algorithm = $Algorithm.ToUpperInvariant() Hash = $hash Path = $filePath } $retVal.psobject.TypeNames.Insert(0, "Microsoft.Powershell.Utility.FileHash") $retVal } } } Get-ChildItem D:\1,D:\2 -File | Select Name,FullName,@{n="Hash";e={(Get-FileHash $_.FullName -Algorithm MD5).Hash}} | Group Name,Hash | Where Count -ge 2 | Remove-Item -Path {$_.Group.FullName -match "D:\\2\\"} |
Отправлено: 11:35, 11-11-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 433
|
Профиль | Отправить PM | Цитировать Стесняюсь спросить а как этим пользоваться?
Скопировал содержимое в тестовой файл. Поставил расширение BAT и не чего не происходит. ая-яй в названии темы не то указано, нужно было CMD/BAT. Приношу свои извинения, видать что-то глюкнуло. Прошу модераторов отредактировать название, так как мне это уже не доступно. |
Отправлено: 12:15, 11-11-2013 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата NikolayHAOS:
Цитата NikolayHAOS:
|
||
Отправлено: 12:37, 11-11-2013 | #4 |
Старожил Сообщения: 433
|
Профиль | Отправить PM | Цитировать |
|
Отправлено: 14:10, 11-11-2013 | #5 |
Старожил Сообщения: 433
|
Профиль | Отправить PM | Цитировать В принципе хрен с ним с хешем, а если сравнивать по размеру например.
Вроде в Bat можно так сделать, Получается: как сравнить содержимое двух папок, файлы по размеру, и удалить одинаковые в одной из них. |
Отправлено: 14:29, 11-11-2013 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать NikolayHAOS, Вам действительно нужен именно скрипт? Для автоматизации, не одноразовое действие?
|
Отправлено: 15:26, 11-11-2013 | #7 |
Пользователь Сообщения: 70
|
Профиль | Отправить PM | Цитировать for %%f in (d:\2\*.*) do ( fc "%%f" "d:\1\%%~nxf"|find "FC: различия не найдены" if not errorlevel 1 del "%%f" ) Если достаточно проверки по размеру, то изменим вот так: |
------- Последний раз редактировалось Гуллипут, 11-11-2013 в 23:51. Причина: Дополнение и исправление Отправлено: 23:40, 11-11-2013 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Гуллипут:
![]() |
|
Отправлено: 23:56, 11-11-2013 | #9 |
Старожил Сообщения: 433
|
Профиль | Отправить PM | Цитировать Iska, да скрипт, если бы один раз, то и вручную можно сравнить.
Есть набор файлов содержимое которых обновляется время от времени, но не всех сразу, задача быстренько отсеять не изменившиеся, до того как обратился на форум сравнивал через просмотр в архиваторе ![]() Гуллипут кодировка UTF-8, второй вариант (по размеру) отлично отработал, НО какова вероятность изменения файла с сохранением изначального размера? вот и я думаю, а вдруг. Мобыть кто-то может подсказать почему скрипт, предложенный Kazun, не срабатывает? |
Отправлено: 06:56, 12-11-2013 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Поиск и проверка сегодняшних файлов в динамических каталогах | rudimko | Скриптовые языки администрирования Windows | 4 | 10-09-2012 20:55 | |
CMD/BAT - [решено] Создание файлов в несуществующих каталогах | Bruce Wayne | Скриптовые языки администрирования Windows | 3 | 26-07-2012 21:35 | |
CMD/BAT - CMD-файл, обеспечивающий обмен файлов в двух каталогах | stAlexey | Скриптовые языки администрирования Windows | 5 | 23-10-2010 19:46 | |
Прочие - Программа для сравнения файлов в различных каталогах | shadowmaster63 | Программное обеспечение Windows | 3 | 14-04-2010 10:28 | |
Сравнение файлов | Guest | Программирование и базы данных | 6 | 24-04-2004 04:47 |
|