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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Побайтовое сравнение двух файлов

Ответить
Настройки темы
VBS/WSH/JS - Побайтовое сравнение двух файлов

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


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

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


Всем добрый день. Задачка такова, необходимо побайтово сравнить два файла. Реализовать необходимо либо в VBS-е, либо в JS. Т.к. я новичок в этом деле, может кто сможет помочь с кодом, буду очень признателен.

Отправлено: 09:55, 08-06-2010

 

Googler


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

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


korenza, что нужно получить в результате?... список различий или только True/False?

Отправлено: 09:26, 10-06-2010 | #2



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

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


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


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

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


amel27, Добрый день, пока ждал подсказки, наваял на JS, вот такого плана
Код: Выделить весь код
CompareFiles()  
function CompareFiles()
{ 	  		
var Stream = new ActiveXObject("ADODB.Stream"), 
FSO = WScript.CreateObject("Scripting.FileSystemObject"), 			
Args = WScript.Arguments; 			
if (Args.Length == 0) 				
WScript.echo("Запущен скрипт без указания аргументов командной строки"); 			
else if(Args.Length != 2) 				
WScript.echo("Количество аргументов командной строки должно быть равно 2"); 			
else 		
var fso = new ActiveXObject("Scripting.FileSystemObject"), 			
filesPath = Args.Item(0), 			
filesPath1 = Args.Item(1); 			
if(!fso.FileExists(filesPath)) 		
{ 			
WScript.echo("Файла для сравнения'" +Args.Item(0)+ "'  нет на диске") 			
return; 		} 			
else if(!fso.FileExists(filesPath1)) 		 		
{ 			
WScript.echo("Файла для сравнения '" +Args.Item(1)+ "'  нет на диске") 			
return; 		
} 			
{ 			
WScript.echo("Начинаю проверку файлов на идентичность"); 				
Stream.Type = 2; 		
Stream.Open(); 				
Stream.LoadFromFile(FSO.GetAbsolutePathName(Args(0))); 		
var File1 = Stream.ReadText(); 				
Stream.Close(); 			
Stream.Open(); 			
Stream.LoadFromFile(FSO.GetAbsolutePathName(Args(1))); 		
var File2 = Stream.ReadText(); 			
Stream.Close(); 	
if (File1 == File2) WScript.echo("Файлы идентичны"); 		
else WScript.echo("Файлы неидентичны");		 			
} }
Теперь возник один маленький вопрос.
Сейчас, если в качестве первого аргумента введен несуществующий файл, то в консоли выдается сообщение, что файла +Args.Item(0)+ нет на диске, если же введен в качестве второго аргумента несуществующий файл, то выдается сообщение, что файла +Args.Item(0)+ нет. Как бы сделать так, чтобы выводилось сообщение об отсутствии либо 2-х файлов сразу (если их действительно нет), либо первого, либо второго, в зависимости от заданных аргументов коммандной строки.

Отправлено: 11:49, 10-06-2010 | #3


Googler


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

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


korenza, на JS с VBS перестраиваться не буду, для проверки существования используйте метод FileExists объекта "Scripting.FileSystemObject" и свойство Args.Count для перебора параметров

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


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


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

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


amel27, Ок, без проблем, но если незатруднительно, можете скинуть код бинарного сравнения файлов на VBS, результат True/False, без лишних проверок?

Отправлено: 12:22, 10-06-2010 | #5


Googler


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

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


korenza, примерно так:
Код: Выделить весь код
Set oFSO = CreateObject("Scripting.FileSystemObject")

WScript.Echo FileCompare("C:\test1","C:\test2")

Function FileCompare(sFile1, sFile2)
  Dim oStream, buf1, buf2

  FileCompare = vbFalse
  If oFSO.FileExists(sFile1) And oFSO.FileExists(sFile2) Then
    Set oStream=WScript.CreateObject("ADODB.Stream")
    oStream.Open:oStream.Type=1
    oStream.LoadFromFile(sFile1):buf1 = oStream.Read
    oStream.LoadFromFile(sFile2):buf2 = oStream.Read
    oStream.Close

    If UBound(buf1)=UBound(buf2) Then
      buf1=CStr(buf1):buf2=CStr(buf2)
      If StrComp(buf1,buf2,0)=0 Then FileCompare=vbTrue:Exit Function
    End If
  End If
End Function

Отправлено: 14:05, 10-06-2010 | #6


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


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

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


amel27, Спасибо за код. Просто хочу научиться скриптить и на VBS. Только при сравнении файлов всегда возвращается -1, даже если они идентичны.?

Отправлено: 14:42, 10-06-2010 | #7


Googler


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

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


korenza, -1 это как раз совпадение, т.е. "истина" (vbTrue), 0 - "ложь" (vbFalse)

Отправлено: 16:15, 10-06-2010 | #8


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


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

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


Когда файлы различны, тоже выдает -1

Отправлено: 16:25, 10-06-2010 | #9


Googler


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

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


korenza, гм... странно, у меня вроде правильно выдает... по сути это вариация на тему вашего же поста #3
попробуйте другим способом:

Код: Выделить весь код
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oF1 = FSO.GetFile("test1")
Set oF2 = FSO.GetFile("test2")

WScript.Echo FileCompare(oF1, oF2)

Function FileCompare(oF1, oF2)
  Dim oS:FileCompare = vbTrue

  If oF1.Size <> oF2.Size Then
    FileCompare = vbFalse
    Exit Function
  End If

  Set oS = oF2.OpenAsTextStream(1,0)
  With oF1.OpenAsTextStream(1,0)
    While Not .AtEndOfStream
      If .Read(1)<>oS.Read(1) Then
        FileCompare = vbFalse
        Exit Function
      End If
    Wend
  End With
End Function

Отправлено: 06:43, 11-06-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Побайтовое сравнение двух файлов

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Сравнение двух файлов>ветвление "fc" или "diff" dARKest Скриптовые языки администрирования Windows 4 06-07-2009 23:02
Сравнение производительности двух ОС Dabaduch Хочу все знать 3 13-06-2009 19:27
Сравнение двух процов Rozmen Хочу все знать 4 03-08-2008 12:35
сравнение двух ноутбучных видеокарт X1700 и x2500 Sparkster Видеокарты 1 14-03-2008 13:07
сравнение двух массивов строк в Си bool Программирование и базы данных 5 04-05-2005 17:04




 
Переход