1

Тема: VBS: не получается логическое И

Вроде простой вопрос, но что-то не получается. Хочу написать условие "если файл существует и файл1 больше файл2" то....... вот написал

     If objFSO.FileExists(FilePath) And (File1.Size > File2.Size) Then

почему-то работает только условие "если файл существует". Подскажите где ошибка.

2

Re: VBS: не получается логическое И

Если не работает, значит, ошибка в предшествующей части кода (File1/File2 и т.д.).

3

Re: VBS: не получается логическое И

griha09, покажите весь значимый код.

4 (изменено: griha09, 2013-01-21 21:19:43)

Re: VBS: не получается логическое И


'сортировка файлов по исходным папкам
' если в папке output есть этот файл и он больше копируемого

Option Explicit
Const SrcFolderPath = "D:\output\"    'куда копируем где исходные файлы
Const ResFolderPath = "D:\input\"   'откуда копируем где обработанные файлы
 
Dim objFSO, TextStream, Folder, SubFolder, File, FilePath, FileSize2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set TextStream = objFSO.OpenTextFile("log.txt",8,True)
 
TextStream.WriteLine "----- " & Now & " -----"
 
RecursiveFolderScan SrcFolderPath
 
MsgBox "Обработка завершена",vbInformation
 
'Создаём процедуру рекурсивного обхода каталога
Sub RecursiveFolderScan(FolderPath)
    'Получаем объектную модель текущего каталога
    Set Folder = objFSO.GetFolder(FolderPath)
 
    'Перебираем все файлы в текущем каталоге
    For Each File in Folder.Files
        'Проверяем существование аналогичного файла в результирующем каталоге
        FilePath = objFSO.BuildPath(ResFolderPath,File.Name)
        FileSize2 = objFSO.BuildPath(ResFolderPath,File.Size)
If objFSO.FileExists(FilePath) And (FileSize2 > File.Size) Then ' если в папке output есть этот файл и он больше копируемого
            'Если он существует, то производим замену
            objFSO.CopyFile FilePath, objFSO.BuildPath(Folder.Path,"\")
            AppendToLog "файл """ & File.Name & """ скопирован в """ & Folder.Path & """."
            objFSO.DeleteFile FilePath 
        End if
    Next
 
    'Перебираем все подкаталоги в каталоге
    For Each SubFolder in Folder.SubFolders
        RecursiveFolderScan(SubFolder.Path)
    Next
End Sub
 
Sub AppendToLog(Text)
    TextStream.WriteLine Time & ":" & Text
End Sub

5

Re: VBS: не получается логическое И

Поменять
FileSize2 = objFSO.BuildPath(ResFolderPath,File.Size)
на
FileSize2 = objFSO.GetFile(FilePath).Size

6

Re: VBS: не получается логическое И

чето стала выскакивать такая ошибка:
---------------------------
Windows Script Host
---------------------------
Сценарий:сортировка2.vbs
Строка: 27
Символ: 9
Ошибка: Файл не найден
Код: 800A0035
Источник: Ошибка выполнения Microsoft VBScript

---------------------------
ОК   
---------------------------

7

Re: VBS: не получается логическое И

Естественно! Как я понимаю 27-я строка это FileSize2 = objFSO.GetFile(FilePath).Size. Ты пытаешься узнать размер файла, даже не проверив его существование. А только следующей строкой If objFSO.FileExists(FilePath) And ... проверяешь его существование. Рекомендую поменять их последовательность местами.

Стремление - залог успеха

8

Re: VBS: не получается логическое И

Спасибо за подсказки, все получилось.