Копирование файлов с сохранением структуры папок vbs

Обновлено: 06.07.2024

Копирует один или несколько файлов из одного расположения в другое.

Синтаксис

объект. CopyFile источник, назначения, [ переписать ]

Синтаксис метода CopyFile содержит следующие элементы:

Part Описание
object Обязательный. Объект всегда является именем FileSystemObject.
source Обязательный. Спецификация файла строки символов, которая может содержать подстановочные знаки (для одного или нескольких копируемых файлов).
destination Обязательный. Символьное строковое обозначение конечного расположения, в которое необходимо скопировать файл или файлы из элемента source. Использование подстановочных знаков не допускается.
переописывание Необязательное. Логическое значение, которое указывает, требуется ли перезапись существующих файлов. Если установлено значение True, файлы будут перезаписаны; если задано значение False, перезапись не выполняется. По умолчанию используется значение True. Необходимо учитывать, что функция CopyFile не выполняется, если для элемента destination установлено свойство "только чтение", независимо от значения элемента overwrite.

Примечания

Подстановочные знаки могут использоваться только в последнем компоненте пути аргумента source. Например, можно использовать:

Однако нельзя использовать:

Если источник содержит символы под диктовки или заканчивается сепаратором пути (* ), предполагается, что назначение — это существующая папка, в которой можно скопировать * совпадающие файлы. В противном случае элемент, destination предположительно является именем создаваемого файла. В любом случае при копировании отдельного файла могут произойти три вещи:

Если элемент destination не существует, выполняется копирование элемента source. Это типичный случай.

Если элемент destination представляет собой существующий файл, возникает ошибка, если элементу overwrite присвоено значение False. В противном случае выполняется попытка копирования элемента source в существующий файл.

Если destination является каталогом, происходит ошибка.

Ошибка также возникает в том случае, если элемент source, который использует подстановочные знаки, не соответствует ни одному из файлов. Выполнение метода CopyFile останавливается при обнаружении первой ошибки. До возникновения ошибки попыток отката или отмены каких-либо изменений не выполняется.

Файлы, скопированные на новый путь назначения, будут хранить одно и то же имя файла. Чтобы переименовать скопированные файлы, просто включив новое имя файла в путь назначения. Например, это скопирует файл в новое расположение, а у файла в новом расположении будет другое имя:

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Уже отчаялся найти в Windows команду для копирования папки со структурой (с путем) до корневого диска.
Например, есть структура папок:
C:\Programs\Files\Path_01
C:\Programs\Files\Path_02
C:\Programs\Files\Path_03
C:\Programs\Files\Path_04
и т.д.

Необходимо скопировать папку Path_02 на сменный носитель K с cохранением всей структуры папок:
K:\Programs\Files\Path_02

Как это сделать в VBA или Windows?

