Выбор файла Vbs через диалоговое окно

Обновлено: 21.11.2024

Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован не так, как показано ниже. Для просмотра откройте файл в редакторе, который показывает скрытые символы Unicode. Подробнее о двунаправленных символах Юникода

Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован не так, как показано ниже. Для просмотра откройте файл в редакторе, который показывает скрытые символы Unicode. Подробнее о двунаправленных символах Юникода

'Обходит IE7+ c:\fakepath\file.txt проблема
Функция BrowseForFile()
With CreateObject( "WScript.Shell" )
Dim fso : Set fso = CreateObject( "Scripting.FileSystemObject" )
Dim tempFolder : Set tempFolder = fso .GetSpecialFolder( 2 )
Dim tempName : tempName = fso.GetTempName() & ".hta"
Dim path : path = "HKCU\Volatile Environment\MsgResp"
С tempFolder.CreateTextFile(tempName)
.Write " " & _
""
.Close
End With
.Run tempFolder & "\" & tempName, 1 , True
BrowseForFile = .RegRead(path)
.RegDelete path
fso.DeleteFile tempFolder & "\" & tempName
End With
End Function
MsgBox BrowseForFile
Функция BrowseForFile ()
Dim shell : Set shell = CreateObject( "Shell.Application" )
Dim file : Set file = shell.BrowseForFolder( 0 , "Выберите файл:", &H4000 , "C:\" )
BrowseForFile = file.self.Path
Завершить функцию
MsgBox BrowseForFile

Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован не так, как показано ниже. Для просмотра откройте файл в редакторе, который показывает скрытые символы Unicode. Подробнее о двунаправленных символах Юникода

Привет, сценарист! Можно ли каким-либо образом использовать сценарий, чтобы предоставить пользователю диалоговое окно и позволить ему или ей выбрать файл?

Предположим, мы хотим показать только текстовые файлы? Ну, в этом случае мы бы использовали этот фильтр:

Возможно, вы видите, как это работает: мы предоставляем описание типов файлов ( текстовые файлы ), добавляем «разделитель вертикальной черты» ( | ), а затем используем стандартный подстановочный знак для обозначения всех файлов .txt ( *.txt ). Хотите получить модные файлы и файлы show.txt по умолчанию, но затем дать людям возможность просматривать все файлы? Затем используйте этот код:

Попробуйте, и вы поймете, что мы имеем в виду.

Затем мы указываем папку по умолчанию. По умолчанию мы хотим, чтобы в диалоговом окне отображался файл в корневой папке диска C, поэтому мы устанавливаем свойство InitialDir следующим образом:

Хотите вместо этого показывать файлы в папке C:\Windows? Затем используйте этот код:

И не беспокойтесь: это настоящее диалоговое окно открытия файла, так что вы можете щелкнуть мышью и оказаться в любом месте. Тот факт, что вы начинаете в C:\Windows, не означает, что это единственная папка, в которой вы можете открывать файлы.

Наконец, мы отображаем диалоговое окно, используя эту строку кода:

Теперь мы просто сидим и ждем, пока пользователь выберет файл и нажмет "ОК" (или, как вариант, пока пользователь нажмет "Отмена"). Если пользователь нажимает Cancel , для переменной intResult будет установлено значение 0. В нашем скрипте мы проверяем значение intResult и, если оно равно 0, просто используем Wscript.Quit для завершения скрипта.

Но что, если пользователь на самом деле выбирает файл, а затем нажимает кнопку "ОК"? В этом случае для intResult будет установлено значение -1, а для свойства FileDialog будет задан путь к выбранному файлу. Наш скрипт просто выводит имя пути, что означает, что мы получим примерно такой вывод:

Излишне говорить, однако, что вы не ограничены простым повторением пути к файлу. Вместо этого вы можете использовать WMI, FileSystemObject или другую технологию для привязки к этому файлу и его удаления, копирования, сжатия, извлечения свойств файла или выполнения почти всего, что вы можете сделать с файлом.

Ну, во всяком случае, со скриптом.

Кстати, при таком подходе вы можете выбрать только один файл за раз; не удерживая клавишу Ctrl и не выделяя несколько файлов. Существует способ выбрать несколько файлов, по крайней мере, на компьютере с XP, но об этом мы поговорим в следующей статье.

Как быть в VBS Показать в скрипте «Диалоговое окно выбора файла» или «Диалоговое окно выбора каталога»

Set objDialog = CreateObject("UserAccounts.CommonDialog")

objDialog.Filter = "Все файлы|*.*"
objDialog.InitialDir = "C:\"
intResult = objDialog.ShowOpen

If intResult = 0 Then
Wscript.Quit
иначе Wscript.Echo objDialog.FileName
End If

objDialog.Filter = "Все файлы|*.*"

Если мы просто хотим отобразить текстовые файлы, что нам делать? ? в этих обстоятельствах мы будем использовать следующие фильтры:

objDialog.Filter = "Текстовые файлы|*.txt"

Возможно, вы сможете увидеть, как это работает: мы даем описание для типа файла (текстовые файлы), затем вставляем вертикальную черту-разделитель (|), наконец, стандартные подстановочные знаки используются для обозначения всех файлов .txt (* .текст). Вы хотите отобразить его по умолчанию в формате .txt? Затем дайте пользователю возможность просмотреть все файлы? Затем вы можете использовать следующий код:

objDialog.Filter = "Текстовые файлы|*.txt|Все файлы|*.*"

Попробуйте, вы поймете, что мы имеем в виду.

Затем указываем папку по умолчанию. По умолчанию мы хотим, чтобы диалоговое окно отображалось на диске C Files в корневой папке, поэтому мы настраиваем его следующим образом: атрибут «InitialDir»:

Хотите показать файлы C:\Windows в папке? Тогда вы можете использовать следующий код:

Не беспокойтесь: это настоящее диалоговое окно «Открытие файла», так что вы можете щелкнуть по желанию и остановить в любой момент. Вы из C:\Windows. Запуск не означает, что вы можете открывать файлы только в этой папке.

Наконец, давайте воспользуемся следующей строкой кода для отображения диалогового окна:

Сейчас? Нам просто нужно сесть. Подождать, пока пользователь выберет файл и нажать «определить» (или дождаться, пока пользователь нажмет «Отмена»). Если пользователь нажимает «Отмена», тогда для переменной intResult будет установлено значение 0. В нашем скрипте давайте проверим значение intResult. Если оно равно 0, нам просто нужно будет использовать Wscript.Quit, чтобы завершить этот скрипт.

Но если пользователь на самом деле выбирает файл и нажимает «определить», что же нам делать? ? в этих обстоятельствах для параметра intResult будет установлено значение -1, для свойства «FileDialog» будет установлено имя пути к выбранному файлу. Наш скрипт повторяет только пути. Это означает, что мы получим вывод, подобный следующему:

Излишне говорить, что вы не ограничены повторением путей к файлам. на самом деле, вы можете использовать WMI、FileSystemObject или какую-либо другую технологию для привязки файла, а затем удалить его、копировать、сжать или получить свойства файла и т. д. - вы можете делать с файлом почти все, что можете.

Используйте этот метод. За один раз можно выбрать только один файл. Вы не можете удерживать клавишу «Ctrl» для выбора нескольких файлов.

2. Выберите каталог, метод BrowseForFolder, это часть объекта оболочки Windows.

Константа WINDOW_HANDLE = 0
Константа OPTIONS = 0

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder _
(WINDOW_HANDLE, "Выберите папку:", OPTIONS, "C:\")

Если objFolder не имеет значения, то
Wscript.Quit
End If

Установите objFolderItem = objFolder.Self
objPath = objFolderItem.Path


Во-первых, мы определяем пару констант: WINDOW_HANDLE и OPTIONS.WINDOW_HANDLE. Константа представляет число, которое необходимо присвоить диалоговому окну для отображения идентификатора; Для скриптов это значение всегда должно быть 0. take OPTIONS Установите на 0 Указывает, что мы будем отображать очень простое диалоговое окно, которое ограничивает пользователя выбором только из списка папок. возможно , Мы можем OPTIONS Установить на &H10&. В этом случае наш диалог будет включать текстовую область, пользователи могут ввести здесь путь к папке.

После определения констант мы создали экземпляр объекта Shell.Application. Затем используйте следующий код для отображения диалогового окна «Обзор папок»:

Set objFolder = objShell.BrowseForFolder _
(WINDOW_HANDLE, "Выберите папку:", OPTIONS, "C:\")

Вы видите, мы просто вызываем метод BrowseForFolder, передаются четыре параметра:

WINDOW_HANDLE. Как мы показали, это номер, присвоенный идентификатору диалогового окна.

Текстовая строка Выберите папку: будет отображаться в виде описательного сообщения в диалоговом окне.

OPTIONS, константа, представляющая параметры, используемые для построения диалогового окна.

C:\, будет корневой папкой диалогового окна. Откроется диалоговое окно C:\, но оно не позволяет вам выбрать расположение файла в верхней части древовидного списка (например, вы не можете выбрать «Мой компьютер»). Если вы установите корневую папку C:\Scripts, только пользователь сможет выбрать папку C:\Scripts и все ее подпапки.

Код создаст диалоговое окно, подобное показанному на экране.

( У вас есть вопросы? Да, вы уже видели это диалоговое окно. многие приложения Windows используют тот же подход, тот же диалог.)

здесь наш скрипт приостанавливается, подождите, пока пользователь выберет папку, и нажмите OK, или нажмите Отмена. Когда пользователь выполнит одну из этих двух операций, диалоговое окно будет очищено, операция будет сохранена в объектной ссылке objFolder в .

Итак, как мы узнаем, выбрал ли пользователь папку и нажал «ОК» или просто нажал «Отмена»? Для решения этой проблемы используется следующий блок кода:

Если objFolder не имеет значения, то
Wscript.Quit
End If

Этот код проверяет наши ссылки на объекты (objFolder). Равен ли он реальному объекту (это ключевое слово, которое не используется). Если objFolder равен Nothing, это означает, что пользователь нажимает кнопку отмены; Если это так, мы просто используем его Wscript.Quit Exit script. Если objFolder It не равен Nothing, то objFolder It должен указывать на реальный объект; Таким образом, скрипт продолжит работу .

поскольку характеристики оболочки объекта необходимы следующие две строки кода:

Установите objFolderItem = objFolder.Self
objPath = objFolderItem.Path

Когда пользователь выбирает папку и нажимает "ОК", он получает экземпляр объекта в папке оболочки. Однако по какой-то причине вы не можете использовать объект Shell Folder; Если мы хотим получить путь к выбранной папке, мы должны использовать его объект FolderItem вместо. (Почему это так? Мы не знаем.) Следовательно, наша первая строка кода использует метод Self, возвращающий объект FolderItem, Объект работает с нашей Папкой. Объекты одинаковые. Здесь будет вторая строка кода FolderItem Путь к объекту хранится в переменной objPath в . Выглядит немного неуклюже, но работает.

Наконец, мы повторяем путь к выбранной папке. Теперь, когда работа завершена.

Как мы показали, диалоговое окно примера использует C:\ в качестве корневой папки. Вам не разрешено выбирать папку, расположенную в другом месте на вашем компьютере. Иногда это хорошо; Это заставляет пользователя выбирать из определенного набора папок. Но иногда требуется, чтобы пользователи могли выбирать папку в любом месте файловой системы. Это возможно? ?

Конечно. . Мы не будем вдаваться в детали этого модифицированного скрипта, но скрипт «Мой компьютер» будет установлен в корневую папку:

Константа MY_COMPUTER = &H11&
Константа WINDOW_HANDLE = 0
Константа OPTIONS = 0

Спасибо. Мы получили ваш запрос и незамедлительно ответим.

Присоединяйтесь к нам!

  • Общаться с другими участниками
  • Уведомления об ответах
    на ваши сообщения
  • Поиск по ключевым словам
  • Доступ в один клик к вашим
    любимым форумам
  • Автоматические подписи
    на ваших сообщениях
  • Лучше всего то, что это бесплатно!

*Функции Tek-Tips зависят от того, получают ли участники электронную почту. Присоединяясь, вы соглашаетесь на получение электронной почты.

Правила публикации

Реклама, продажа, рекрутинг, размещение курсовых и дипломных работ запрещено.

необходимо открыть диалоговое окно файла, выбрать файл (текстовый файл) и отобразить содержимое.

необходимо открыть диалоговое окно файла, выбрать файл (текстовый файл) и отобразить содержимое.

привет.
У меня есть приложение hta/vbs, которое отображает экран. попросите пользователя нажать кнопку «Пуск», и он должен представить диалоговое окно файла в определенной папке. пользователь выберет файл, нажмет кнопку ОК в диалоговом окне, и он отобразит содержимое файла.
вот что я нашел в tek-tips vbs:

но это просто открывает диалоговое окно, выбирает файл, и когда я нажимаю кнопку "ОК", возникает ошибка.
спасибо.

спасибо, гитарзан.
мое приложение - hta/vbs
диалоговое окно с файлом открывается нормально.
когда я нажимаю на имя файла, ничего не происходит.
Мне нравится, когда файл открывается и показывает содержимое, которое является текстовым файлом.
спасибо.

В образце, на который я ссылался, переменная "file" будет содержать полный путь к выбранному файлу. Вы должны сделать что-то подобное, чтобы открыть файл в Блокноте

Guitarzan,
Я использовал код, который вы разместили в конце другого.
переменная "файл" имеет нулевое значение - я отобразил ее перед блокнотом, это нулевое значение.
блокнот открывается пустым.

Отправлено предупреждение

Благодарим вас за помощь в защите форумов Tek-Tips от неприемлемых сообщений.
Персонал Tek-Tips проверит это и примет соответствующие меры.

Ответить в этой теме

Размещение сообщений на форумах Tek-Tips доступно только для участников.

Нажмите здесь, чтобы присоединиться к Tek-Tips и пообщаться с другими участниками! Уже участник? Войти

Читайте также: