VBS Получить в переменную текущий каталог

Паразит

Активный пользователь
Сообщения
61
Реакции
2
Баллы
48
Привет. Я совсем недавно начал изучать VBScript, и пока дело идёт туговато.
Задача. Я запускаю в текущем каталоге скрипт. Теперь мне необходимо получить к моему запущенному сценарию полный путь, а также имя родительского каталога. В переменную.
Это мне нужно для того, чтобы я мог получать\управлять любыми объектами в текущем каталоге, просто по имени.


VB.NET:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("111")
MsgBox = Folder.Size
Не указывая при этом, никаких полных путей.
Ну так вот, как мне такое правильно организовать?

'Сначала мы создаём объект, правильно?
VB.NET:
Set FSO = CreateObject("Scripting.FileSystemObject")
'Дальше, мы получаем имя с полным путём до запущенного сценария, правильно?
VB.NET:
Set File = FSO.GetFile(WScript.ScriptFullName)
'Дальше, мы получаем имя родительского каталога, правильно?
VB.NET:
set Par = FSO.GetParentFolderName(WScript.ScriptFullName)
И вот тут, у меня не получается. Запускаю сценарий, и он выводит, что требуется объект
[string: "C:\Temp"]
Я работаю в папке "C:\Temp". Так что, путь родительского каталога он получает правильно.
Я вот думаю, может мне не хватает обратного слеша?
В конечном итоге, скрипт для получения размера папки "111" должен выглядить примерно так:

VB.NET:
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
Подскажите, плиз, где у меня ошибка, чего не хватает, и что исправить.
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,131
Реакции
5,904
Баллы
648
Здравствуйте Паразит ! Добро пожаловать на SafeZone !

требуется объект
[string: "C:\Temp"]
правильно пишет, т.к. оператор set ожидает увидеть справа от = объект. Строка - не объект. Просто уберите оператор set.

Чтобы получить доступ к файлам/папкам в текущем каталоге желательно (но не обязательно) прописывать полный путь.
Например, Ваш первый код вполне корректно будет работать, если рядом со скриптом есть папка "111", а рабочий каталог не был изменён.

Это неверно.
Msgbox - не переменная, а функция, принимающая несколько параметров. 1-й - обязательный, остальные - опциональные.

См. Взаимодействие с пользователем в VBA, функции MsgBox() и InputBox() - AskIt.RU
Перечень констант: MsgBox Function (Visual Basic) (это для VB.NET, но в VBS похоже)

Т.е. будет правильно:
Код:
MsgBox Folder.Size
или
Код:
ret = MsgBox (Folder.Size, vbYesNo)
если Вам нужно, например, построить диалог.
Возьмите удобный CHM-справочник. Называется "WHS и некоторые объекты OLE Automation".
Там по многим из объектов можно посмотреть описание параметров и констант.
 

Паразит

Активный пользователь
Сообщения
61
Реакции
2
Баллы
48
Dragokas, всё равно не получается.

Пробовал и так:

VB.NET:
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:
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

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,131
Реакции
5,904
Баллы
648
К сожалению ничего не могу сказать, пока не увижу полного задания.

Пробовал и так:
В первом коде непонятно, зачем Вы получаете значение в переменную Par, если все равно никак эту переменную дальше по коду не используете.

Во втором коде всё неправильно:
set Par = FSO.GetParentFolderName(WScript.ScriptFullName)
Folder = FSO.GetFolder("111")
Я же Вам уже говорил, что
Строка - не объект. Просто уберите оператор set.
В следующей строке наоборот - GetFolder возвращает объект Folder, а значит присваивание должно происходить с участием оператора set.
 

Паразит

Активный пользователь
Сообщения
61
Реакции
2
Баллы
48
Dragokas, спасибо. Вот теперь всё заработало, как надо.

VB.NET:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile(WScript.ScriptFullName)
FSO.GetParentFolderName(WScript.ScriptFullName)
Set Folder = FSO.GetFolder("111")
MsgBox Folder.Size
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,131
Реакции
5,904
Баллы
648
2 и 3-я строка лишние.

Если Вам хочется прописать полный путь к папке 111, которая находится в папке со скриптом, то делайте так:
VB.NET:
Set FSO = CreateObject("Scripting.FileSystemObject")
cur = FSO.GetParentFolderName(WScript.ScriptFullName)
Set Folder = FSO.GetFolder(cur & "\" & "111")
MsgBox Folder.Size
или так (что технически более верно):
VB.NET:
Set FSO = CreateObject("Scripting.FileSystemObject")
cur = FSO.GetParentFolderName(WScript.ScriptFullName)
Set Folder = FSO.GetFolder(FSO.BuildPath(cur, "111"))
MsgBox Folder.Size
 
Сверху Снизу