Avsha, такие два варианта (в любом случае получаем полный путь и отметаем "С:\" )
1. копируем всю папку Programs со всеми вложенными папками и файлами и потом удалять лишнее. IMHO - неудобный, нужно перебирать все файлы в директории, не говоря о том, что размер Programs может быть и не маленьким
2. на К:\ последовательно создаем структуру согласно разбитого по "\" пути (если неизвестна структура изначально) и уже в нее копируем нужный файл
Что-то вроде того по 2-му Oops.
Разговор-то про папки, а не файл
Но смысл тот же, я думаю, только используем .CopyFolder Avsha, Есть стандартная команда xcopy. Набираем xcopy /? и читаем: .
/T Создает структуру папок, но не копирует файлы. Не поддерживает
пустые папки и подпапки. Сочетание /T /E
поддерживает пустые папки и подпапки.
.

bi-lya, спасибо за отклик

Нашел вариант ручного копирования:

1. Открываем (заходим) в папку, где лежат наши исходные файлы
2. Выделить исходный путь в строке "Адрес" и копируем в подручный блокнот
С:\Programs\Files\Path_01
3. Меняем диск С на диск К и приписываем еще команду md
md K:\Programs\Files\Path_01 (забираем в буфер)
4. Пуск\Выполнить\cmd
5. Вставка из буфера команды на создание структуры папок.
6. Копирование исходных файлов в полученную структуру папок.

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

Думаю, можно этот вариант будет сделать и в виде exe-шника на VB,
используя CurDir, MkDir, FileCopy и задавая один лишь аргумент - Имя буквы диска назначения(K).


to Aent,
ключи от xcopy честно и упорно проверял, но использовать у меня их не вышло.
Может вы подскажете, что не так.
мой неработающий вариант следующий .
xcopy С:\Programs\Files\Path_01\ K:\ /T /E

Доброго времени суток! Фабула задачи такова :
естьtempout.txt файл с перечнем имен файлов без расширений, в виде 020_1290 ;
StartFolder = D:\ - откуда копируем;
EndFolder = D:\PL\ - куда копируем.
Нужно скопировать заданные в списке файлы (с любым расширением). Начал делать дошел до разбора строк и "споткнулся" на сравнивании переменных, строк из масива с именами файлов. Не хватает опыта и знаний.
И еще вопрос как в папке рассортировать содержимое по подпапкам имена которых это первые 3 символа имён файлов, т.е. 19zap.txt и archiv.avi из папки D:\svalka\ переместятся 19zap.txt в D:\svalka\19z\ , а archiv.avi в D:\svalka\arc\. За ранее благодарен.

2 Ответ от Flasher 2015-09-11 02:51:07 (изменено: Flasher, 2015-09-11 06:21:43)

  • Flasher
  • Заблокирован
  • Неактивен











dmitriypopov86
Касаемо первый задачи: структура должна сохраняться, или всё кидать в одну папку? Если да, то букву диска не брать?
Это одноразовая задача? Насколько тут принципиален vbs?
А то можно было бы воспользоваться инструментарием Total Commander, например.

Ладно, я ждать уже не буду. Потом отпишитесь. Пока так (tempout.txt в UTF-16):

3 Ответ от dmitriypopov86 2015-09-11 13:38:04 (изменено: dmitriypopov86, 2015-09-11 13:42:24)

dmitriypopov86
Касаемо первый задачи:

Спасибо за отклик! Да задача одноразовая , один раз прочитали список и копировали необходимые файлы, на букву диска можно не смотреть - это необязательный параметр, очень принципиально что б скрипт был на vbs, на тотале я знаю, как сделать, но этот способ не подходит для общей автоматизации выполняемых задач. Хм. я что то не так наверное делаю, подставляю параметры и скрипт все время ругается что должно быть 3 параметра. Подскажите путь к списку должен быть такого вида : List = "D:\PL\tempout.txt" или List = fso.GetFile("D:\PL\tempout.txt") ?

4 Ответ от Flasher 2015-09-11 17:48:03 (изменено: Flasher, 2015-09-11 19:50:53)

  • Flasher
  • Заблокирован
  • Неактивен











на тотале я знаю, как сделать, но этот способ не подходит для общей автоматизации выполняемых задач.

5 Ответ от JSmаn 2015-09-12 11:53:27

  • JSmаn
  • Администратор
  • Неактивен











dmitriypopov86, пора бы уже выучить как оформляется заголовок темы.

как копировать программно файлы

По сути, сначала мы рассмотрим, как копировать файлы на диск в Windows ручным методом с помощью комбинаций клавиш и мышки, потом рассмотрим метод объекта FileSystemObject – CopyFile, который позволяет программным путём копировать файлы на диск или в указанную директорию, а потом начнём программировать.

И так, как копировать вручную файлы на диск? Да всё предельно просто, в зависимости от того, сколько нам нужно копировать файлов, мы можем выделить мышью один или несколько документов, а потом перетянуть их в другую папку или диск, предварительно удерживая клавишу "Ctrl", отпускаем левую кнопку мыши и всё, файлы скопированы. Второй способ – использование комбинации клавиш, снова выбираем нужные документы, нажимаем комбинацию "Ctrl + C", потом открываем нужную папку или диск и нажимаем комбинацию "Ctrl + V". Стоит помнить тот момент, что если мы попытаемся копировать файлы и вставить в одно и то же место ( скопировали на диске "С" и туда же хотим снова вставить ), то ошибки не произойдёт, система автоматически переименует вставляемые файлы, чтобы не возник конфликт имён.

Как копировать файлы на диск

как копировать файлы на диск

Хорошо, с одной теорией мы закончили, теперь можно приступить к другой И так, за копирование файлов на диск отвечает метод CopyFile класса FileSystemObject. Стоит учитывать, что данный метод производит одиночное копирование, то есть, нельзя начать копирование, нажать на паузу и потом снова продолжить. Его синтаксис следующий:

CopyFile (source, destination [,overwrite]) – как видим методу передаются три параметра, при этом, последний не является обязательным.

  • source – данный параметр принимает строковое значение и указывает полный путь к файлу, который нужно скопировать, можно использовать подстановочные знаки: "?" – любой один символ и "*" – любое количество символов.
  • destination – опять таки, полный путь, куда будет скопирован файл, при чём, можно указать новое имя и расширение.
  • overwrite – если параметр установлен в логическое значение true – будет происходить замена, false – не производить замены (по умолчанию).

Хорошо, с теорией разобрались, теперь можно приступить к программированию. Для начала рассмотрим программный код на языке vbscript:

Давайте рассмотрим всё по пунктам. Сам сценарий производит создание папки "Новая папка_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:

Тут я сделал некоторые изменения: изменил имя новой папки, имя конечного файла, в результате, произойдёт создание в текущей папке каталога "Новая папка_js", и копирование в нее текущего сценария, в итоге мы получим текстовый документ "тест_js.txt".

как программным путем копировать файлы на диск

И так, в этой статье мы рассмотрели, как копировать файлы на диск с помощью метода CopyFile класса FileSystemObject. Для реализации поставленной задачи мы программировали на языке vbscript и jscript.

Спасибо за внимание. Автор блога Владимир Баталий

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