Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - ASP и VBScript

Страница: 1 | 2 | 3 |

 

  Вопрос: Нужна помощь в написании скрипта VBS Добавлено: 21.03.11 00:47  

Автор вопроса:  Влерий
Нужен скрипт который будет осуществлять поиск файлов с расширениями *.doc *.docx *.txt по заданному пути(ям) (имя файлов любое)
И что бы копировал найденные файлы в указанную папку
и записывал пути файлов в файл *.txt
Нашел в интерне кое что но не знаю как правильно изменить и довести его до ума...

Set FSO = CreateObject("Scripting.FileSystemObject")
Set TF = FSO.copyfolder("xxx")

Const FOR_READING = 1


strFolder = "yyy"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strFolder)
TF.Write objFolder.Path
TF.Write vbcrlf
Set colFiles = objFolder.Files
For Each objFile In colFiles
TF.Write objFile.Path
TF.Write vbcrlf
Next
ShowSubFolders(objFolder)

Sub ShowSubFolders(objFolder)
Set colFolders = objFolder.SubFolders
For Each objSubFolder In colFolders
TF.Write objSubFolder.Path
TF.Write vbcrlf
Set colFiles = objSubFolder.Files
For Each objFile In colFiles
TF.Write objFile.Path
TF.Write vbcrlf
Next
ShowSubFolders(objSubFolder)
Next
End Sub

Если есть возможность то киньте ответ на i.am.lion@yandex.ru
Буду благодарен
Заранее спасибо!

Ответить

  Ответы Всего ответов: 35  

Номер ответа: 1
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #1 Добавлено: 21.03.11 14:46
' Копирование, удаление файлов.vbs
  1.  
  2. Option Explicit
  3. On Error Resume Next
  4. Dim objFSO, sLog, sPath, sDestPath, sExt, bLog, bCopy, bDel, bAskDel
  5.  
  6.  
  7. bLog = True
  8. bCopy = True
  9. bDel = False
  10. bAskDel = True
  11. sExt = LCase("doc,docx,txt")
  12.  
  13.  
  14. sPath = InputBox("Укажите папку!", "Копирование, удаление файлов", "C:\Documents and Settings")
  15. 'sPath = "C:\Documents and Settings"
  16. If sPath = "" Then WScript.quit
  17.  
  18. sDestPath = Left(WScript.ScriptFullName, (Len(WScript.ScriptFullName)) - (Len(WScript.ScriptName)))
  19. sDestPath = sDestPath & sExt & "\"
  20.  
  21.  
  22.  
  23.  
  24. WScript.Echo ("Поиск...")
  25. Set objFSO = CreateObject("Scripting.FileSystemObject")
  26. If objFSO.FolderExists(sDestPath) = 0 Then objFSO.CreateFolder sDestPath
  27. FindInFolder (sPath)
  28. FindInSubFolders (sPath)
  29. If bLog Then
  30.   if sLog <> "" then
  31.    Dim objFileLog, sLogPath
  32.    sLogPath = Left(WScript.ScriptName, (Len(WScript.ScriptName) - 4)) & "_(" & DatePart("d", Date) & "." & DatePart("m", Date) & "." & DatePart("yyyy", Date) & ")." & "log"
  33.    Set objFileLog = objFSO.OpenTextFile(sLogPath, 2, True)
  34.    sLog = Mid(sLog, 1, Len(sLog) - 2)
  35.    objFileLog.Write sLog
  36.    objFileLog.Close
  37.    Set objFileLog = Nothing
  38.   End If
  39. End If
  40. Set objFSO = Nothing
  41. WScript.Echo ("Поиск завершен!")
  42. WScript.quit
  43.  
  44.  
  45.  
  46.  
  47. Sub FindInSubFolders(folderspec)
  48. On Error Resume Next
  49. Dim f, f1, sf
  50. Set f = objFSO.GetFolder(folderspec)
  51. Set sf = f.SubFolders
  52. For Each f1 In sf
  53.   FindInFolder (f1.Path)
  54.   FindInSubFolders (f1.Path)
  55. Next
  56. End Sub
  57.  
  58.  
  59. Sub FindInFolder(folderspec)
  60. On Error Resume Next
  61. Dim f, f1, fc, ext, s, i, ExtensionArray, ArrayLine, ArrayCount, RetDel
  62. Set f = objFSO.GetFolder(folderspec)
  63. Set fc = f.Files
  64.  
  65. If sExt <> "" Then
  66.     ExtensionArray = Split(sExt, ",")
  67.     ArrayLine = UBound(ExtensionArray)
  68. End If
  69.  
  70.  
  71. For Each f1 In fc
  72.  
  73.  If sExt = "" Then
  74.  
  75.     If bLog Then sLog = sLog & f1.Path & vbCrLf
  76.     If bCopy Then objFSO.CopyFile f1.Path, sDestPath
  77.     If bDel Then
  78.         If bAskDel Then
  79.             RetDel = MsgBox(f1.Path, 4 + 32, "Удалить файл?")
  80.             If RetDel = 6 Then objFSO.DeleteFile (f1.Path)
  81.         Else
  82.             objFSO.DeleteFile (f1.Path)
  83.         End If
  84.     End If
  85.  
  86.  Else
  87.  
  88.     ext = LCase(objFSO.GetExtensionName(f1.Path))
  89.     s = LCase(f1.Name)
  90.  
  91.     For ArrayCount = 0 To ArrayLine
  92.     'msgbox Trim(ExtensionArray(ArrayCount)) & vbcrlf & ArrayCount
  93.         If (ext = Trim(ExtensionArray(ArrayCount))) Then
  94.             If bLog Then sLog = sLog & f1.Path & vbCrLf
  95.             If bCopy Then objFSO.CopyFile f1.Path, sDestPath
  96.             If bDel Then
  97.                 If bAskDel Then
  98.                     RetDel = MsgBox(f1.Path, 4 + 32, "Удалить файл?")
  99.                     If RetDel = 6 Then objFSO.DeleteFile (f1.Path)
  100.                 Else
  101.                     objFSO.DeleteFile (f1.Path)
  102.                 End If
  103.             End If
  104.         Exit For
  105.         End If
  106.     Next
  107.  
  108.  End If
  109.  
  110. Next
  111. End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Влерий



