jehaz
|
Posted: Thu Aug 16, 2007 20:39 Post subject: |
|
|
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 |
|
|