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

Тема в разделе "Visual Basic 6 / Сценарии VBScript, JScript", создана пользователем Паразит, 20 сен 2016.

  1. Паразит
    Оффлайн

    Паразит Новый пользователь

    Сообщения:
    33
    Симпатии:
    1
    Привет. Я совсем недавно начал изучать 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
    Подскажите, плиз, где у меня ошибка, чего не хватает, и что исправить.
     
    Последнее редактирование: 20 сен 2016
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.473
    Симпатии:
    4.304
    Здравствуйте Паразит ! Добро пожаловать на SafeZone !

    правильно пишет, т.к. оператор set ожидает увидеть справа от = объект. Строка - не объект. Просто уберите оператор set.

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

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

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

    Т.е. будет правильно:
    Код (Text):

    MsgBox Folder.Size
     
    или
    Код (Text):

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

    Паразит Новый пользователь

    Сообщения:
    33
    Симпатии:
    1
    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
     
    Как будет выглядить окончательный правильный вариант?
     
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.473
    Симпатии:
    4.304
    К сожалению ничего не могу сказать, пока не увижу полного задания.

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

    Во втором коде всё неправильно:
    Я же Вам уже говорил, что
    В следующей строке наоборот - GetFolder возвращает объект Folder, а значит присваивание должно происходить с участием оператора set.
     
    Паразит нравится это.
  5. Паразит
    Оффлайн

    Паразит Новый пользователь

    Сообщения:
    33
    Симпатии:
    1
    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
     
  6. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.473
    Симпатии:
    4.304
    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
     
     
    Паразит и NickM нравится это.

Поделиться этой страницей