Вопросов: 1
Ответов: 24
 Профиль | | #2 Добавлено: 21.03.11 22:21
В первой строке "предпологается наличие инструкции"

Ответить

Номер ответа: 3
Автор ответа:
 Влерий



Вопросов: 1
Ответов: 24
 Профиль | | #3 Добавлено: 21.03.11 22:40
Исправил
Но он не копирует найденные файлы
он создает папку "doc,docx,txt"
но ничего не копирует в неё

Ответить

Номер ответа: 4
Автор ответа:
 Влерий



Вопросов: 1
Ответов: 24
 Профиль | | #4 Добавлено: 21.03.11 22:56
Так всё исправил
но мне надо что бы он из нескольких мест ( например d:\123\ и c:\123\) осуществлял поиск файлов
И не выдавал окон на запрос от куда куда копировать (папки постоянные)

Ответить

Номер ответа: 5
Автор ответа:
 Влерий



Вопросов: 1
Ответов: 24
 Профиль | | #5 Добавлено: 21.03.11 23:23
И что надо поменять если мне надо будет найти файлы другого формата ???
Например к doc,docx,txt добавить еще bat или еще какой либо?

Ответить

Номер ответа: 6
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #6 Добавлено: 21.03.11 23:40
Но он не копирует найденные файлы
он создает папку "doc,docx,txt"
но ничего не копирует в неё

так а что там было не так?

но мне надо что бы он из нескольких мест ( например d:\123\ и c:\123\) осуществлял поиск файлов
создавай вторую копию скрипта и запускай ее следом за первой или переписывай алгоритм существующего.
самый простой способ изменения алгоритма (я так думаю...) добавление после 28 строчек:
  1. FindInFolder ("c:\123\")
  2. FindInSubFolders (c:\123\)

и так для каждой доп папки

И не выдавал окон на запрос от куда куда копировать
раскомментируй 15 строчку а 14 наоборот закомментируй

найти файлы другого формата
с 7 по 11 строчку идут парамнтры поиска, включая поиск указанных расширений (11 строчка, добавляй через запятую расширения, без пробелов, точек и тп)

чтобы убрать сообщения начала и конца поиска закомментируй 24 и 41 строчку

вроде все... но если что спрашивай

Ответить

Номер ответа: 7
Автор ответа:
 Влерий



Вопросов: 1
Ответов: 24
 Профиль | | #7 Добавлено: 22.03.11 00:36
Спасибо большое со всем разобрался и изначально всё было правильно написанно сорри... не туда смотрел
Только один вопрос!
что бы папку и лог файл он создавал не туда же где скрипт лежит а в определенную (D:\xxx)
И как правильно добавить атрибуты к папке и лог файлу (архивный и др)

Ответить

Номер ответа: 8
Автор ответа:
 Влерий



Вопросов: 1
Ответов: 24
 Профиль | | #8 Добавлено: 22.03.11 00:45
И определенное название папки дать а не по расширениям

Ответить

Номер ответа: 9
Автор ответа:
 Влерий



Вопросов: 1
Ответов: 24
 Профиль | | #9 Добавлено: 22.03.11 00:48
С именем разобрался

Ответить

Номер ответа: 10
Автор ответа:
 Влерий



Вопросов: 1
Ответов: 24
 Профиль | | #10 Добавлено: 22.03.11 00:50
и с путем папки тоже (sDestPath = sDestPath & D:\Администротирование\Работы\ & "\"
вот с расширениями проблема

Ответить

Номер ответа: 11
Автор ответа:
 Влерий



Вопросов: 1
Ответов: 24
 Профиль | | #11 Добавлено: 22.03.11 00:51
нет не разобрался
что то не получилось

Ответить

Номер ответа: 12
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #12 Добавлено: 22.03.11 00:51
ты в коде посмотри, там же все по-английски написано )
поменяй 19 строчку на это:
  1. sDestPath = "D:\xxx"


и 32 на это:
  1. sLogPath = "D:\xxx\" & "_(" & DatePart("d", Date) & "." & DatePart("m", Date) & "." & DatePart("yyyy", Date) & ")." & "log"

Ответить

Номер ответа: 13
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #13 Добавлено: 22.03.11 00:53
а насчет атрибутов...

то как то так
  1. set file=objFSO.getfile("C:\1.txt")
  2. file.attributes=0

Ответить

Номер ответа: 14
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #14 Добавлено: 22.03.11 00:57
да и кстати под "xxx" в строке "sDestPath = ";D:\xxx"" я подразумевал что там полный путь до папки
вроде такого: ";D:\папки\папки2\папка для скрипта\""

Ответить

Номер ответа: 15
Автор ответа:
 Влерий



Вопросов: 1
Ответов: 24
 Профиль | | #15 Добавлено: 22.03.11 01:01
ну я так и сделал первый раз но он перестает копировать файлы в папку

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам