'==================================================================== ' AJPapps - ScanDisk ' Линда Кайе 2011. Посвящается Ариэль ' ' Этот скрипт предназначен для параноиков вроде меня, привыкших что ' ScanDisk в Win9x спрашивает по любому поводу разрешения на ' продолжение. Да-да, CHKDSK в Windows NT решает теже проблемы, но ' никогда ни чего не спрашивает. В итоге он может вынести кучу папок ' из-за единственной ошибки, и вам ни чего не скажет. Как узнать о ' таких трагедиях? Сравнить состояние диска до и после проверки! Для ' этого я написала маленький BAT файл, а потом переделала в этот ' скрипт, чтобы немного облегчить работу с FAT32 томами... ' ' ВНИМАНИЕ! Скрипт сравнивает файлы со списками при помощи ' WinMerge. Другие программы не поддерживаются, но Вы можете сами ' модифицировать код в функции CreateBATFile(). Если Вы всёже ' используете WinMerge, то в константе WIN_MERGE_DIR нужно указать ' полное имя файла программы. В моём случае указана заглушка ' портабельной версии. ' ' Скачать WinMerge можно отсюда: ' http://winmerge.org ' ' ВНИМАНИЕ! Скрипт запустится и в Win9x, но работать там он будет ' неправильно. Используйте вместо него программу ScanDisk. ' ' • 6.09.2009 ' Первая версия ^^ ' ' • 16.10.2009 ' [+] Теперь программа просто создаёт BAT файл и запускает его. ' Таким образом пользователь не конфузится пропадающими окнами ' и непонятными действиями программы. ' [+] Косметические изменения. ' ' • 10.03.2011 ' [+] Теперь проверяется код возврата CHKDSK, и, если программа не ' делала ничего (ошибок не было), то сравнения списков файлов ' не происходит. ' [+] Теперь после завершения CHKDSK программа сначала создаёт ' список файлов, а потом уже ждёт. ' '==================================================================== ' Маленький копирайт ' ' 1. Программа и исходный код распространяются бесплатно. ' 2. Вы имеете право распространять их на тех же условиях. ' 3. Вы не имеете права использовать имя автора после модификации ' исходного кода. ' 4. При этом желательно указывать ссылку на автора оригинальной ' версии исходного кода. ' 5. Вы не имеете права на платное распространение исходного кода, ' а также программных модулей, содержащих данный исходнй код. ' 6. Программа и исходный код распространяются как есть. Автор не ' несёт ответственности за любые трагедии или несчастные случаи, ' вызванные использованием программы и исходного кода. ' 7. Для любого пункта данного соглашения может быть сделано ' исключение с разрешения автора программы. ' 8. По любым вопросам, связанным с данной программой, обращайтесь ' по адресу lindaoneesama@gmail.com ' ' Загружено с http://purl.oclc.org/Linda_Kaioh/Homepage/ '==================================================================== Option Explicit Const AppTitle = "AJPapps - ScanDisk" Const TemporaryFolder = 2 Const SW_SHOWDEFAULT = 10 Const SW_HIDE = 0 ' Модифицруйте эту константу чтобы указать расположение WinMerge. Const WIN_MERGE_DIR = "I:\Utils\WinMergePortable\WinMergePortable.exe" Dim FSO Dim TempPath Dim BATFileName Dim List1 Dim List2 Dim SourceDrive Set FSO = CreateObject("Scripting.FileSystemObject") ' Проверяем, существует ли вообще WinMerge VerifyWinMergeFile ' Получаем аргументы... GetAndParseArguments ' Получаем имена файлов для BAT списков... TempPath = FSO.GetSpecialFolder(TemporaryFolder) BATFileName = FSO.BuildPath(TempPath, "{5706308C-56B5-4DA8-B8DD-E7BF0AC587C9}.BAT") List1 = FSO.BuildPath(TempPath, "{8702d814-5dc8-4212-9aff-79b879af1406}.TXT") List2 = FSO.BuildPath(TempPath, "{169e5285-c362-47d5-b9ea-d36dfbe5ab74}.TXT") ' А теперь создём BAT файл... If CreateBATFile(SourceDrive, BATFileName, List1, List2) Then RunBATFile BATFileName End If '==================================================================== Private Sub VerifyWinMergeFile() If Not FSO.FileExists(WIN_MERGE_DIR) Then MsgBox WIN_MERGE_DIR & vbCrLf & vbCrLf & _ "Файл не найден, так что сравнивать результаты будет " & _ "нечем. Сходите на указанный ниже адрес, скачайте " & _ "программу WinMerge и поправьте константу WIN_MERGE_DIR " & _ "так, чтобы её значением было полное имя файла программы." & _ vbCrLf & vbCrLf & _ "http://winmerge.org", vbCritical, AppTitle WScript.Quit End If End Sub '==================================================================== Private Sub GetAndParseArguments() If WScript.Arguments.Count <> 1 Then ShowUsage SourceDrive = WScript.Arguments(0) SourceDrive = Trim(SourceDrive) SourceDrive = UCase(SourceDrive) If Len(SourceDrive) <> 2 Then ShowUsage If Right(SourceDrive, 1) <> ":" Then ShowUsage If InStr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", Left(SourceDrive, 1)) = 0 Then ShowUsage End Sub '==================================================================== Private Sub ShowUsage() MsgBox "Использование:" & vbCrLf & vbCrLf & _ "ScanDisk.VBS Volume:" & vbCrLf & vbCrLf & _ "Проверить диск (Volume) на ошибки и сравнить содержимое " & _ "до проверки с содержимым после проверки.", _ vbInformation, AppTitle ' Здесь всё закончится. WScript.Quit End Sub '==================================================================== Private Function CreateBATFile(ByVal SourceDrive, _ ByVal BATFileName, _ ByVal List1, _ ByVal List2) Dim TS On Error Resume Next Set TS = FSO.CreateTextFile(BATFileName, True, False) ' Предупреждение... TS.WriteLine "@ECHO *********************************************************************" TS.WriteLine "@ECHO * *" TS.WriteLine "@ECHO * ‚Ќ€ЊЂЌ€…! ЌҐ § Єалў ©вҐ нв® ®Є­® - ®­® § Єа®Ґвбп б ¬®бв®п⥫쭮 *" TS.WriteLine "@ECHO * Ї®б«Ґ § ўҐа襭Ёп Їа®жҐбб  Їа®ўҐаЄЁ ¤ЁбЄ ! *" TS.WriteLine "@ECHO * *" TS.WriteLine "@ECHO *********************************************************************" TS.WriteLine "@ECHO." ' Создаём первый список... TS.WriteLine "DIR /S /A " & SourceDrive & "\*.* > """ & List1 & """" ' Стартуем CHKDSK... If UCase(FSO.GetDrive(SourceDrive).FileSystem) = "NTFS" Then TS.WriteLine "CMD /C CHKDSK /V /F " & SourceDrive Else TS.WriteLine "CMD /C CHKDSK /F " & SourceDrive End If ' Если выполнение завершилось вообще без каких-либо действий CHKDSK ' (код возврата 0), то и сравнивать нечего... TS.WriteLine "IF ""%ERRORLEVEL%""==""0"" (" TS.WriteLine "@ECHO ЋиЁЎ®Є ­Ґ ®Ў­ а㦥­®, ба ў­Ґ­ЁҐ Їа®Ё§ўҐ¤Ґ­® ­Ґ Ўг¤Ґв..." TS.WriteLine "PAUSE" TS.WriteLine ") ELSE (" ' Создаём второй список... TS.WriteLine "DIR /S /A " & SourceDrive & "\*.* > """ & List2 & """" ' Пауза чтобы пользователь посмотрел результаты... TS.WriteLine "PAUSE" ' А теперь стартуем WinMerge... ' Если вы хотите использовать свою программу - модифицируйте эту ' строку! TS.WriteLine """" & WIN_MERGE_DIR & """ """ & List1 & """ """ & List2 & """" TS.WriteLine ")" TS.Close Set TS = Nothing If Err Then ErrorDisplay BATFileName & vbCrLf & vbCrLf & _ "Не удалось создать BAT файл." CreateBATFile = False Else CreateBATFile = True End If End Function '==================================================================== Private Sub RunBATFile(ByVal BATFileName) Dim SH Set SH = WScript.CreateObject("WScript.Shell") On Error Resume Next SH.Run BATFileName, SW_SHOWDEFAULT, True If Err Then ErrorDisplay BATFileName & vbCrLf & vbCrLf & _ "Не удалось запустить BAT файл." End Sub '==================================================================== Private Sub ErrorDisplay(ByVal Text) MsgBox Text, vbCritical, AppTitle End Sub