2013-04-17 5 views
2

Я пытаюсь написать сценарий VB (никогда не пытался раньше) - мне нужно его искать в папке '\ file001 \ source $' - пока в папке поиск всех ' Update.exe'files - если это делается вручную, в Windows это занимает много времени! Я бы хотел, чтобы все файлы, найденные с этим именем, были скопированы в новую папку.VB script - поиск файла в каталоге

Глядя на различные справочные форумы, я становлюсь все более и более запутанным.

Ниже то, что я пытался:

Set fso = CreateObject("Scripting.FileSystemObject") 
ShowSubfolders fso.GetFolder("\\file001\source$") 

'FOLDERNAME = "\ file001 \ источник $" ' имя_файла = "Updater.exe"

Function ShowSubFolders(Folder) 
    For Each Subfolder in Folder.SubFolders 
     Wscript.Echo Subfolder.Path 
     ShowSubFolders Subfolder 
    Next 
End Function 

Это искать через папку, рекурсивно через подпапки папок, чтобы найти все файлы с этим именем.

Я также провел исследование в -directory.getfiles. Но понятия не имею, если это правильное направление.

Как новичок в сценарии VB, я исследовал и попытался поиграть с скриптом vb, чтобы получить нужную мне функцию. Я был бы признателен за любую помощь, которую я могу получить.

Опять же - моя цель - найти все файлы в данной папке и подпапках с именем update.exe, а затем скопировать эти файлы в новую папку. Спасибо заранее.

+1

http://stackoverflow.com/questions/7161739/vbs-how-can-i-check-if-a-file-exists – Guy

+0

Немного запутался по этой ссылке. Это решение другой проблемы? Я не хочу открывать файл или брать первую строку. – Kiwi

ответ

1

Если вы хотите, чтобы проверить содержимое одной папки для существования конкретного файла вы можете сделать это так:

Set fso = CreateObject("Scripting.FileSystemObject") 

foldername = "\\file001\source$" 
filename = "Update.exe" 

If fso.FileExists(fso.BuildPath(foldername, filename)) Then 
    WScript.Echo filename & " exists." 
End If 

Если вы хотите также проверить вложенные папки foldername, вам необходимо перечислить их в подпапки с чем-то вроде this. Вы можете либо интегрировать чек из приведенного выше примера кода в цикле через вложенные папки, или добавить еще один цикл над файлами в папке:

Set fso = CreateObject("Scripting.FileSystemObject") 

CopyUpdater fso.GetFolder("\\file001\source$") 

Sub CopyUpdater(fldr) 
    For Each f In fldr.Files 
    If LCase(f.Name) = "update.exe" Then 
     'copy file to somewhere else 
    End If 
    Next 

    For Each sf In fldr.SubFolders 
    CopyUpdater sf 
    Next 
End Sub 
+0

Благодарим вас за помощь в поиске одного файла. Я опубликовал мое обновление выше - я боюсь также с дополнительными подкачками проверки. – Kiwi

-1
dim sFilename 

Dim objDict 
Set objDict=CreateObject("Scripting.Dictionary") 
sFilename = "" 

'root folder path where subfolder exists 
fileLocation="C:\Users\u258251\Desktop\TestSubfolder" 

Dim objFSO 'File System Object 
Set objFSO = CreateObject("Scripting.FileSystemObject") 

'Add all files with specific extention to dictonary 

Call Recurse(fileLocation) 



ItemArray = objDict.Items 


'Loop through dictonary 
For i = 0 To objDict.count -1 
    sFilename = sFilename & ItemArray(i) & VBCRLF 
Next 

msgbox(sFilename) 

'find a specific file by name and return path 
if objDict.Exists("DP103.txt") then 
    msgbox(objDict.Item("DP103.txt")) 
end if 

Sub Recurse(strFolderPath) 
    Dim objFolder 
    Set objFolder = objFSO.GetFolder(strFolderPath) 
    Dim objFile 
    Dim objSubFolder 

    For Each objFile In objFolder.Files 
     If (InStr(objFile.Name, ".") > 0) Then 

      'proceed if extention is .txt 
      If (LCase(Mid(objFile.Name, InStrRev(objFile.Name, "."))) = ".txt") Then 
       if objDict.Exists(objFile.Name)=false then 
       'add files and path to dictonary 
       objDict.Add objFile.Name,objfile.Path 
       End if 
      End if 
     End If 
    Next 

    For Each objSubFolder In objFolder.SubFolders 
     Call Recurse(objSubFolder.Path) 
    Next 
End Sub 
+1

'objDict.Add objFile.Name, objfile.Path' не будет работать (т. Е. Потерять файлы), если у вас есть файлы с тем же именем в разных папках. –

+0

Ekkehard: извините, раньше форматирование было неправильным, но его проверка «если objDict.Exists (objFile.Name) = false then "перед добавлением в словарь –

+0

попробуйте понять проблему (ключи словаря уникальны). –

 Смежные вопросы

  • Нет связанных вопросов^_^