Показать полную графическую версию : Проверка списка имен в цикле
ничо не понимаю)
Честно я бы на дельфи давно написал консольную утилиту у которой на входе имя файла, а она бы проверяла наличие файлов с именем+1 и именем-1. И выдавала errorlevel )
Запустил бы её просто для каждого файла циклом.
Опиум, какая разница, на чём писать?! Я вот, например, тоже не пойму — Ваш алгоритм: при чём тут имя+1/имя-1 и errorlevel. Изложите его подробнее.
bombording
27-12-2013, 15:47
Iska, Все отлично работает. Скрипт проходит по всем файлам. Большое спасибо!
Iska, алгоритм простой, на входе утилиты имя файла, на выходе имена "соседей", наличие которых нужно проверить.
т.е. например
>example1.exe file1zz.sd
file1zy.sd file200.sd
>
Iska, алгоритм простой, на входе утилиты имя файла, на выходе имена "соседей", наличие которых нужно проверить. »
И что это нам, простите, даёт?!
bombording
07-04-2014, 13:52
Iska, Добрый день. Прошу прощение за свою назойливость. Безумно признателен вам за подобное решение.
Возможно ли сделать так что бы скрипт искал файлы не по маске файла, а только по трем последним символам?
Сейчас скрипт отлично ищет файлы по маске "file" & arr10To36(x) & arr10To36(y) & arr10To36(z) & ".sd", но маска файлов недавно поменялась на хаотичную и теперь нужно что бы скрипт работал вне зависимости от маски и искал файлы только по системе счисления (три последних символа в файле 001 ... 002 ... и т.д.) ^.*arr10To36(x) & arr10To36(y) & arr10To36(z) & "\.sd$"
Option Explicit
Dim strSourceFolder
Dim arr10To36
Dim objFSO
Dim x, y, z
Dim i, j, k
Dim strFileName
Dim strLastFileName
strSourceFolder = "E:\Песочница\0340"
arr10To36 = Split("0;1;2;3;4;5;6;7;8;9;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z", ";")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strSourceFolder) Then
If ExistLastName(x, y, z) Then
strLastFileName = "file" & arr10To36(x) & arr10To36(y) & arr10To36(z) & ".sd"
For i = 0 To 35
For j = 0 To 35
For k = 0 To 35
If i = 0 And j = 0 And k = 0 Then
Else
strFileName = "file" & arr10To36(i) & arr10To36(j) & arr10To36(k) & ".sd"
If Not objFSO.FileExists(objFSO.BuildPath(strSourceFolder, strFileName)) Then
WScript.Echo "Can't find file [" & strFileName & "]."
End If
If strFileName = strLastFileName Then
WScript.Quit 0
End If
End If
Next
Next
Next
End If
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 1
End If
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
Function ExistLastName(ByRef x, ByRef y, ByRef z)
ExistLastName = False
For x = 35 To 0 Step -1
For y = 35 To 0 Step -1
For z = 35 To 0 Step -1
If x = 0 And y = 0 And z = 0 Then
Else
If objFSO.FileExists(objFSO.BuildPath(strSourceFolder, "file" & arr10To36(x) & arr10To36(y) & arr10To36(z) & ".sd")) Then
ExistLastName = True
Exit Function
End If
End If
Next
Next
Next
End Function
'=============================================================================
Как-то так:
Option Explicit
Const adVarChar = 200
Dim strSourceFolder
Dim arr10To36
Dim objFSO
Dim objRegExp
Dim objFile
Dim strLastRightThreeSimbols
Dim objDictionary
Dim i
Dim strRightThreeSimbols
strSourceFolder = "E:\Песочница\0340"
arr10To36 = Split("0;1;2;3;4;5;6;7;8;9;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z", ";")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strSourceFolder) Then
Set objRegExp = WScript.CreateObject("VBScript.RegExp")
With objRegExp
.Pattern = "^.*([0-9a-z]{3})\.sd$"
.IgnoreCase = True
End With
With WScript.CreateObject("ADODB.Recordset")
With .Fields
.Append "RightThreeSimbols", adVarChar, 3
End With
.Open
.Sort = "RightThreeSimbols DESC"
For Each objFile In objFSO.GetFolder(strSourceFolder).Files
If objRegExp.Test(objFile.Name) Then
.AddNew Array("RightThreeSimbols"), Array(objRegExp.Execute(objFile.Name).Item(0).Submatches.Item(0))
End If
Next
If .RecordCount > 0 Then
.MoveFirst
strLastRightThreeSimbols = .Fields.Item("RightThreeSimbols").Value
.Sort = "RightThreeSimbols ASC"
.MoveFirst
Set objDictionary = WScript.CreateObject("Scripting.Dictionary")
Do Until .EOF
strRightThreeSimbols = .Fields.Item("RightThreeSimbols").Value
If Not objDictionary.Exists(strRightThreeSimbols) Then
objDictionary.Add strRightThreeSimbols, strRightThreeSimbols
End If
.MoveNext
Loop
For i = 1 To 36^3 - 1
strRightThreeSimbols = DecimalTo36(i)
If Not objDictionary.Exists(strRightThreeSimbols) Then
WScript.Echo "Can't find file for mask [*" & strRightThreeSimbols & ".sd]."
End If
If StrComp(strRightThreeSimbols, strLastRightThreeSimbols, vbTextCompare) = 0 Then
Exit For
End If
Next
Set objDictionary = Nothing
Else
WScript.Echo "Nothing found by pattern."
End If
.Close
End With
Set objRegExp = Nothing
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 1
End If
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
Function DecimalTo36(i)
Dim iHundreds, iHundreds36
Dim iTens
Dim iOnes
iHundreds = i \ 36^2
iHundreds36 = iHundreds * 36^2
iTens = (i - iHundreds36) \ 36
iOnes = (i - (iHundreds36 + iTens * 36))
DecimalTo36 = arr10To36(iHundreds) & arr10To36(iTens) & arr10To36(iOnes)
End Function
'=============================================================================
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC