Vbs переместить файл в другую папку
Есть три способа создания пустого текстового файла (иногда называемого как «text stream»).
Первый способ — это использование метода CreateTextFile. В следующем примере показано, как создать текстовый файл, используя этот метод: Пример использования данного метода см. в разделе «3.7. Пример работы с объектом FileSystemObject».
Второй способ — это использование метода OpenTextFile объекта FileSystemObject с набором флагов ForWriting. В следующем примере показано, как создать текстовый файл, используя этот метод: Третий способ — это использование метода OpenAsTextStream с набором флагов ForWriting. В следующем примере показано, как создать текстовый файл, используя этот метод:
MoveFile(String, String, UIOption)
Перемещает файл в новое местоположение.
Параметры
Путь к перемещаемому файлу.
Путь к каталогу, в который необходимо переместить файл.
Указывает, следует ли отображать ход выполнения операции. Значение по умолчанию — UIOption.OnlyErrorDialogs .
Исключения
Путь является недопустимым, так как либо представляет собой строку нулевой длины (пустую строку), либо содержит только пробел, либо содержит недопустимые символы, либо представляет собой путь к устройству (начинается с символов \\.\); заканчивается косой чертой.
Параметр destinationFileName имеет значение Nothing или является пустой строкой.
Исходный файл не является допустимым или не существует.
Файл уже используется другим процессом или возникла ошибка ввода-вывода.
Длина пути превышает максимальную длину, определенную в системе.
Имя файла или каталога в пути содержит двоеточие (:) или имеет недопустимый формат.
У пользователя отсутствуют необходимые разрешения на просмотр пути.
Добавление данных в файл
- Открыть текстовый файл
- Записать данные
- Закрыть файл
Для записи данных в текстовый файл используйте методы Write, WriteLine или WriteBlankLines объекта TextStream, в зависимости от задач, описанных в приведённой ниже таблице:
Задача | Метод |
Запись данных в текстовый файл без символа перехода на новую строку в конце | Write |
Запись данных в текстовый файл с символом перехода на новую строку в конце | WriteLine |
Запись одной или более пустых строк в открытый текстовый файл | WriteBlankLines |
Для закрытия текстового файла используйте метод Close объекта TextStream. Закрыть файл можно также методом Close объекта FileSystemObject. Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».
ПРИМЕЧАНИЕ
Символ новой строки содержит символ или символы (зависит от операционной системы) для перевода курсора в начало новой строки (возврат каретки/перевод строки). Следует учитывать, что некоторые строки уже могут иметь в конце эти непечатаемые символы.
В следующем примере показано, как выполняется запись данных в открытый файл всеми тремя методами, затем файл закрывается:
MoveFile(String, String)
Перемещает файл в новое местоположение.
Параметры
Путь к перемещаемому файлу.
Путь к каталогу, в который необходимо переместить файл.
Исключения
Путь является недопустимым, так как либо представляет собой строку нулевой длины (пустую строку), либо содержит только пробел, либо содержит недопустимые символы, либо представляет собой путь к устройству (начинается с символов \\.\); заканчивается косой чертой.
Параметр destinationFileName имеет значение Nothing или является пустой строкой.
Исходный файл не является допустимым или не существует.
Файл уже используется другим процессом или возникла ошибка ввода-вывода.
Длина пути превышает максимальную длину, определенную в системе.
Имя файла или каталога в пути содержит двоеточие (:) или имеет недопустимый формат.
У пользователя отсутствуют необходимые разрешения на просмотр пути.
Примеры
В данном примере перемещается файл с именем Test.txt из TestDir1 в TestDir2 .
В этом примере файл перемещается в TestDir2 TestDir1 файл Test.txt и переименовывает его Test2.txt .
Комментарии
Если целевая структура не существует, она создается.
Этот MoveFile метод сохраняет службы управления доступом (контроль доступа записи) только при перемещении файла в одном томе. Сюда входят унаследованные службы управления доступом, которые становятся прямыми при перемещении (прямые службы управления доступом имеют приоритет над унаследованными acEs). Если файл перемещается между томами, службы ACE не будут скопированы.
Кому | См. |
---|---|
Перемещение файла | Практическое руководство. Перемещение файла в Visual Basic |
Как копировать файлы на диск
Хорошо, с одной теорией мы закончили, теперь можно приступить к другой И так, за копирование файлов на диск отвечает метод CopyFile класса FileSystemObject. Стоит учитывать, что данный метод производит одиночное копирование, то есть, нельзя начать копирование, нажать на паузу и потом снова продолжить. Его синтаксис следующий:
CopyFile (source, destination [,overwrite]) – как видим методу передаются три параметра, при этом, последний не является обязательным.
- source – данный параметр принимает строковое значение и указывает полный путь к файлу, который нужно скопировать, можно использовать подстановочные знаки: "?" – любой один символ и "*" – любое количество символов.
- destination – опять таки, полный путь, куда будет скопирован файл, при чём, можно указать новое имя и расширение.
- overwrite – если параметр установлен в логическое значение true – будет происходить замена, false – не производить замены (по умолчанию).
Хорошо, с теорией разобрались, теперь можно приступить к программированию. Для начала рассмотрим программный код на языке vbscript:
'********************************************** ' Объект filesystemobject метод copyfile ' Как копировать файлы на диск ' copyfile.vbs '********************************************** Option Explicit dim fso, new_folder ' создаем ссылку на объект Scripting.FileSystemObject set fso=CreateObject ("Scripting.FileSystemObject") ' создаем в текущей папке новый каталог set new_folder=fso.CreateFolder("Новая папка_vbs") ' копируем текущий сценарий в новую папку под новым именем fso.CopyFile WScript.ScriptFullName, new_folder & "\тест_vbs.txt" , true WScript.Echo "Процесс копирования завершен"
Давайте рассмотрим всё по пунктам. Сам сценарий производит создание папки "Новая папка_vbs" в текущем каталоге, для этого мы используем метод CreateFolder, после происходит копирование текущего файла (сценария) в созданную папку (метод CopyFolder класса FileSystemObject).
dim fso, new_folder – тут мы объявили переменные, fso – хранит ссылку на объект FileSystemObject, new_folder – хранит путь к новому каталогу.
set WshShell = CreateObject("Scripting.FileSystemObject ") – тут мы создаем ссылку на экземпляр объекта Wscript.Shell, тут мы используем стандартную функцию языка vbscript для создания ссылки на класс – CreateObject, также, как видим, фигурирует ключевое слово set. Объект нужен для использования метода CopyFile.
set new_folder=fso.CreateFolder("Новая папка_vbs") – тут происходит создание новой папки "Новая папка_vbs" с помощью метода CreateFolder, более детально, роботу данного метода я описал в статье "FileSystemObject метод CreateFolder". Как копировать файл на диск.
fso.CopyFile WScript.ScriptFullName, new_folder & "\тест_vbs.txt" , true – в данной строке мы производим процесс копирования текущего сценария в новый каталог, но уже под именем тест_vbs.txt. WScript.ScriptFullName содержит строку, которая определяет полный путь к текущему сценарию.
Стоит обратить внимание, что я не включал проверку ошибок.
Хорошо, теперь давайте рассмотрим аналогичный пример, но уже на языке jscript:
//********************************************** // Объект filesystemobject метод copyfile // Как копировать файлы на диск // copyfile.js //********************************************** var fso, new_folder; // создаем ссылку на объект Scripting.FileSystemObject fso=WScript.CreateObject ("Scripting.FileSystemObject"); // создаем в текущей папке новый каталог new_folder=fso.CreateFolder("Новая папка_js"); // копируем текущий сценарий в новую папку под новым именем fso.CopyFile (WScript.ScriptFullName, new_folder + "\\тест_js.txt" , true); WScript.Echo ("Процесс копирования завершен");
Тут я сделал некоторые изменения: изменил имя новой папки, имя конечного файла, в результате, произойдёт создание в текущей папке каталога "Новая папка_js", и копирование в нее текущего сценария, в итоге мы получим текстовый документ "тест_js.txt".
И так, в этой статье мы рассмотрели, как копировать файлы на диск с помощью метода CopyFile класса FileSystemObject. Для реализации поставленной задачи мы программировали на языке vbscript и jscript.
Спасибо за внимание. Автор блога Владимир Баталий
Работая с файловой системой Windows часто приходится выполнять различные действия с файлами, например, как переместить файл, как скопировать файлы и папки и так далее. Всё это легко реализовать вручную, но, можно прибегнуть и к программированию.
В этой статье мы рассмотрим методы объекта FileSystemObject, которые показывают, как программным путём с помощью сценариев Windows Script Host переместить файлы в указанное место, получить полный путь из относительного пути, путь к родительскому каталогу или имя диска, на котором находится заданный каталог.
Хорошо, прежде чем приступать к программированию и описанию методов, давайте вспомним, как переместить файл рядовым методом в операционной системе Windows. Что бы переместить файл из одной папки в другую, нужно просто зажать клавишу "Shift" и переместить нужный файл, или папку с файлами в другое место ( на другой диск или в другой каталог ). Тут, как говорится, элементарно. Теперь давайте рассмотрим наши методы объекта FileSystemObject, который отвечает за работу с файловой системой Windows.
Следующие три методы в качестве параметра (parthspec) принимают относительный путь к каталогу или диску:
GetAbsolutePathName (parthspec) – Возвращает полный путь.
Допустим, мы запускаем наш сценарий из папки D:\Work\My_Script . Давайте посмотрим, что вернёт метод при разных переданных значениях.
- Параметр pathspec – Возвращаемое значение
- "d:" - "d:\work\My_Script"
- "d. " - "d:\work"
- "d:\\\" - "d:\"
- "d:*.*\folder_1" - "d:\work\My_Script\*.*\folder_1"
- "folder_2" - "d:\work\My_Script\folder_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
Мы рассмотрели, как переместить файл, точнее группу файлов программным путём с помощью языка программирования 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 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, которые показывают, как переместить файл или группу файлов из одного места в другое, а также - как получить абсолютный путь или имя диска.
Спасибо за внимание. Автор блога Владимир Баталий
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перемещает файл в новое местоположение.
Методы объекта File – работа с Windows файлами
Copy (destination [, overwrite]) – При работе с файлами Windows позволяет произвести его копирование в заданное место, destination задает файл, в который будет производиться копирование, нельзя использовать подстановочные символы (*,? и так далее), overwrite: значение TRUE – произвести замену, FALSE – нет. Вместо метода Сору можно использовать метод CopyFile.
Delete ([force]) – Позволяет удалить документ. Если параметр force равен false или не указан, то с помощью данного метода будет нельзя удалить элемент с атрибутом "только для чтения" (read-only), установка для force значения true позволит сразу удалять такие элементы. Вместо метода Delete можно использовать метод DeleteFile (FileSystemObject).
Move (destination) – При работе с файлом Windows, метод позволяет переместить его в другое место, destination определяет место назначения; подстановочные знаки в имени недопустимы. Вместо метода Move можно использовать MoveFile (FileSystemObject).
OpenAsTextStream ([iomode, [format] ]) – Открывает файл, метод вернет класс TextStream, используя который можно производить чтение, запись или добавление данных в текстовый файл, iomode задает режим ввода/вывода и может принимать те же значения, что и одноименный параметр в методе OpenTextFile, format определяет формат (ASCII (0) или Unicode(1)). Открыть текстовый файл для чтения можно также с помощью метода OpenTextFile (FileSystemObject).
Ниже приведен пример работы с файлами, а именно, чтение атрибутов, дата создания, изменения и последнего обращения.
Первый сценарий написан на языке VBScript, а второй на языке JScript, по умолчанию анализируется C:\\Autoexec.bat, но вы можете изменить это значение или просто перетянуть документ на значок сценария.
Пример на языке vbscript:
' ************************************************************************** ' Класс File ' Работа с файлами Windows ' rabota-s-fajlami.vbs ' ******************************************************************************** Option Explicit Dim fso, oFile, objArgs, Text1, attrib, file, title Title = "Работа с Windows файлами" ' документ для анализа file = "C:\Autoexec.bat" Set objArgs = WScript.Arguments ' В качестве анализа можно просто перетянуть документ на значок сценария If objArgs.Count > 0 Then file = objArgs(0) Set fso = WScript.CreateObject("Scripting.FileSystemObject") ' Проверяем, существует ли файл If fso.FileExists(file) Then Set oFile = fso.GetFile(file) ' Получаем информацию Text1 = "Документ: " & vbTab & oFile.Name & vbCrLf & "Создан: " & vbTab & oFile.DateCreated & vbCrLf & "Изменен: " & vbTab & oFile.DateLastModified & vbCrLf & "Последнее обращение: " & vbTab & oFile.DateLastAccessed & vbCrLf & "Атрибуты " & vbTab attrib = oFile.Attributes ' Это атрибут "только для чтения". If (attrib And &H01) > 0 Then Text1 = Text1 & "r " ' "скрытый". If (attrib And &H02) > 0 Then Text1 = Text1 & "h " ' "системный". If (attrib And &H04) > 0 Then Text1 = Text1 & "s " ' "архивный". If (attrib And &H20) > 0 Then Text1 = Text1 & "a " ' "сжатый". If (attrib And &H800) > 0 Then Text1 = Text1 & "c " MsgBox Text1, vbOKOnly + vbInformation, Title Else WScript.Echo "Ошибка " & file & " не найден" End If
Пример на языке JScript:
// ************************************************************************** // Класс File // Работа с файлами Windows // rabota-s-fajlami.js // ******************************************************************************** // документ для анализа var file = "C:\\Autoexec.bat"; var Title = "Работа с Windows файлами"; var vbOKOnly = 0; var vbInformation = 64; var Text; var objArgs = WScript.Arguments; var attrib; // В качестве анализа можно просто перетянуть документ на значок сценария if (objArgs.length > 0) file = objArgs(0); var fso = WScript.CreateObject("Scripting.FileSystemObject"); WshShell = WScript.CreateObject("WScript.Shell"); // Проверяем, существует ли файл if (!fso.FileExists(file)) < WScript.Echo("Ошибка ", file, " не найден"); WScript.Quit(1); >var j = fso.GetFile(file); // Получаем информацию Text = "Документ: \t\t" + j.name + "\n" + "Создан: \t\t" + j.DateCreated + "\n"+ "Изменен: \t\t" + j.DateLastModified + "\n"+ "Последнее обращение: \t" + j.DateLastAccessed + "\n"; // Декодировать атрибуты. Text += "Атрибуты \t\t"; attrib = j.Attributes; if ((attrib & 0x01) != 0) Text += "r "; if ((attrib & 0x02) != 0) Text += "h "; if ((attrib & 0x04) != 0) Text += "s "; if ((attrib & 0x20) != 0) Text = "a "; if ((attrib & 0x800) != 0) Text += "c "; WshShell.Popup(Text,0,Title, vbOKOnly + vbInformation);
И так, программирование примеров закончено, теперь давайте рассмотрим сам программный код. По сути, вся работа с Windows файлами заключается в анализе Autoexec.bat, но это по умолчанию, так как сценарии обрабатывают передаваемые параметры, поэтому мы можем перетянуть на значок скрипта любой другой документ для его анализа. В конечно итоге будет выводится базовая информация: тип, дата создания, дата изменения и так далее.
Спасибо за внимание. Автор блога Владимир Баталий
Применяется к
Чтение файлов
Для чтения данных из файла используйте методы Read, ReadLine или ReadAll объекта TextStream. Эти методы и задачи, решаемые с их помощью, описаны в приведённой ниже таблице:
Задача | Метод |
Чтение указанного количества символов из файла | Read |
Чтение полной строки из файла (до символа конца строки, но не включая его) | ReadLine |
Чтение всего содержимого файла | ReadAll |
Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».
Если вы используете методы Read или ReadLine и хотите пропустить определённую часть данных, то используйте методы Scip или ScipLine. Полученный в результате работы этих методов текст может быть сохранён в строку, которую можно отобразить на экране в элементе управления, передать в качестве параметра в строковую функцию (например, в Left, Right или Mid), соединить с другой строкой и т.п.
В следующем примере показано, как открыть файл, записать в него данные, а затем прочитать их:
Свойства объекта File – работа с файлами Windows
Attributes – Данное свойство дает возможность просмотреть или изменить атрибуты. Виды атрибутов, в скобках указано цифровое значение:
- Normal – Обычный, без установленных атрибутов (0).
- Readonly - Только чтение (1).
- Hidden - Скрытый (2).
- System – Системный (4).
- Directory - Папка или каталог (возможно, с атрибутом «только для чтения») (16).
- Archive – Архивный (32).
- Alias - Ярлык (1024).
- Compressed – Сжатый (только для Windows NT/2000) (2048).
Пользователь может комбинировать значения констант для свойства Attributes.
DateCreated – Дата и время создания. Только_чтение.
DateLastAccessed - Дата и время последнего обращения. Только_чтение.
DateLastModified - Дата и время последней модификации документа. Доступно только для чтения
Drive – Буква диска для устройства, на котором лежит документ. Только_чтение.
Name – При работе с файлами позволяет просмотреть или изменить их имя. Чтение_и_запись
ParentFolder – Возвращает путь к каталогу, в котором лежит документ. Только чтение.
Path - Путь к документу
ShortName - Короткое имя (например, 233_6E~3 ).
ShortPath - Короткий путь (например, C:\work\233_6E~3 ).
Size - Размер в байтах
Type – Позволяет получить информацию о типе.
Комментарии
Если целевая структура не существует, она создается.
Этот MoveFile метод сохраняет службы управления доступом (контроль доступа записи) только при перемещении файла в одном томе. Сюда входят унаследованные службы управления доступом, которые становятся прямыми при перемещении (прямые службы управления доступом имеют приоритет над унаследованными acEs). Если файл перемещается между томами, службы ACE не будут скопированы.
Работа с файлами Windows средствами Windows Script Host осуществляется с помощью объекта File и коллекции Files. Что бы получить доступ к классу _File_ используется метод GetFile объекта FileSystemObject. При работе с файлами для доступа к коллекции Files используется одноименное свойства объекта Folder.
Давайте рассмотрим соответствующие свойства и методы класса _File_.
Перегрузки
Перемещает файл в новое местоположение.
Перемещает файл в новое местоположение.
Перемещает файл в новое местоположение.
Перемещает файл в новое местоположение.
Примеры
В данном примере перемещается файл с именем Test.txt из TestDir1 в TestDir2 .
В этом примере файл перемещается в TestDir2 TestDir1 файл Test.txt и переименовывает его Test2.txt .
Перемещение, копирование и удаление файлов
Объектная модель FSO имеет для каждой из операций перемещения, копирования или удаления файлов по два метода. Эти методы и задачи, решаемые с их помощью, описаны в приведённой ниже таблице:
Задача | Метод |
Перемещение файла | File.Move или FileSystemObject.MoveFile |
Копирование файла | File.Copy или FileSystemObject.CopyFile |
Удаление файла | File.Delete или FileSystemObject.DeleteFile |
Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».
В следующем примере создаётся текстовый файл в корневом каталоге диска С, записывается в него некоторая информация. Затем файл перемещается в директорию с именем \tmp, копируется в директорию \temp, а затем удаляются копии из обеих директорий.
Для проверки работы этого примера создайте в корневом каталоге диска С директории tmp и temp.
По сути, сначала мы рассмотрим, как копировать файлы на диск в Windows ручным методом с помощью комбинаций клавиш и мышки, потом рассмотрим метод объекта FileSystemObject – CopyFile, который позволяет программным путём копировать файлы на диск или в указанную директорию, а потом начнём программировать.
И так, как копировать вручную файлы на диск? Да всё предельно просто, в зависимости от того, сколько нам нужно копировать файлов, мы можем выделить мышью один или несколько документов, а потом перетянуть их в другую папку или диск, предварительно удерживая клавишу "Ctrl", отпускаем левую кнопку мыши и всё, файлы скопированы. Второй способ – использование комбинации клавиш, снова выбираем нужные документы, нажимаем комбинацию "Ctrl + C", потом открываем нужную папку или диск и нажимаем комбинацию "Ctrl + V". Стоит помнить тот момент, что если мы попытаемся копировать файлы и вставить в одно и то же место ( скопировали на диске "С" и туда же хотим снова вставить ), то ошибки не произойдёт, система автоматически переименует вставляемые файлы, чтобы не возник конфликт имён.
Читайте также: