Привет. Я совсем недавно начал изучать VBScript, и пока дело идёт туговато.
Задача. Я запускаю в текущем каталоге скрипт. Теперь мне необходимо получить к моему запущенному сценарию полный путь, а также имя родительского каталога. В переменную.
Это мне нужно для того, чтобы я мог получать\управлять любыми объектами в текущем каталоге, просто по имени.
VB.NET / VBA:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("111")
MsgBox = Folder.Size
Не указывая при этом, никаких полных путей.
Ну так вот, как мне такое правильно организовать?
'Сначала мы создаём объект, правильно?
VB.NET / VBA:
Set FSO = CreateObject("Scripting.FileSystemObject")
'Дальше, мы получаем имя с полным путём до запущенного сценария, правильно?
VB.NET / VBA:
Set File = FSO.GetFile(WScript.ScriptFullName)
'Дальше, мы получаем имя родительского каталога, правильно?
VB.NET / VBA:
set Par = FSO.GetParentFolderName(WScript.ScriptFullName)
И вот тут, у меня не получается. Запускаю сценарий, и он выводит, что требуется объект [string: "C:\Temp"]
Я работаю в папке "C:\Temp". Так что, путь родительского каталога он получает правильно.
Я вот думаю, может мне не хватает обратного слеша?
В конечном итоге, скрипт для получения размера папки "111" должен выглядить примерно так:
VB.NET / VBA:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile(WScript.ScriptFullName)
set Par = FSO.GetParentFolderName(WScript.ScriptFullName)
Set Folder = FSO.GetFolder("111")
MsgBox = Folder.Size
Подскажите, плиз, где у меня ошибка, чего не хватает, и что исправить.
правильно пишет, т.к. оператор set ожидает увидеть справа от = объект. Строка - не объект. Просто уберите оператор set.
Чтобы получить доступ к файлам/папкам в текущем каталоге желательно (но не обязательно) прописывать полный путь.
Например, Ваш первый код вполне корректно будет работать, если рядом со скриптом есть папка "111", а рабочий каталог не был изменён.
если Вам нужно, например, построить диалог. Возьмите удобный CHM-справочник. Называется "WHS и некоторые объекты OLE Automation".
Там по многим из объектов можно посмотреть описание параметров и констант.
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile(WScript.ScriptFullName)
Par = FSO.GetParentFolderName(WScript.ScriptFullName)
Set Folder = FSO.GetFolder("111")
MsgBox Folder.Size
И так:
VB.NET / VBA:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile(WScript.ScriptFullName)
set Par = FSO.GetParentFolderName(WScript.ScriptFullName)
Folder = FSO.GetFolder("111")
MsgBox Folder.Size
Как будет выглядить окончательный правильный вариант?
Dragokas, спасибо. Вот теперь всё заработало, как надо.
VB.NET / VBA:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile(WScript.ScriptFullName)
FSO.GetParentFolderName(WScript.ScriptFullName)
Set Folder = FSO.GetFolder("111")
MsgBox Folder.Size
Если Вам хочется прописать полный путь к папке 111, которая находится в папке со скриптом, то делайте так:
VB.NET / VBA:
Set FSO = CreateObject("Scripting.FileSystemObject")
cur = FSO.GetParentFolderName(WScript.ScriptFullName)
Set Folder = FSO.GetFolder(cur & "\" & "111")
MsgBox Folder.Size
или так (что технически более верно):
VB.NET / VBA:
Set FSO = CreateObject("Scripting.FileSystemObject")
cur = FSO.GetParentFolderName(WScript.ScriptFullName)
Set Folder = FSO.GetFolder(FSO.BuildPath(cur, "111"))
MsgBox Folder.Size