Имя: Пароль:
1C
1C 7.7
v7: WSH: FileSystemObject.CopyFile копировать с родительскими каталогами?
0 pvase
 
09.07.12
13:17
Надо скопировать файл с одной папки в другую с сохранением структуры каталогов. Можно ли как то сделать такое не обрбатывая каждый родительский каталог и не создавая поочередно родительские каталоги? каталоги
1 izekia
 
09.07.12
13:18
xcopy
2 Vladal
 
09.07.12
13:18
Именно в WSH? в Windows XP появилась команда xcopy.
3 pvase
 
09.07.12
13:19
Спасибо, хотелось бы без показа окна cmd.
4 Vladal
 
09.07.12
13:21
CopyFolder(<Source>,<Destination>,<Overwrite>)

Назначение: рекурсивно копирует каталог.

Параметры:

   <Source> - строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы "*" и "?".
   <Destination> - строка, путь назначения (куда копировать).
   <Overwrite> - необязательный, булево (число). Перезаписывать существующие файлы, или нет. По умолчанию - True (перезаписывать). Если файл, который нужно перезаписать, имеет атрибут read-only, возникнет ошибка (независимо от установки этого параметра).

Описание: процесс копирования прерывается после первой возникшей ошибки.

Пример:

Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder "C:\NewFolder\*", "C:\TEMP\", 0
5 Vladal
 
09.07.12
13:22
6 pvase
 
09.07.12
13:26
(4) Спасибо, но мне надо только один файл (не все файлы) из каталога.
7 FN
 
09.07.12
13:30
(4) тогда WScript.Shell + Run(xcopy)
8 pvase
 
09.07.12
13:55
Спасибо за xcopy, не могу только понять как ответить на вопрос при копировании
Что означает D:\1Cv77\SQL\SystemData\BACKUP\Общие\Формы\defcls.prm:
имя файла или каталога
(F = файл, D = каталог)?

что это файл, чтобы окно при копировании не появлялось. Подскажите пожалуйста.
9 izekia
 
09.07.12
13:57
"что это файл, чтобы окно при копировании не появлялось. Подскажите пожалуйста."
Боюсь ничего не смогу подсказать))
10 FN
 
09.07.12
14:10
>чтобы окно при копировании не появлялось

Синтаксис:

Run(<Command>,<WindowStyle>,<WaitOnReturn>)

Назначение: создаёт новый независимый процесс, который запускает заданное приложение.

Параметры:

   <Command> - строка, командная строка запуска приложения.
   <WindowStyle> - необязательный, число. Определяет вид окна запускаемого приложения. Некоторые возможные значения:
       0 - Не отображает окно.
       1 - Активизирует и отображает окно.
       2 - Активизирует окно и отображает его в свёрнутом виде.
       3 - Активизирует окно и отображает его в максимизированном виде.
   <WaitOnReturn> - необязательный, булево (число). True - сценарий возобновит работу только после завершения вызванного процесса. False (по умолчанию) - управление передаётся сразу обратно в сценарий.

Описание: если параметр "WaitOnReturn" установлен в True, метод возвращает код выхода вызванного приложения. Иначе метод всегда возвращает ноль.

Пример:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "explorer /e,/root,""C:\Program Files"""

Другой пример:

Set WshShell = CreateObject("WScript.Shell")
RetCode = WshShell.Run("notepad", 1, True)
MsgBox "Обработка завершена! Код возврата - " & RetCode
11 Vladal
 
09.07.12
15:50
(8) Что означает D:\1Cv77\SQL\SystemData\BACKUP\Общие\Формы\defcls.prm:
имя файла или каталога
(F = файл, D = каталог)?


Он спрашивает - в приёмнике нет такого файла/папки. Что ты хочешь сощздать - (Ф)файл или (Д)директорию.
Если создашь файл, то в него будут записаны (дописаны в один) все файлы из источника
12 Vladal
 
09.07.12
15:53
(8) как ответить на вопрос при копировании  - можно задать в переменной окружения ответы на вопросы или параметром

