Работая с файловой системой Windows часто приходится выполнять различные действия с файлами, например, как переместить файл, как скопировать файлы и папки и так далее. Всё это легко реализовать вручную, но, можно прибегнуть и к программированию…
В этой статье мы рассмотрим методы объекта FileSystemObject, которые показывают, как программным путём с помощью сценариев Windows Script Host переместить файлы в указанное место, получить полный путь из относительного пути, путь к родительскому каталогу или имя диска, на котором находится заданный каталог.
Хорошо, прежде чем приступать к программированию и описанию методов, давайте вспомним, как переместить файл рядовым методом в операционной системе Windows. Что бы переместить файл из одной папки в другую, нужно просто зажать клавишу "Shift» и переместить нужный файл, или папку с файлами в другое место (на другой диск или в другой каталог). Тут, как говорится, элементарно. Теперь давайте рассмотрим наши методы объекта FileSystemObject, который отвечает за работу с файловой системой Windows.
Следующие три методы в качестве параметра (parthspec) принимают относительный путь к каталогу или диску:
GetAbsolutePathName(parthspec) – Возвращает полный путь.
Допустим, мы запускаем наш сценарий из папки D:WorkMy_Script. Давайте посмотрим, что вернёт метод при разных переданных значениях.
- Параметр pathspec – Возвращаемое значение
- «d:» — «d:workMy_Script»
- «d:..» — «d:work»
- «d:\» — «d:»
- «d:*.*folder_1» — «d:workMy_Script*.*folder_1»
- «folder_2» — «d:workMy_Scriptfolder_2»
- «d:….work» — «d:work»
GetParentFolderName(parthspec) – Возвращает путь к родительскому каталогу. Если переданный параметр не содержит родительского каталога (мы передали имя диска), то метод вернёт пустую строку.
GetDriveName(parthspec) – Возвращает имя диска. Если не удастся определить имя диска, то метод вернёт пустую строку.
Следующий метод показывает, как переместить файл или несколько файлов.
MoveFile(source, destination) – Как видим, нам нужно передать два параметра, первый параметр содержит строку, которая хранит полный путь к файлу, который надо переместить. Мы можем использовать подстановочные знаки, например, "?" – любой один символ или "*" – любое количество символов. Используя подстановочные знаки, мы можем переместить сразу нескольких файлов. Второй параметр destination также содержит путь к каталогу, в который нужно переместить файлы.
Как видим, ничего сложного нет, теперь приступим к программированию, сначала напишем сценарий на языке vbscript, после него я дам пояснения, а уже потом рассмотрим аналогичный скрипт, но уже на языке jscript.
'*********************************************************************************** ' Объект FileSystemObject ' Методы GetAbsolutePathName, GetParentFolderName и GetDriveName ' Создание новой и перемещение в нее файлов ' MoveFile.vbs '************************************************************************************ Option Explicit dim WshShell, cur_dir, FSO, new_folder, i, list set WshShell = CreateObject("WScript.Shell") ' формируем ссылку на объект Shell set FSO=CreateObject ("Scripting.FileSystemObject") ' формируем ссылку на объект FileSystemObject ' создаем новую папку и в текущем каталоге set new_folder=FSO.CreateFolder("Новый каталог_vbs") ' переменная содержит путь к текущему каталогу cur_dir = WshShell.CurrentDirectory ' создаем девять пустых текстовых файлов for i=1 to 9 FSO.CreateTextFile(i & "_новый файл.txt") next WScript.Echo "Проверьте содержимое каталога " & vbCRLf & cur_dir 'как переместить файл WScript.Echo "Сейчас произойдет перемещение файлов" ' производим перемещение всех файлов в заданный каталог FSO.MoveFile cur_dir & "\?_новый файл.txt", new_folder list = FSO.GetAbsolutePathName(cur_dir) & vbCrLf list = list & FSO.GetParentFolderName(cur_dir) & vbCrLf list = list & FSO.GetDriveName(cur_dir) WScript.Echo "Процесс перемещения завершен" & vbCrLf & vbCrLf & list |
В данном примере, мы получаем полный путь к текущему каталогу, с помощью объекта Wscript.Shell и его свойства CurrentDirectory. Далее происходит создание новой папки с именем "Новый каталог_vbs" в текущем каталоге с помощью метода CreateFolder. Я не включал проверку на существование создаваемого каталога, поэтому, программный код выдаст ошибку, если создаваемый каталог уже существует. Далее с помощью цикла в текущей папке создается девять пустых текстовых файлов. После, перед вами появятся два информационных сообщения, закрыв их, вы увидите, как переместились созданный файлы из текущей папки в папку с именем «Новый каталог_vbs«. В конце, снова появится информационное сообщение, которое будет содержать информацию об успешном перемещении файлов, файловая система Windows, так же мы получим значения, которые вернут методы GetAbsolutePathName, GetParentFolderName и GetDriveName объекта FileSystemObject.
Мы рассмотрели, как переместить файл, точнее группу файлов программным путём с помощью языка программирования vbscript. Теперь посмотрим на аналогичный пример, но уже на языке jscript.
//*********************************************************************************** // Объект FileSystemObject // Методы GetAbsolutePathName, GetParentFolderName и GetDriveName // Создание новой и перемещение в нее файлов // MoveFile.js //************************************************************************************ var WshShell, cur_dir, FSO, new_folder, i, list; WshShell = WScript.CreateObject("WScript.Shell"); // формируем ссылку на объект Shell FSO=WScript.CreateObject ("Scripting.FileSystemObject"); // формируем ссылку на объект FileSystemObject // создаем новую папку и в текущем каталоге new_folder=FSO.CreateFolder("Новый каталог_js"); // переменная содержит путь к текущему каталогу cur_dir = WshShell.CurrentDirectory; // создаем девять пустых текстовых файлов for (i=1; i<=9; i++){ FSO.CreateTextFile(i + "_новый файл js.txt"); } WScript.Echo ("Проверьте содержимое каталога " + cur_dir); //как переместить файл WScript.Echo ("Сейчас произойдет перемещение файлов"); // производим перемещение всех файлов в заданный каталог FSO.MoveFile (cur_dir + "\\?_новый файл js.txt", new_folder); list = FSO.GetAbsolutePathName(cur_dir) + "\n"; list += FSO.GetParentFolderName(cur_dir) + "\n"; list += FSO.GetDriveName(cur_dir); WScript.Echo ("Процесс перемещения завершен\n\n" + list); |
Я всегда стараюсь при возможности приводить примеры на обоих языках, так как это позволяет произвести анализ кода и сделать сравнение. Так, мне нужна буквально минута, что бы перевести код языка vbscript на код языка jscript.
Ну что же, в этой статье мы рассмотрели методы объекта FileSystemObject – MoveFile, GetAbsolutePathName, GetParentFolderName и GetDriveName, которые показывают, как переместить файл или группу файлов из одного места в другое, а также — как получить абсолютный путь или имя диска.
Интересная статья.) А можно ли привлекая один из этих методов реализовать следующее. Пользователь нажимает кнопку->выбирает файл на диске->путь к файлу записывается в переменную или текстовой файл(на том же компьютере на случай если браузер режет пути). Давно бьюсь над этим.