VBS/WSH/JS - Побайтовое сравнение двух файлов

Аватара пользователя
korenza

Re: VBS/WSH/JS - Побайтовое сравнение двух файлов

Сообщение korenza »

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
Аватара пользователя
korenza

Re: VBS/WSH/JS - Побайтовое сравнение двух файлов

Сообщение korenza »

Теперь, только "0" выдает, в любом случае, если одинаковые и если разные.!?



Загадочный скрипт, теперь Ваш первый выдает всегда "0", если файлы одинаковые и если разные.?
Аватара пользователя
korenza

Re: VBS/WSH/JS - Побайтовое сравнение двух файлов

Сообщение korenza »

Цитата korenza:



только "0" выдает, в любом случае
VBS/WSH/JS - Побайтовое сравнение двух файлов




это уже подозрительно, даже в таком варианте?..



Код:

Код: Выделить всё

Set FSO = CreateObject("Scripting.FileSystemObject")
Set oF1 = FSO.GetFile(Wscript.ScriptFullName)
Set oF2 = FSO.GetFile(Wscript.ScriptFullName)
WScript.Echo FileCompare(oF1, oF2)


Цитата korenza:



Загадочный скрипт
VBS/WSH/JS - Побайтовое сравнение двух файлов




ничего загадочного - обычное чтение в переменную с последующим сравнением
Аватара пользователя
qwerty_332

Re: VBS/WSH/JS - Побайтовое сравнение двух файлов

Сообщение qwerty_332 »

Немного модифицировал ваш скрипт для своих нужд. А именно если файлы разные то выполняется действие по запуску батника и записи в лог. Если файлы одинаковые то ничего не запускается. Я пока нуб в vbs, только пытаюсь организовать автоматизацию в своей работе. Поэтому пришлось немного посидеть поразбираться в функциях и синтаксисе.

Вообщем вот мой переделанный вариант:





Код:

Код: Выделить всё

Set FSO = CreateObject("Scripting.FileSystemObject")
Set oF1 = FSO.GetFile("C:\Users\admin\Desktop\VBS\program_new.exe")
Set oF2 = FSO.GetFile("C:\Users\admin\Desktop\VBS\program_old.exe")
WScript.Echo FileCompare(oF1, oF2)
Function FileCompare(oF1, oF2)
  Dim oS, iZ1, iZ2, sF1, sF2
  iZ1=oF1.Size:iZ2=oF2.Size
  FileCompare=True
  If iZ1iZ2 Then 'Exit Function
  Set oS=oF1.OpenAsTextStream(1,0)
  sF1 = oS.Read(iZ1)
  Set oS=oF2.OpenAsTextStream(1,0)
  sF2 = oS.Read(iZ2)
  'If StrComp(sF1,sF2,0)=0 Then FileCompare=False
  	Set shell=createobject("wscript.shell")
	shell.run "C:\Users\admin\Desktop\VBS\Run.bat"
	Set shell=Nothing
	Set objFS = CreateObject("Scripting.FileSystemObject")
	Set objFile = objFS.OpenTextFile("C:\Users\admin\Desktop\VBS\script_log.log", 8, True)
	objFile.WriteLine "Install promt time: " & date & " " & time
	objFile.Close
	Set objFile = Nothing
	Set objFS = Nothing
  End If
 End Function

Замутил себе скрипт по загрузке инстала программы и его последующего сравнения. Если загруженная версия отличается от той которая уже есть то стартует батник по обновлению ПО на компах в сети.

Этот пример очень помог в реализации "мега-проекта" Изображение



Нужно убрать в строке If iZ1iZ2 Then Exit Function непосредственно выход из функции "Exit Function", таким образом проверка идет дальше.

Также можно убрать строку If StrComp(sF1,sF2,0)=0 Then FileCompare=False чтобы не перезаписывалась переменная FileCompare. Я пока не понял зачем она нужна.
Аватара пользователя
Serguei Kouzmine

Re: VBS/WSH/JS - Побайтовое сравнение двух файлов

Сообщение Serguei Kouzmine »

можеты быть просто вызывать





Код:

Код: Выделить всё

c:\Windows\System32\fc.exe /?
Compares two files or sets of files and displays the differences between
them
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/u] [/W] [/nnnn]
   [drive1:][path1]filename1 [drive2:][path2]filename2
FC /B [drive1:][path1]filename1 [drive2:][path2]filename2
  /A         Displays only first and last lines for each set of differences.
  /B         Performs a binary comparison.
  /C         Disregards the case of letters.
  /L         Compares files as ASCII text.
  /LBn       Sets the maximum consecutive mismatches to the specified
             number of lines.
  /N         Displays the line numbers on an ASCII comparison.
  /OFF[LINE] Do not skip files with offline attribute set.
  /T         Does not expand tabs to spaces.
  /U         Compare files as UNICODE text files.
  /W         Compresses white space (tabs and spaces) for comparison.
  /nnnn      Specifies the number of consecutive lines that must match
             after a mismatch.
  [drive1:][path1]filename1
             Specifies the first file or set of files to compare.
  [drive2:][path2]filename2
             Specifies the second file or set of files to compare.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»