Страница: 1 |
|
Вопрос: копирование новых файлов На vbs
|
Добавлено: 19.12.06 17:33
|
|
Автор вопроса: alroy
|
у меня такая проблема мне нужно из одной директории (папка на сервере )скопировать файлы в другую директорию но токо новые я скрипт нарыл в инете изменил под себя но проблема в том что етот скрипт мне нужно применять к разным папкам например из c:\temp1 в с:\ppp1 из с:\temp2 в c:\ppp2
вот ето то и не получаеться вот мой скрипт
'==========================================================================
'
' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.0
'
' NAME:
'
' AUTHOR: alroy , a
' DATE : 31.10.2006
'
'
' COMMENT: Копирует файлы из одной директории в другую, при совпадении
' имен в директориях, копирование не производится
'
'==============================================================
'
'
'==Функция для проверки есть ли файл с заданным именем в директории=
Function MyF(Name)
Dim S
Set FSO=WScript.CreateObject("Scripting.FileSystemObject")
'Создаем объект Folder для папки куда копировать
Set F=FSO.GetFolder(FolderName)
'Создаем коллекцию файлов (путь предыдущего шага)
Set CollFile=F.Files
S="Копируем"
' Цикл по элементам коллекции для поиска совпадений имен
For Each File In CollFile
If Name= Left(File.Name, InStrRev(File.Name, ".")-1) Then
S="Некопируем"
'WSH.Echo Mid (File.Name,InStrrev(File.name,"."))
'WSH.Echo Left(File.Name, InStrRev(File.Name, ".")-1)
End If
Next
MyF=S
End Function
'==========Конец функции==========================
FolderName="C:\tmp\"'Директория куда копировать
CopyName="C:\util\vbs\vbs2\3\q\"'Директория откуда копировать
Dim FolderName,CopyName,i,p,pa
i=0
Set FSO=WSH.CreateObject("Scripting.FileSystemObject")
'Создаем объект Folder откуда будем копировать
Set Fold=FSO.GetFolder(CopyName)
'Коллекция файлов для копирования
Set ColFil=Fold.Files
'Цикл по коллекции
For Each File In ColFil
'Вытаскиваем имя файла
p= Left(File.Name, InStrRev(File.Name, ".")-1)
pa = File.name
Set FSO=WScript.CreateObject("Scripting.FileSystemObject")
'Создаем объект файл
Set File=FSO.GetFile(CopyName & pa)
'Вызываем функцию
If MyF(p)="Копируем" Then
'Если в директории нет файла с именем File.Name копируем
FSO.CopyFile CopyName & pa,FolderName
'Здесь так для сервиса
i=i+1
End If
'Переходим к следующему файлу
Next
'Для сервиса если не нравится закоментируйте
WSH.Echo "Скопированно " & i & " файлов"
Set FSO=Nothing
Set Fold=Nothing
Set ColFil=Nothing
Ответить
|
Номер ответа: 3 Автор ответа:
Шпион
![](images/starBlue.gif)
ICQ: 250543104 ![номер 250543104](http://wwp.icq.com/scripts/online.dll?icq=250543104&img=5)
Вопросов: 13 Ответов: 118
|
Профиль | | #3
|
Добавлено: 20.12.06 12:47
|
'On Error Resume Next
strFolderSrc="c:\temp\"
strFolderDst="c:\temp1\"
If Not Right(strFolderSrc,1)="\" Then strFolderSrc=strFolderSrc & "\"
If Not Right(strFolderDst,1)="\" Then strFolderDst=strFolderDst & "\"
Wscript.Echo "Скопировано из " & strFolderSrc & " в " & strFolderDst & " " & FilesCopied(strFolderSrc, strFolderDst) & " файл(а,ов)"
Wscript.Quit
Function FilesCopied(src, dst)
counter=0
Set objFSO=Createobject("Scripting.Filesystemobject"
Set objSrc=objFSO.GetFolder (src)
Set objFiles=objSrc.Files
For Each objFile in objFiles
'
' any code you want
'
n=objFile. Name
If Not objFSO.FileExists(dst & n) Then
counter=counter + 1
objFSO.CopyFile src & objFile. Name, dst & n
End If
Next
FilesCopied=counter
End Function
проверяйте код. если надо - ставь в начале On Error Resume Next
Ответить
|
Номер ответа: 6 Автор ответа:
Шпион
![](images/starBlue.gif)
ICQ: 250543104 ![номер 250543104](http://wwp.icq.com/scripts/online.dll?icq=250543104&img=5)
Вопросов: 13 Ответов: 118
|
Профиль | | #6
|
Добавлено: 21.12.06 06:39
|
'On Error Resume Next
strFolderSrc="c:\temp\"
strFolderDst="c:\temp1\"
If Not Right(strFolderSrc,1)="\" Then strFolderSrc=strFolderSrc & "\"
If Not Right(strFolderDst,1)="\" Then strFolderDst=strFolderDst & "\"
Wscript.Echo "Скопировано из " & strFolderSrc & " в " & strFolderDst & " " & FilesCopied(strFolderSrc, strFolderDst) & " файл(а,ов)"
Wscript.Quit
Function FilesCopied(src, dst)
counter=0
Set objFSO=Createobject("Scripting.Filesystemobject"
Set objSrc=objFSO.GetFolder (src)
Set objFiles=objSrc.Files
For Each objFile in objFiles
If FileExists(dst, objFile. Name)= False Then
counter=counter + 1
objFSO.CopyFile src & objFile. Name, dst & objFile. Name
End If
Next
FilesCopied=counter
End Function
Function FileExists(dst, Filename)
FileExists= False
arr1=Split(lcase(Filename),"."
fn=""
For i=0 To Ubound(arr1)-1
fn=fn & arr1(i) & "."
Next
Set objFSO=Createobject("Scripting.Filesystemobject"
Set objFolder=objFSO.GetFolder(dst)
Set objFiles=objFolder.Files
Wscript.Echo FileName
For Each objFile in objFiles
fn1=""
arr=Split(lcase(objFile. Name),"."
For i=0 To Ubound(arr)
fn1=fn1 & arr(i) & "."
Next
If fn=fn1 Then FileExists= True: Exit For
Next
Set objFiles= Nothing
Set objFolder= Nothing
Set objFSO= Nothing
End Function
ну е-мое!!!
Ответить
|
Номер ответа: 8 Автор ответа:
alroy
![](images/starRed.gif) ![](images/starRed.gif) ![](images/starRed.gif)
Вопросов: 3 Ответов: 28
|
Профиль | | #8
|
Добавлено: 21.12.06 12:08
|
слушай а я решил эту проблему по другому сравни незнаю какой лучше способ лучше !!!!
'==========================================================================
'
' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.0
'
' NAME:
'
' AUTHOR: alroy , post
' DATE : 20.12.2006
'
' COMMENT:
' Вложенные циклы for each
'==========================================================================
FolderName="C:\tmp\"'Директория куда копировать
CopyName="C:\util\vbs\vbs2\3\q\"'Директория откуда копировать
strFolderSrc="c:\temp\"
strFolderDst="c:\temp1\"
Wscript.Echo "Скопировано из " & strFolderSrc & " в " & strFolderDst & " " & FilesCopied(strFolderSrc, strFolderDst) & " файл(а,ов)"
Wscript.Echo "Скопировано из " & CopyName & " в " & FolderName & " " & FilesCopied(CopyName, FolderName) & " файл(а,ов)"
Function FilesCopied(fold_int, copy_int)
counter=0
Dim S,Found,p
Set FSO=WScript.CreateObject("Scripting.FileSystemObject"
Set Fold=FSO.GetFolder(copy_int)
Set ColFil=Fold.Files
'Цикл по коллекции
For Each File_b In ColFil
S = Left(File_b.Name, InStrRev(File_b.Name, "." -1)
pa = File_b.name
Set F=FSO.GetFolder(fold_int)
Set CollFile=F.Files
Found = True
For Each File In CollFile
p = Left(File.Name, InStrRev(File.Name, "." -1)
If S = p Then
Found = False
End If
Next
If Found = True Then
Set File_b=FSO.GetFile(copy_int & pa)
counter=counter + 1
FSO.CopyFile copy_int & pa,FolderName
End If
Next
FilesCopied=counter
End Function
Ответить
|
Номер ответа: 9 Автор ответа:
Шпион
![](images/starBlue.gif)
ICQ: 250543104 ![номер 250543104](http://wwp.icq.com/scripts/online.dll?icq=250543104&img=5)
Вопросов: 13 Ответов: 118
|
Профиль | | #9
|
Добавлено: 21.12.06 12:38
|
1) если InstrRev <=1 - Left не сможет выполнить операцию
практически это может и не встретиться, но на всякий случай.
2) если работаешь со строками, которые будешь сравнивать - делай их одного регистра, функции Lcase или Ucase на твой личный выбор
3) очищай объект, после того как закончил с ним работать Set obj = Nothing
в частности после
For Each File In CollFile
p = Left(File. Name, InStrRev(File. Name, "." ![;)](./smiles/animated/4.gif) -1)
If S = p Then
Found = False
End If
Next
нао делать
Set F = Nothing
Set CollFile = Nothing
4) конструкция Set File_b=FSO.GetFile(copy_int & pa)
мне кажется лишней. CopyFile мы можем и так сделать.
а в целом - все правильно
Ответить
|
Страница: 1 |
Поиск по форуму