Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Нужна помощь в VBS(Сбор информации о файлах) (http://forum.oszone.net/showthread.php?t=214639)

MakeMeFeel 02-09-2011 13:19 1744693

Нужна помощь в VBS(Сбор информации о файлах)
 
Имеется корневая папка "photo", в которой содержится № кол-во папок, которое постоянно изменяется. В них содержится неизвестное кол-во файлов, которые постоянно добавляются и редактируются.
Задача №1. Написать скрипт, который создаст файл "info", в котором будет содержаться следующая информация: путь к файлу, размер, дата последнего изменения.
Задача №2. Написать скрипт, который проверит все файлы в корневой папке "photo", сравнит информацию о файле (размер, дата последнего изменения) c содержащимся в файле "info", и в случае появления различий или нового файла, запишет путь к изменившемуся/новому файлу в файл "foredit"

К сожалению в коде я не силен, а времени чтобы поднять знания для выполнения данной задачи нету. Буду благодарен за помощь.

MakeMeFeel 04-09-2011 19:14 1746067

ниукого нет никаких идей?

megaloman 05-09-2011 15:26 1746610

Код:

Public FSO, Finfo, RegMaska

AllDir = "C:\{Disk_F}\JS_Host"    ' ---------  Полное имя рабочего каталога (без слэжа \ на конце)
Info = "C:\kuku.info"
Maska= "^.*\.xls"

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Finfo = FSO.OpenTextFile(Info, 2, True)

Set RegMaska = New RegExp
RegMaska.Pattern = Maska
RegMaska.IgnoreCase = True

Call AllFiles(AllDir)
Finfo.Close

MsgBox "Скрипт завершился"

' ---------------------------------------------------------------------------
Sub AllFiles(WDir)

    Set Folds = FSO.GetFolder(WDir)
    Set SubF = Folds.SubFolders
    Set Files = Folds.Files
       
    For Each jF In Files
        If RegMaska.Test(jf) Then Finfo.WriteLine jF + " " + CStr(jF.DateLastModified) + " " + CStr(jF.Size)
    Next

    For Each Folder In SubF
        Call AllFiles(WDir + "\" + Folder.Name)
    Next

End Sub

Код:

Public FSO, Finfo, OldFiles, RegMaska

AllDir = "C:\{Disk_F}\JS_Host"                    ' ---------  Полное имя рабочего каталога (без слэжа \ на конце)
Info = "C:\kuku.info"
Edit = "C:\kuku.edit"
Maska= "^.*\.xls"

Set FSO = CreateObject("Scripting.FileSystemObject")

Set RegMaska = New RegExp
RegMaska.Pattern = Maska
RegMaska.IgnoreCase = True

Set Finfo = FSO.OpenTextFile(Info, 1, False)
OldFiles = Finfo.ReadAll
Finfo.Close

Set Finfo = FSO.OpenTextFile(Edit, 2, True)

Call AllFiles2(AllDir)
Finfo.Close

MsgBox "Скрипт завершился"

' ---------------------------------------------------------------------------
Sub AllFiles2(WDir)
   
    Set Folds = FSO.GetFolder(WDir)
    Set SubF = Folds.SubFolders
    Set Files = Folds.Files
       
    For Each jF In Files
        If RegMaska.Test(jf) Then
                InFile = jF + " " + CStr(jF.DateLastModified) + " " + CStr(jF.Size)
                If InStr(OldFiles, InFile) = 0 Then Finfo.WriteLine InFile
        End If
    Next

    For Each Folder In SubF
        Call AllFiles2(WDir + "\" + Folder.Name)
    Next

End Sub

Укажите в скриптах свои пути и нужную маску в регулярном выражении (сейчас там указаны файлы с расширением .xls)

MakeMeFeel 06-09-2011 12:09 1747226

cпасибо еще раз(:

MakeMeFeel 08-09-2011 17:03 1748909

мне жутко неудобно, но очень нужна помощь. Времени разобраться с vbs к сожаления не дают но требуют исправить скрипт.

info.txt - в нем содержиться имя файла, размер, дата последнего редактирования
foredit.txt - содержит путь к файлу
скрипт ищет только *.jpg файлы

Требуется чтобы в каждой папке, находящейся в корневом каталоге, содержался файл info.txt
Алгоритм должен работать следующим образом:
Проверяется наличие файла info.txt в текущей папке, если файл найден:
создается файл foredit.txt
происходит сравнение текущей информации о файлах с информацией содержащейся в файле "info.txt"
(имя, размер, дата последнего редактирования)
при нахождении различий:
в файл foredit записывается путь к измененному/новому файлу.
запускается внешняя программа со след. параметрами
"d:\nconvert.exe -overwrite -out jpeg -keepfiledate -i -opthuff -rtype lanczos -resize 1600 1200 -q 80 <путь к файлу foredit.txt>"
(программа выполняет все автоматически и сама закрывается)
Скрипт продалжает работу после завершения процесса предыдущей программы
В файл info.txt записывается обновленная информация
Файл foredit.txt удаляется
если различий нет, то скрипт переходит к след. папке


Если файл info.txt не найден:
Создается файл info.txt
Создается файл foredit.txt
В файл foredit.txt записывается путь ко всем файлам находящимся в данной папке
Запускается внешняя программа со след. параметрами:
"d:\nconvert.exe -overwrite -out jpeg -keepfiledate -i -opthuff -rtype lanczos -resize 1600 1200 -q 80 <путь к файлу foredit.txt>"
(программа выполняет все автоматически и сама закрывается)
Скрипт продалжает работу после завершения процесса предыдущей программы
В файл info.txt записывается информация о файлах
Файл foredit.txt удаляется.


Время: 20:02.

Время: 20:02.
© OSzone.net 2001-