1 (изменено: alexii, 2014-10-09 16:02:24)

Тема: VBScript: Копирование файлов с запросом о замене существующих

Здравствуйте, подскажите как сделать запрос на замену файла.
ЗАДАНИЕ: Написать скрипт для копирования содержимого одного каталога в каталоги назначения. Все каталоги задаются параметрами скрипта, причем исходный каталог - первым параметром. Если в каталоге назначения уже есть файл с таким же именем, как и в исходном, необходимо запросить у пользователя разрешение на замену. Вот наработки:

nach = InputBox("Введите исходную папку")
con1 = InputBox("Введите конечную папку 1")
con2 = InputBox("Введите конечную папку 2")
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder nach, con1
FSO.CopyFolder nach, con2

Спасибо.

2

Re: VBScript: Копирование файлов с запросом о замене существующих

Каталоги могут содержать вложенные папки?

3

Re: VBScript: Копирование файлов с запросом о замене существующих

Один из вариантов


Option Explicit

CopyFolder "C:\Temp\src\*.*","C:\Temp\dest"

Sub CopyFolder(sSrcPath, sDestPath)
    CreateObject("Shell.Application")_
        .NameSpace(sDestPath).CopyHere sSrcPath
End Sub
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

4

Re: VBScript: Копирование файлов с запросом о замене существующих

Большое спасибо за ответ, в исходной папке для копирования, могут содержаться папки с файлами. Пути исходной и двух конечных папок нужно ввести с клавиатуры.

5

Re: VBScript: Копирование файлов с запросом о замене существующих

Если так будет сложно, то можно и без содержания папок, главное пути вводить с клавиатуры.

pogudin.sanya пишет:

Большое спасибо за ответ, в исходной папке для копирования, могут содержаться папки с файлами. Пути исходной и двух конечных папок нужно ввести с клавиатуры.

6

Re: VBScript: Копирование файлов с запросом о замене существующих

pogudin.sanya
А смысл в этом вводе вручную? Не проще список составить и по нему раскидывать?

7

Re: VBScript: Копирование файлов с запросом о замене существующих

Flasher пишет:

А смысл в этом вводе вручную? Не проще список составить и по нему раскидывать?

Дело в том, что я студент. Преподаватель дал именно такое задание, без какой-либо теории. Я пару вечеров сам помучился и решил написать на форум.

8

Re: VBScript: Копирование файлов с запросом о замене существующих

OFFTOP:

pogudin.sanya, слабо верится. ) Может кто-то на лекции забивал часто ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

9

Re: VBScript: Копирование файлов с запросом о замене существующих

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

Xameleon пишет:

OFFTOP:

pogudin.sanya, слабо верится. ) Может кто-то на лекции забивал часто ?

10

Re: VBScript: Копирование файлов с запросом о замене существующих

pogudin.sanya,
1) Наверное всё таки "VBS" (Visual Basic Script), а не "WBS"
2) Сомневаюсь, что на самостоятельное изучение. Основы должны были дать. Но даже если предположить, что "на самостоятельное изучение", то на это явно даётся не "пара вечеров". Странно как-то. )
3) ПМСМ, формулировка задания несколько мутная

Сначала пишете:

pogudin.sanya пишет:

Все каталоги задаются параметрами скрипта, причем исходный каталог - первым параметром.

Потом:

pogudin.sanya пишет:

Пути исходной и двух конечных папок нужно ввести с клавиатуры.

Кто будет обрабатывать ввод с клавиатуры ? Второй скрипт ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

11 (изменено: pogudin.sanya, 2014-10-09 18:14:32)

Re: VBScript: Копирование файлов с запросом о замене существующих

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

'Option Explicit
'вводим папку которая будет копироваться
nach = InputBox("Введите исходную папку")
'вводим папку В которую будет копироваться исходная папка
con1 = InputBox("Введите конечную папку 1")
'вводим папку 2 в которую будет копироваться исходная папка
con2 = InputBox("Введите конечную папку 2")

'копируем папку nach в папку con1
CopyFolder nach, con1
'копируем папку nach в папку con2
CopyFolder nach, con2

