Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Копировать один файл в несколько папок сразу! 
Author Message
jehaz



PostPosted: Thu Aug 16, 2007 20:39    Post subject: Reply with quote

Batya wrote:

Первое и ОЧЕНЬ важное - форматируй текст кода отступами! Если ты сам при небольшом объеме еще можешь разобраться, то читать код другим просто невозможно и совсем неинтересно. Наверное, если бы код был более читабельным, то еще кто-нибудь, кроме меня, мог поучаствовать в обсуждении.

Торопился скорее реализовать. Исправился.

Batya wrote:

Соответственно, потом можно вместо
Code:
Set TextStream = FolderList.OpenAsTextStream(1)
StrFolder = vbNullString
While Not TextStream.AtEndOfStream
...

использовать
Code:
For Each StrFolder In Split(MsgFoldersText, vbCrLf)
  ...

Потом тебе и
Code:
If FSO.FolderExists (StrFolder) Then

не понадобится.

Тут в принципе согласен, но лучше еще раз проверить физическое наличие папок. В другой копии тотала можно выполнять операцию удаления и забыть. А тут контроль.

Batya wrote:

И еще - хорошо бы в MsgBox использовать не числовые значения, а vb-константы.

Сделано.

Batya wrote:

Добавлено: Поправил немного (ступил, однако).

Заметил. "Ввод данных за пределами файла". Было было.

Ну вот наверное конечный вариант. Только отформатировал.

Даже если оставишь выделение какое было в "что копировать" то папки сами в себя не копируются. Оболочка следит.

Code:
'===========================================================
' Скрипт копирует любое количество файлов и папок в
' любое количество папок. Не требует Script Helper.
' В параметрах к запуску указать %L
' Выделить объекты (файлы, папки) "что копировать", жмем
' кнопку. Далее выделяем папки "куда копировать", жмем кнопку.
' Если при выделении папок "куда копировать" ничего не выделено,
' скрипт прекращает работу. Или если при выделении папок
' "куда копировать" выделены файлы, то они игнорируются.
'===========================================================
Option Explicit
Dim Argument
Dim Tempdir, PathTempFile, FolderList, FileList, MsgFoldersStr, MsgFileText, MsgFolders
Dim MsgFoldersText, StrFolder, StrFiles, CopyFileName, MsgFileStr
Dim Lenstr, LastChar, Result, FileListFile
Dim WshArg, FSO, WSHShell, ObjEnv, TextStreamFL, TextStream, ObjShellApp, CopyObj
Set WshArg = WScript.Arguments
Set ObjShellApp = CreateObject("Shell.Application")
If WshArg.Count>0 Then
   Set FSO = CreateObject("Scripting.FileSystemObject")
   Argument = WshArg.Item(0)
   Set WSHShell = CreateObject("WScript.Shell")
   Set ObjEnv = WSHShell.Environment("Process")
   Tempdir = ObjEnv("TEMP")
   PathTempFile = Tempdir & "\FileListTemp.txt"
   If FSO.FileExists (PathTempFile) then
      Set FolderList = FSO.getfile(Argument)
      Set FileList = FSO.getfile(PathTempFile)
      Set TextStream = FolderList.OpenAsTextStream(1)
      MsgFoldersStr = vbNullString
      MsgFoldersText = vbNullString
      While Not TextStream.AtEndOfStream
            MsgFoldersStr = TextStream.ReadLine()
            If FSO.FolderExists(MsgFoldersStr) Then
               MsgFoldersText = MsgFoldersText & MsgFoldersStr & vbCrLf
            End If
      Wend
      TextStream.Close
      Set MsgFileStr = FileList.OpenAsTextStream(1)
      MsgFileText = MsgFileStr.ReadAll()
      If MsgFoldersText <> "" then
         Result = MsgBox("Будем копировать?" & vbCrLf & "объекты:"_
          & vbCrLf & MsgFileText & vbCrLf & "в папки:" & vbCrLf & _
          MsgFoldersText,vbYesNo+vbQuestion,"Внимание!")
      Else
          MsgBox "Не выделены папки для для копирования!!!" & vbCrLf & _
          "Временные файлы удалены!" & vbCrLf & "Работа скрипта завершена!"_
          ,vbExclamation,"Внимание!!!"
      End If
      MsgFileStr.Close
      If Result = 6 then
         Set TextStream = FolderList.OpenAsTextStream(1)
         StrFolder = vbNullString
         While Not TextStream.AtEndOfStream
               StrFolder = TextStream.ReadLine()
               Set TextStreamFL = FileList.OpenAsTextStream(1)
               StrFiles = vbNullString
               While Not TextStreamFL.AtEndOfStream
                     StrFiles = TextStreamFL.ReadLine()
                     If FSO.FolderExists (StrFolder) Then
                        Set CopyObj = ObjShellApp.NameSpace(StrFolder)
                        CopyObj.CopyHere StrFiles,20
                     End If
               Wend
               TextStreamFL.Close
         Wend
         TextStream.Close
         MsgBox "Скопировано...",vbExclamation,"Внимание!"
      End If
      FSO.deletefile PathTempFile, 0
   else
    Set FileListFile = FSO.GetFile(Argument)
    PathTempFile = Tempdir & "\FileListTemp.txt"
    FileListFile.Copy PathTempFile
    MsgBox "Список файлов для копирования создан!",vbExclamation,"Внимание!!!"
   End If
End If
WScript.Quit
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group