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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Не удаётся передать параметр в Shell.Application (VBS) (http://forum.oszone.net/showthread.php?t=275074)

putinka 02-01-2014 17:37 2282133

Не удаётся передать параметр в Shell.Application (VBS)
 
Моё почтение участникам форума. Мне требуется ваша помощь в объяснении моей ошибки и того, как её устранить.
Часть моего скрипта:
читать дальше »
' Получаем доступ к ФС
set fso = CreateObject("Scripting.FileSystemObject")

' Эта штука нужна для работы с датой модификации файла
Set osa = CreateObject("Shell.Application")

' Каталог баз
set intFl = fso.GetFolder("d:\\test\\")

' Получим вчерашнюю дату и преобразуем её в нужный нам вид, чтобы получить
' независимый от настроек результат сравнения
ytday = now()-1
ytday = year(ytday) & "-" & month(ytday) & "-" & day(ytday)

set spFl = intFl.SubFolders ' Получаем список каталогов баз

For Each bs in spFl
' Получим доступ к каталогу из объекта Shell
set objFl = osa.NameSpace(bs)

' Найдём файл базы данных
bdFi = objFl.ParseName("1Cv8.1CD")

' Получим дату изменения файла базы данных в нужном виде для сравнения
dlmFl = year(bdFi.ModifyDate) & "-" & month(bdFi.ModifyDate) & "-" & day(bdFi.ModifyDate)

' Если дата изменения файла базы данных равна вчерашнему числу, то
' эту базу данных будем обрабатывать
If dlmFl=ytday Then
...........
End If

' А теперь надо вернуть дату модификации файла базы данных в исходное состояние
bdFi.ModifyDate = ytday
Next

На помеченную строку ругается интерпретатор: "Объектная переменная не задана". Я думаю, что он не воспринимает передачу переменной bs.

Iska 02-01-2014 18:54 2282174

Цитата:

Цитата putinka
Часть моего скрипта: »

Используйте тэг [code].

Цитата:

Код:

Set intFl = fso.GetFolder("d:\\test\\")

Это не JScript. Удваивать слэши ни к чему. Завершать им путь также ни к чему.

Цитата:

Код:

ytday = now()-1

Для получения разницы используется функция «DateAdd()».

Цитата:

Цитата putinka
На помеченную строку ругается интерпретатор: "Объектная переменная не задана". »

Где помеченная строка?

putinka 02-01-2014 19:42 2282203

Цитата:

Цитата Iska
Используйте тэг [code]. »

Код:

' Получаем доступ к ФС
set fso = CreateObject("Scripting.FileSystemObject")
 
' Эта штука нужна для работы с датой модификации файла
Set osa = CreateObject("Shell.Application")
 
' Каталог баз
set intFl = fso.GetFolder("d:\\test\\")
 
' Получим вчерашнюю дату и преобразуем её в нужный нам вид, чтобы получить 
' независимый от настроек результат сравнения
ytday = now()-1
ytday = year(ytday) & "-" & month(ytday) & "-" & day(ytday)
 
set spFl = intFl.SubFolders    ' Получаем список каталогов баз
 
For Each bs in spFl
    ' Получим доступ к каталогу из объекта Shell
set objFl = osa.NameSpace(bs)
 
    ' Найдём файл базы данных
    bdFi = objFl.ParseName("1Cv8.1CD")
 
    ' Получим дату изменения файла базы данных в нужном виде для сравнения
    dlmFl = year(bdFi.ModifyDate) & "-" & month(bdFi.ModifyDate) & "-" & day(bdFi.ModifyDate)
   
    ' Если дата изменения файла базы данных равна вчерашнему числу, то 
    ' эту базу данных будем обрабатывать
    If dlmFl=ytday Then
    ...........
    End If
 
    ' А теперь надо вернуть дату модификации файла базы данных в исходное состояние
    bdFi.ModifyDate = ytday
Next

Подозреваю, что в NameSpace() надо передавать текстовое значение, отсюда и куролесит мой скрипт.

Iska 02-01-2014 22:18 2282290

Пробуйте:
читать дальше »
Код:

Option Explicit

Dim strRootFolder
Dim strFileName

Dim dtPrevDate
Dim objFolder
Dim strFilePath

Dim objFolder2
Dim objFolderItem


strRootFolder = "d:\test"
strFileName  = "1Cv8.1CD"

With WScript.CreateObject("Scripting.FileSystemObject")
        If .FolderExists(strRootFolder) Then
                dtPrevDate = DateAdd("d", -1, Now())
               
                For Each objFolder In .GetFolder(strRootFolder).SubFolders
                        strFilePath = .BuildPath(objFolder.Path, strFileName)
                       
                        If .FileExists(strFilePath) Then
                                If DateDiff("d", .GetFile(strFilePath).DateLastModified, dtPrevDate) = 0 Then
                                        ' Здесь Ваша обработка
                                        MsgBox "Здесь Ваша обработка"
                                End If
                               
                                With WScript.CreateObject("Shell.Application")
                                        Set objFolder2 = .NameSpace(objFolder.Path)
                                       
                                        If Not objFolder2 Is Nothing Then
                                                Set objFolderItem = objFolder2.ParseName(strFileName)
                                               
                                                If Not objFolderItem Is Nothing Then
                                                        objFolderItem.ModifyDate = dtPrevDate
                                                Else
                                                        WScript.Echo "Can't determine file [" & strFileName & "] folder [" & objFolder.Path & "]."
                                                End If
                                        Else
                                                WScript.Echo "Can't determine folder [" & objFolder.Path & "]."
                                        End If
                                End With
                        End If
                Next
        Else
                WScript.Echo "Can't find folder [" & strRootFolder & "]."
        End If
End With

WScript.Quit 0



Время: 16:31.

Время: 16:31.
© OSzone.net 2001-