Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Необходимо реализовать задачу с расчётом хеша в директориях и сохранением в фаил.

Ответить
Настройки темы
CMD/BAT - [решено] Необходимо реализовать задачу с расчётом хеша в директориях и сохранением в фаил.

Новый участник


Сообщения: 46
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Мне это необходимо для автоматизированного бекапа через программу GoodSync, там можно выполнять команды до синхронизации(бекапа).
Так вот я хочу чтобы перед синхронизацией создавался по всем правилам созданный фаил с контрольной суммой всех файлов в директории и поддиректориях, исключая при этом файлы Thumbs.db (и не только, зависит от конкретной бекап-задачи). Причём чтобы была возможность сохранять этот фаил со списком контрольных сумм файлов в произвольном месте а не сканируемой директории.

Искал консольные утилиты для расчёта контрольных сумм, но так и не нашёл таких, в которых было бы возможно задавать исключения для определённых имён файлов.

Отправлено: 09:25, 17-12-2013

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата DjBoBo:
Искал консольные утилиты для расчёта контрольных сумм, но так и не нашёл таких, »
Есть.

Цитата DjBoBo:
в которых было бы возможно задавать исключения для определённых имён файлов. »
И не надо.

1. Какая конкретно контрольная сумма нужна?
2. Какая ОС?
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:48, 17-12-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska,
1 MD5
2 Windows XP, Windows 7.

Отправлено: 09:49, 17-12-2013 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Думаю, для вычисления удобнее всего будет использовать скрипт на PowerShell, скажем: Use PowerShell To Calculate the Hash of a File | Learn Powershell | Achieve More и т.п.

Отправлено: 10:20, 17-12-2013 | #4


Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, боюсь мне самому не осилить скриптовый язык :-(

Отправлено: 10:43, 17-12-2013 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
function GetMD5Hash([System.String]$sFile) {
    $oHashAlgorithm = [Security.Cryptography.HashAlgorithm]::Create("MD5")

    $oStreamReader = ([System.IO.StreamReader]$sFile).BaseStream
    
    -join ($oHashAlgorithm.ComputeHash($oStreamReader) | ForEach-Object -Process { "{0:x2}" -f $_ })
    $oStreamReader.Close()
}

$sRootPath    = "E:\Песочница\0328"
$sMD5ListPath = "E:\Песочница\0336\MD5 List.txt"

Get-ChildItem -Path $sRootPath -Recurse |`
    Where-Object -FilterScript { -not $_.PSIsContainer -and "Thumbs.db", "Descript.ion" -notcontains $_.Name } |`
        ForEach-Object -Process {
            "$(GetMD5Hash $_.FullName)`t$($_.FullName)"
        } | Out-File -FilePath $sMD5ListPath -Encoding Unicode
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:01, 17-12-2013 | #6


Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, спасибо. Вот только необходимо чтобы пути были относительными. Так как бекапы на удалённом устройстве располагаются по другим путям. Да и если их верифицировать на основном компьютере всё равно они будут лежать по другим путям.

Сейчас всё отображается вот так
C:\Test\123.txt
C:\Test\sync\test1.jpg
C:\Test\sync\test2.jpg

а необходимо вот так.
*123.txt
*sync\test1.jpg
*sync\test2.jpg

И хотелось бы в начале списка дату со временем, например
; Generated on 2013-12-17 at 13:00:00

Отправлено: 13:11, 17-12-2013 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Пробуйте:
читать дальше »
Код: Выделить весь код
function GetMD5Hash([System.String]$sFile) {
    $oHashAlgorithm = [Security.Cryptography.HashAlgorithm]::Create("MD5")

    $oStreamReader = ([System.IO.StreamReader]$sFile).BaseStream
    
    -join ($oHashAlgorithm.ComputeHash($oStreamReader) | ForEach-Object -Process { "{0:x2}" -f $_ })
    $oStreamReader.Close()
}

$sRootPath    = "E:\Песочница\0328"
$sMD5ListPath = "E:\Песочница\0336\MD5 List.txt"

"; Generated on $(Get-Date)" | Out-File -FilePath $sMD5ListPath -Encoding Unicode

Get-ChildItem -Path $sRootPath -Recurse |`
    Where-Object -FilterScript { -not $_.PSIsContainer -and "Thumbs.db", "Descript.ion" -notcontains $_.Name } |`
        ForEach-Object -Process {
            "$(GetMD5Hash $_.FullName)`t$($_.FullName.Substring($sRootPath.Length + 1))"
        } | Out-File -FilePath $sMD5ListPath -Encoding Unicode -Append

Отправлено: 19:11, 17-12-2013 | #8


Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, результирующий файл контрольных сумм не воспринимает программа чекер из-за двух моментов.
Первый момент заключается в том что фаил использует какую-то экзотическую кодировку UCS-2 Little Endian (согласно Notepad++) за место UTF-8.
И второй момент заключается в том что между контрольной суммой и именем файла стоит символ не пробела (а Tab?).
Я в Notepad++ преобразовал фаил в UTF-8, сменил удлинённый пробел на обычный и вроде как всё работает.

Надеюсь что это можно исправить в самом скрипте :-)

Отправлено: 01:22, 18-12-2013 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата DjBoBo:
фаил использует какую-то экзотическую кодировку UCS-2 Little Endian »
Это наиобычнейший юникод . Вы ранее ничего не упоминали про кодировку, посему я выбирал сам.

Цитата DjBoBo:
И второй момент заключается в том что между контрольной суммой и именем файла стоит символ не пробела (а Tab?). »
И по этому поводу ранее ничего не было сказано. Вообще у Вас там были звёздочки .

Цитата DjBoBo:
Надеюсь что это можно исправить в самом скрипте :-) »
Пробуйте:
читать дальше »
Код: Выделить весь код
function GetMD5Hash([System.String]$sFile) {
    $oHashAlgorithm = [Security.Cryptography.HashAlgorithm]::Create("MD5")

    $oStreamReader = ([System.IO.StreamReader]$sFile).BaseStream
    
    -join ($oHashAlgorithm.ComputeHash($oStreamReader) | ForEach-Object -Process { "{0:x2}" -f $_ })
    $oStreamReader.Close()
}

$sRootPath    = "E:\Песочница\0328"
$sMD5ListPath = "E:\Песочница\0336\MD5 List.txt"

"; Generated on $(Get-Date)" | Out-File -FilePath $sMD5ListPath -Encoding UTF8

Get-ChildItem -Path $sRootPath -Recurse |`
    Where-Object -FilterScript { -not $_.PSIsContainer -and "Thumbs.db", "Descript.ion" -notcontains $_.Name } |`
        ForEach-Object -Process {
            "$(GetMD5Hash $_.FullName) $($_.FullName.Substring($sRootPath.Length + 1))"
        } | Out-File -FilePath $sMD5ListPath -Encoding UTF8 -Append

Отправлено: 01:46, 18-12-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Необходимо реализовать задачу с расчётом хеша в директориях и сохранением в фаил.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Создать общий списк файлов в директориях antonyk Скриптовые языки администрирования Windows 6 14-01-2012 15:17
Proxy/NAT - Как реализовать задачу : минипровайдер внутри офиса. djeff Сетевые технологии 0 24-05-2010 11:15
VPN - Необходимо реализовать подключение Site-to-site extremal Сетевые технологии 6 25-03-2008 14:56
vsftpd: нет прав на удаления файлов в домашних директориях steepz Программное обеспечение Linux и FreeBSD 6 09-09-2006 16:37
Групповая политика в Активных директориях Vi-P Microsoft Windows NT/2000/2003 3 15-03-2006 17:45




 
Переход