Мне кажется такой вариант должен работать и на FAT(к тому же будет работать если "внезапно" однотипных файлов более двух):
' VB Script Document
Option Explicit
Dim MonitorDir, OutInfo, OutCoal, OutTax
MonitorDir = "c:\aScripts\vbs\script-coding_01\In\"
OutInfo = "c:\aScripts\vbs\script-coding_01\Out\Информация\"
OutCoal = "c:\aScripts\vbs\script-coding_01\Out\Уголь\"
OutTax = "c:\aScripts\vbs\script-coding_01\Out\Сборы\"
chkFolder OutInfo
chkFolder OutCoal
chkFolder OutTax
Dim tmplInfo, tmplCoal, tmplTax
tmplInfo = "Прочая информация"
tmplCoal = "Информация по углю"
tmplTax = "Сборы на"
Dim dicInfo, dicCoal, dicTax
Set dicInfo = CreateObject("Scripting.Dictionary")
Set dicCoal = CreateObject("Scripting.Dictionary")
Set dicTax = CreateObject("Scripting.Dictionary")
Dim fso, WshShell
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
Dim folder, file
If fso.FolderExists(MonitorDir) Then
Set folder = fso.GetFolder(MonitorDir)
Else
wscript.echo "Исходный каталог задан неверно!"
wscript.quit
End If
Dim prefix, data
For Each file In folder.files
prefix = trim(left(file.name,len(file.name) - 14))
data = left(trim(right(file.name, 14)),10)
Select Case prefix
Case tmplInfo
dicInfo.add data, file.name
Case tmplCoal
dicCoal.add data, file.name
Case tmplTax
dicTax.add data, file.name
End Select
Next
Dim arrTMP, i, lastData
If dicInfo.Count > 1 Then chkFiles dicInfo, OutInfo
If dicCoal.Count > 1 Then chkFiles dicCoal, OutCoal
If dicTax.Count > 1 Then chkFiles dicTax, OutTax
Set fso = Nothing
Set WshShell = Nothing
Sub chkFiles(Dic, ToDir)
arrTMP = Dic.Keys
lastData = vbNullString
For i = lBound(arrTMP) To uBound(arrTMP)
If len(lastData) = 0 Then lastData = arrTMP(i) 'первый проход
If cDate(lastData) < cDate(arrTMP(i)) Then
fso.GetFile(fso.BuildPath(MonitorDir,Dic.Item(lastData))).Move ToDir
lastData = arrTMP(i)
elseif cDate(lastData) > cDate(arrTMP(i)) Then
fso.GetFile(fso.BuildPath(MonitorDir,Dic.Item(arrTMP(i)))).Move ToDir
End If
Next
End Sub
'##############################################################################
'######## проверка-создание дерева каталогов ##########
'##############################################################################
' 1/2
Dim s_chkPath : s_chkPath = ""
Sub chkFolder(s_path) ' проверка существования файла(логфайла, например)
Dim s_fso, s_a
Set s_fso = CreateObject("Scripting.FileSystemObject")
If Not s_fso.FolderExists(s_path) Then ' если папка не существует
If StrComp(right(s_path,1),"\") = 0 Then ' папка с пустым именем нам не нужна :)
s_chkPath = left(s_path, len(s_path) - 1)
Else
s_chkPath = s_path
End If
' разбиваем путь на состовляющие
Dim s_arrFolderPath(), s_regEx, s_Match, s_Matches ' Create variable.
Set s_regEx = New RegExp ' Create regular expression.
s_regEx.Pattern = "(\\){1}?" ' Set pattern.
s_regEx.Global = True ' Set global applicability.
Set s_Matches = s_regEx.Execute(s_path) ' Execute search.
Redim s_arrFolderPath(s_Matches.count)
s_chkPath = s_fso.BuildPath (s_chkPath,"")
wscript.echo "проверяемый путь => " & s_path
Call MkFldrTree(s_arrFolderPath, s_fso.BuildPath(s_chkPath,""), 0)
End If
Set s_a = Nothing
Set s_fso = Nothing
End Sub
' 2/2
Sub MkFldrTree(Byref s_arr(), s_path2chk, s_fi) ' формирование дерева каталогов
'wscript.echo fi
Dim s_fso
Set s_fso = CreateObject("Scripting.FileSystemObject")
If s_fso.FolderExists(s_path2chk) Then ' если полученный путь существует...
If StrComp(s_path2chk, s_chkPath, vbTextCompare) <> 0 Then
Dim s_fi2
For s_fi2 = s_fi - 1 To 0 step - 1
wscript.echo "создаю папку: " & s_path2chk & "\" & s_arr(s_fi2)
s_fso.CreateFolder s_path2chk & "\" & s_arr(s_fi2)
s_path2chk = s_path2chk & "\" & s_arr(s_fi2)
Next
wscript.echo "done"
End If
Else ' если полученный путь НЕ существует...
wscript.echo s_path2chk & " - не найдена"
' укорачиваем путь на один уровень
s_arr(s_fi) = Right(s_path2chk, Len(s_path2chk)-InStrRev(s_path2chk, "\", -1, vbTextCompare))
s_path2chk = Left(s_path2chk, InStrRev(s_path2chk, "\", -1, vbTextCompare) - 1)
s_fi = s_fi + 1
Call MkFldrTree(s_arr, s_path2chk, s_fi)
End If
Set s_fso = Nothing
End Sub
'##############################################################################
Для некоторой универсальности для каждого из трёх типов документов архивная папка файлов задаётся отдельно.
Вывод процесса в лог-файл не делал(рутина, не интересно ).
Если папок архивных не существует, то они будут созданы(в оригинале это была заготовка под текстовый файл, но и с папками жить будет). Правда предполагается, что права на запись в папке содержащей каталог архивных папок у пользователя запускающего скрипт имеются(обработки отказа в доступе нет).
Если исходной папки не существует - сообщение в консоль и завершение работы скрипта.
Подозреваю что при отличной от русской локали(т.е. формат даты не dd.mm.yyyy) сравнение дат будет некорректно - можно и это учесть, просто больше писать прийдётся.