'проверяем содержимое, если файлы есть, то заменяем
Sub CopyFolder(sSrcPath, sDestPath)
    CreateObject("Shell.Application")_
        .NameSpace(sDestPath).CopyHere sSrcPath
End Sub

Работа скрипта почти устраивает, проблема в том, что скрипт копирует не содержимое папки, а саму папку.

12

Re: VBScript: Копирование файлов с запросом о замене существующих

pogudin.sanya,

pogudin.sanya пишет:

проблема в том, что скрипт копирует не содержимое папки, а саму папку.

1) Логично. Взгляните внимательнее на первый параметр в моём примере "C:\Temp\src\*.*".

2) Не понял зачем Вы в скрипте трижды просите пользователя вводить путь до папки. O_o

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

13 (изменено: Flasher, 2014-10-09 20:37:51)

Re: VBScript: Копирование файлов с запросом о замене существующих

Что-то вроде:

Set FSO = CreateObject("Scripting.FileSystemObject")
Set SHA = CreateObject("Shell.Application")
Const Header = "       Копирование содержимого каталога в другие"
Path = 1 : DestPath = 1

Do Until Trim(Path) = "" Or FSO.FolderExists(Path)
  Path = InputBox(String(5, vbnewline) & "Введите путь источника:", Header)
  TestFolder Path, ""
Loop

Do Until Trim(DestPath) = ""
  DestPath = InputBox(String(5, vbnewline) & "Введите путь получателя:", Header)
  If DestPath <> "" Then
    Test = 0 : TestFolder DestPath, Test 
    If Not Test Then SHA.NameSpace(DestPath).CopyHere FSO.BuildPath(Path, "*.*")
  End If
Loop

Sub TestFolder(RPath, T)
  If RPath <> "" Then
    If Not FSO.FolderExists(RPath) Then
      T = 1
      M = MsgBox("Такого пути не существует:" & vbNewLine & RPath, _
      vbRetryCancel + vbExclamation, Header)
      If M = vbRetry Then RPath = 1
    End If
  Else
    Set FSO = Nothing : Set SHA = Nothing : WScript.Quit
  End If
End Sub

14 (изменено: alexii, 2014-10-09 19:25:24)

Re: VBScript: Копирование файлов с запросом о замене существующих

После того как я ввожу путь источника, окно закрывается и после этого ничего не происходит. Спасибо.

15

Re: VBScript: Копирование файлов с запросом о замене существующих

Понял, сейчас поправлю.

Не цитируйте посты, пож-та.

16

Re: VBScript: Копирование файлов с запросом о замене существующих

Интересно, когда я запускаю скрипт на рабочем столе, появляется окно с надписью "введите путь источника", а когда я запускаю скрипт в папке на диске D, появляется надпись введите путь  получателя.

17

Re: VBScript: Копирование файлов с запросом о замене существующих

Пробуйте, код из цитаты удалите.

18

Re: VBScript: Копирование файлов с запросом о замене существующих

Остаток темы перенесён в: OFF: о правильном стиле программирования.

Существенные для этой темы перенесённые части процитирую:

Xameleon пишет:

pogudin.sanya, рекомендую не "гадать на кофейной гуще" и не ждать готового решения, а изучить код подробнее. К сожалению код уважаемого коллеги Flasher не совсем идеальное наглядное пособие для начинающего, так как:

1) Нет явного объявления переменных
2) Нет комментариев
3) Отсутствуют префиксы переменных, сообщающих о подтипе хранимых данных
4) Код довольно избыточен
5) Имена некоторых переменных не несут смысловой нагрузки

но это на его усмотрение. В целом идея вполне понятна. Так что разобраться можно.

pogudin.sanya пишет:

Уважаемый Flasher большое спасибо, скрипт рабочий, попробую разобраться в коде. Не могли бы вы подсказать подходящую литературу? Eще раз спасибо.

Flasher пишет:

pogudin.sanya
Пож-та.
Оптимально для студента начать с этого.
Add: даже скорее с этого: Грошев А.С. Программирование на языке Microsoft Visual Basic Scripting Edition.