PDA

Показать полную графическую версию : [решено] Сравнить три списка имен файлов между собой.


bombording
19-12-2013, 11:54
Добрый день.

Имеются три папки:
Папка 1:
файл1
файл2
файл3

Папка 2:
файл9
файл10
файл11

Папка 3:
файл1
файл2
файл3
файл4
файл5
файл6
файл7
файл8
файл9
файл10
файл11
файл12
...

В папке номер 3 должны находится файлы из папки 1 и папки 2, а так же другие файлы.

Задача:
- Получить три списка файлов.
- Сравнить списки из папок 1 и 2 со списком 3.
- В случае если в списке 3 нет какого то файла из списка 1 или 2, выдать ошибку.


Я пока реализовал получение списка через FileSystemObject. А вот со сравнением у меня проблемы...
Помогите пожалуйста.

Option Explicit

Dim fso, f, f1, fc, s
Dim d, dc, d1
Dim e, ec, e1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder("D:\test\1")
Set d = fso.GetFolder("D:\test\2")
Set e = fso.GetFolder("D:\test\3")
Set fc = f.Files
Set dc = d.Files
Set ec = e.Files

For Each f1 in fc
For Each d1 in dc
IF f1.name<>d1.name THEN
Wscript.Echo d1.name
ELSE
Wscript.Echo "No"
END IF
Next
Next

Iska
19-12-2013, 13:27
Option Explicit

Dim strSourceFolder01
Dim strSourceFolder02
Dim strDestFolder

Dim objFile

Dim objDictionary
Dim elem

strSourceFolder01 = "C:\Песочница\036\01"
strSourceFolder02 = "C:\Песочница\036\02"
strDestFolder = "C:\Песочница\036\03"

With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(strSourceFolder01) Then
If .FolderExists(strSourceFolder02) Then
If .FolderExists(strDestFolder) Then
Set objDictionary = WScript.CreateObject("Scripting.Dictionary")

For Each objFile In .GetFolder(strSourceFolder01).Files
objDictionary.Add objFile.Name, objFile.Name
Next

For Each objFile In .GetFolder(strSourceFolder02).Files
If Not objDictionary.Exists(objFile.Name) Then
objDictionary.Add objFile.Name, objFile.Name
End If
Next

For Each elem In objDictionary.Items
If Not .FileExists(.BuildPath(strDestFolder, elem)) Then
WScript.Echo "выдать ошибку"
WScript.Quit 4
End If
Next
Else
WScript.Echo "Destination folder [" & strDestFolder & "] not found."
WScript.Quit 3
End If
Else
WScript.Echo "Source folder [" & strSourceFolder02 & "] not found."
WScript.Quit 2
End If
Else
WScript.Echo "Source folder [" & strSourceFolder01 & "] not found."
WScript.Quit 1
End If
End With

WScript.Quit 0

или:
Option Explicit

Dim strSourceFolder01
Dim strSourceFolder02
Dim strDestFolder

Dim objFile

Dim objDictionary
Dim elem

strSourceFolder01 = "C:\Песочница\036\01"
strSourceFolder02 = "C:\Песочница\036\02"
strDestFolder = "C:\Песочница\036\03"

With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(strSourceFolder01) Then
If .FolderExists(strSourceFolder02) Then
If .FolderExists(strDestFolder) Then
Set objDictionary = WScript.CreateObject("Scripting.Dictionary")

For Each objFile In .GetFolder(strDestFolder).Files
objDictionary.Add objFile.Name, objFile.Name
Next

For Each objFile In .GetFolder(strSourceFolder02).Files
If Not objDictionary.Exists(objFile.Name) Then
WScript.Echo "выдать ошибку"
WScript.Quit 4
End If
Next

For Each objFile In .GetFolder(strSourceFolder01).Files
If Not objDictionary.Exists(objFile.Name) Then
WScript.Echo "выдать ошибку"
WScript.Quit 4
End If
Next
Else
WScript.Echo "Destination folder [" & strDestFolder & "] not found."
WScript.Quit 3
End If
Else
WScript.Echo "Source folder [" & strSourceFolder02 & "] not found."
WScript.Quit 2
End If
Else
WScript.Echo "Source folder [" & strSourceFolder01 & "] not found."
WScript.Quit 1
End If
End With

WScript.Quit 0

bombording
19-12-2013, 15:19
Iska, Большое спасибо.
Второй пример более понятный.




© OSzone.net 2001-2012