XCOPY источник [целевой_объект] [/A | /M] [/D[:дата]] [/P] [/S [/E]] [/V] [/W]
                          [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
                          [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]
                          [/EXCLUDE:файл1[+файл2][+файл3]...]

 источник       Копируемые файлы.
 целевой_объект  Расположение или имена новых файлов.
 /A           Копирование только файлов с установленным архивным атрибутом;
              сам атрибут при этом не изменяется.
 /M           Копирование только файлов с установленным архивным атрибутом;
              после копирования атрибут снимается.
 /D:m-d-y     Копирование файлов, измененных не ранее указанной даты.
              Если дата не указана, заменяются только конечные файлы,
              более старые, чем исходные.
 /EXCLUDE:файл1[+файл2][+файл3]...
              Список файлов, содержащих строки.  Каждая строка должна
              располагаться в отдельной строке. Если какая-либо из строк
              совпадает с любой частью абсолютного пути к копируемому файлу,
              такой файл исключается из операции копирования. Например,
              указав строку \obj\ или .obj, можно исключить все файлы из
              папки obj или все файлы с расширением OBJ соответственно.
 /P           Вывод запросов перед созданием каждого нового файла.
 /S           Копирование только непустых каталогов с подкаталогами.
 /E           Копирование каталогов с подкаталогами, включая пустые.
              Эквивалентен сочетанию ключей /S /E. Совместим с ключом /T.
 /V           Проверка размера каждого нового файла.
 /W           Вывод запроса на нажатие клавиши перед копированием.
 /C           Продолжение копирования вне зависимости от наличия ошибок.
 /I           Если целевой объект не существует и копируется несколько
              файлов, считается, что целевой объект задает каталог.
 /Q           Запрет вывода имен копируемых файлов.
 /F           Вывод полных имен исходных и целевых файлов.
 /L           Вывод имен копируемых файлов.
 /G           Копирование зашифрованных файлов в целевой каталог, не
              поддерживающий шифрование.
 /H           Копирование, среди прочих, скрытых и системных файлов.
 /R           Перезапись файлов, предназначенных только для чтения.
 /T           Создание структуры каталогов без копирования файлов. Пустые
              каталоги и подкаталоги не включаются в процесс копирования. Для
              создания пустых каталогов и подкаталогов используйте сочетание
              ключей /T /E.
 /U           Копирование только файлов, уже имеющихся в целевом каталоге.
 /K           Копирование атрибутов. При использовании команды XСOPY обычно
              сбрасываются атрибуты "Только для чтения".
 /N           Использование коротких имен при копировании.
 /O           Копирование сведений о владельце и данных ACL.
 /X           Копирование параметров аудита файлов (подразумевает
              ключ /O).
 /Y           Подавление запроса подтверждения на перезапись существующего
              целевого файла.
 /-Y          Запрос подтверждения на перезапись существующего целевого
              файла.
 /Z           Копирование сетевых файлов с возобновлением.
 /B           Копирование символической ссылки вместо ее целевого объекта.
 /J           Копирование с использованием небуферизованного ввода/вывода.
              Рекомендуется для очень больших файлов.
13 Vladal
 
09.07.12
16:06
Добавь ключи: /E /I /G /H /R /Y /Z
а если надо копировать только обновлённые - то еще /D
14 pvase
 
09.07.12
17:47
(13) Не помогло, все равно не выдает сообщение.
15 pvase
 
09.07.12
23:08
(14) Т.е. выдает запрос на что создается.
16 Злопчинский
 
10.07.12
00:42
(2) xcope была еще в досе
17 pvase
 
10.07.12
14:24
Пришлось самому написать:

Функция РазобратьКаталог(Каталог)
   СписВозв = СоздатьОбъект("СписокЗначений");
   _Каталог = СокрЛП(Каталог);
   _КаталогОбр = _Каталог;
   КешКаталог = "";
   Пока 1 = 1 Цикл
       ПозСлеша = Найти(_КаталогОбр,"\");
       Если ПозСлеша = 0 Тогда
           Прервать;
       КонецЕсли;
       ТекКаталог = Лев(_КаталогОбр,ПозСлеша);
       КешКаталог = КешКаталог + ТекКаталог;
       СписВозв.ДобавитьЗначение(КешКаталог);
       
       _КаталогОбр = Прав(_КаталогОбр,СтрДлина(_КаталогОбр)-ПозСлеша)
   КонецЦикла;
   Возврат(СписВозв);
КонецФункции
// ===============================
Процедура ПроверитьКаталог(Каталог);
   СписКаталог = РазобратьКаталог(Каталог);
   Спис = СоздатьОбъект("СписокЗначений");
   Спис = РазобратьКаталог(НачКаталог);
   ВыбЗн = "";
   Для Нсп = 1 По Спис.РазмерСписка() Цикл
       ТекКаталог = Спис.ПолучитьЗначение(Нсп);
       ЕстьКаталог = FSO.FolderExists(ТекКаталог);
       Если ЕстьКаталог <= 0 Тогда
           FSO.CreateFolder(ТекКаталог);
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры
// ===============================
Функция КопироватьФайл(Откуда,Куда,ФлПерезапись)
   ПроверитьКаталог(Куда);
   FSO.CopyFile(Откуда,Куда,ФлПерезапись)
КонецФункции

где "FSO" - переменная:
FSO = CreateObject("Scripting.FileSystemObject");
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.