Скрипт показывает, какие строки были удалены и/или добавлены со времени последней проверки.
При этом порядок строк и их расположение в исходных файлах неважны, дубликаты строк тоже не учитываются.
Если файл file2 отсутствует при первом запуске, он будет создан при подтверждении замены.
#NoEnv
file1 = c:\Windows\SYSTEM32\drivers\etc\hosts
file2 = %A_ScriptDir%\hosts.old
Loop 2 {
Iter := A_Index, Arr%Iter% := []
Loop, Read, % file%Iter%
Arr%Iter%.Insert(A_LoopReadLine, "")
}
for Key in Arr1
Str_add .= Arr2.HasKey(Key) ? "" : Key . "`n"
for Key in Arr2
Str_del .= Arr1.HasKey(Key) ? "" : Key . "`n"
MsgBox % "Добавлено: `n_____________`n`n" . Str_Add . "`n`n"
. "Убрано: `n_____________`n`n" . Str_Del . "`n"
if (Str_Del || Str_Add) {
MsgBox,4,, Зафиксировать изменения ?`n`nФайл "%file2%" будет заменен`nфайлом "%file1%"
IfMsgBox Yes
{
FileCopy, %file1%, %file2%,1
if ErrorLevel
MsgBox Невозможно скопировать файл.
}
}
return
Если нужны номера строк с изменениями:
#NoEnv
file1 = c:\Windows\SYSTEM32\drivers\etc\hosts
file2 = %A_ScriptDir%\hosts.old
Loop 2 {
Iter := A_Index, Arr%Iter% := []
Loop, Read, % file%Iter%
Arr%Iter%.Insert(A_LoopReadLine, A_Index)
}
for Key, V in Arr1
Str_add .= Arr2.HasKey(Key) ? "" : "строка № " . V . " -> " . Key . "`n"
for Key, V in Arr2
Str_del .= Arr1.HasKey(Key) ? "" : "строка № " . V . " -> " . Key . "`n"
MsgBox % "Добавлено: `n_____________`n`n" . Str_Add . "`n`n"
. "Убрано: `n_____________`n`n" . Str_Del . "`n"
if (Str_Del || Str_Add) {
MsgBox,4,, Зафиксировать изменения ?`n`nФайл "%file2%" будет заменен`nфайлом "%file1%"
IfMsgBox Yes
{
FileCopy, %file1%, %file2%,1
if ErrorLevel
MsgBox Невозможно скопировать файл.
}
}
return