Объект FileSystemObject метод MoveFile — Перемещение файлов

Объект FileSystemObject метод MoveFile — Перемещение файлов Объектная модель Windows Script Host

Работая с файловой системой 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.

Как переместить файл в файловой системе Windows

Мы рассмотрели, как переместить файл, точнее группу файлов программным путём с помощью языка программирования 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.

Как переместить файлы в системе Windows

Ну что же, в этой статье мы рассмотрели методы объекта FileSystemObject – MoveFile, GetAbsolutePathName, GetParentFolderName и GetDriveName, которые показывают, как переместить файл или группу файлов из одного места в другое, а также — как получить абсолютный путь или имя диска.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий

  1. Алексей П-К

    Интересная статья.) А можно ли привлекая один из этих методов реализовать следующее. Пользователь нажимает кнопку->выбирает файл на диске->путь к файлу записывается в переменную или текстовой файл(на том же компьютере на случай если браузер режет пути). Давно бьюсь над этим.

    Ответить