VBS/WSH/JS - Проверка списка имен в цикле
-
bombording
Re: VBS/WSH/JS - Проверка списка имен в цикле
Iska, Работает! Но честно говоря не до конца понимаю как функция ExistLastName определяет что файл последний? За счет Step -1 ??
-
bombording
Re: VBS/WSH/JS - Проверка списка имен в цикле
Угу. Тремя вложенными циклами генерирует имена файлов с конца (т.е., с «filezzz.sd») и проверяет их существование. Как только будет найден существующий файл — происходит выход из функции. Поскольку переменные «x», «y» и «z» передаются в параметры функции по ссылке, то значения этих переменных (а не их копий в случае передаче по значению) могут быть изменены внутри функции. Посему после выхода из функции мы имеем в переменных «x», «y» и «z» 36-тиричные цифробуквы, однозначно определяющие последний существующий файл в алфавитном порядке.
-
bombording
Re: VBS/WSH/JS - Проверка списка имен в цикле
Цитата bombording:
P.S. и в переменной arr10To36 две буквы g.
Хех. Вот так и рождаются легенды. Замените вторую на «j». Тогда и первые скрипты не должны были корректно работать.
Цитата bombording:
Кстати заметил проблему сейчас.
Новая версия скрипта(которая выдергивает имя последнего файла) работает немного не корректно.
Сначала скрипт проверяет цифровые имена 001 - 090
Затем скрипт проверяет имена (буква цифра) 0a1 - 0z9
При этом скрипт не проверяет имена 01a - 09z а так же не проверяет 0aa - 0zz.
Поэтому из 600 моих файлов, скрипт проверил только 100 и успешно завершился.
Хотя старый скрипт, который не проверял последний файл (ваш пост №4), отрабатывал по всем 600 файлам.
Проверьте работоспособность после внесения исправления замеченной Вами описки.
P.S. и в переменной arr10To36 две буквы g.
VBS/WSH/JS - Проверка списка имен в цикле
Хех. Вот так и рождаются легенды. Замените вторую на «j». Тогда и первые скрипты не должны были корректно работать.
Цитата bombording:
Кстати заметил проблему сейчас.
Новая версия скрипта(которая выдергивает имя последнего файла) работает немного не корректно.
Сначала скрипт проверяет цифровые имена 001 - 090
Затем скрипт проверяет имена (буква цифра) 0a1 - 0z9
При этом скрипт не проверяет имена 01a - 09z а так же не проверяет 0aa - 0zz.
Поэтому из 600 моих файлов, скрипт проверил только 100 и успешно завершился.
Хотя старый скрипт, который не проверял последний файл (ваш пост №4), отрабатывал по всем 600 файлам.
VBS/WSH/JS - Проверка списка имен в цикле
Проверьте работоспособность после внесения исправления замеченной Вами описки.
-
Iska
Re: VBS/WSH/JS - Проверка списка имен в цикле
Iska, я до тестирования исправил вторую g на j.
Последний скрипт по прежнему проходит по 100 файлам. А вот старый скрипт безупречно отрабатывает на всех 600 файлах.... единственный минус это то что он не знает о последнем файле.
Проблема в том что мой последний файл это:
file0h5.sd
В первом скрипте проверка проходит последовательно:
Сначала с 001 по 009 потом 00a - 00z затем с 010 - 019 и так далее.
Поэтому он захватывает все 600 файлов.
А вот новый скрипт, который проверяет имя последнего файла работает немного по другому:
Сначала с 001 по 090 затем с 0a1 - 0z9 и дойдя до 0h5 (последний файл) успешно останавливается не захватывая остальные файлы с маской 01a - 09z и 0aa - 0zz. Поэтому он и отрабатывает всего около 100 файлов.
Подозреваю что проблема в
Код:
Если подставить вместо x,y,z - 35, то все работает. Но не работает проверка на последний файл...
Последний скрипт по прежнему проходит по 100 файлам. А вот старый скрипт безупречно отрабатывает на всех 600 файлах.... единственный минус это то что он не знает о последнем файле.
Проблема в том что мой последний файл это:
file0h5.sd
В первом скрипте проверка проходит последовательно:
Сначала с 001 по 009 потом 00a - 00z затем с 010 - 019 и так далее.
Поэтому он захватывает все 600 файлов.
А вот новый скрипт, который проверяет имя последнего файла работает немного по другому:
Сначала с 001 по 090 затем с 0a1 - 0z9 и дойдя до 0h5 (последний файл) успешно останавливается не захватывая остальные файлы с маской 01a - 09z и 0aa - 0zz. Поэтому он и отрабатывает всего около 100 файлов.
Подозреваю что проблема в
Код:
Код: Выделить всё
For i = 0 To x
For j = 0 To y
For k = 0 To zЕсли подставить вместо x,y,z - 35, то все работает. Но не работает проверка на последний файл...

-
bombording
Re: VBS/WSH/JS - Проверка списка имен в цикле
Iska, я до тестирования исправил вторую g на j.
Последний скрипт по прежнему проходит по 100 файлам. А вот старый скрипт безупречно отрабатывает на всех 600 файлах.... единственный минус это то что он не знает о последнем файле.
Проблема в том что мой последний файл это:
file0h5.sd
В первом скрипте проверка проходит последовательно:
Сначала с 001 по 009 потом 00a - 00z затем с 010 - 019 и так далее.
Поэтому он захватывает все 600 файлов.
А вот новый скрипт, который проверяет имя последнего файла работает немного по другому:
Сначала с 001 по 090 затем с 0a1 - 0z9 и дойдя до 0h5 (последний файл) успешно останавливается не захватывая остальные файлы с маской 01a - 09z и 0aa - 0zz. Поэтому он и отрабатывает всего около 100 файлов.
Подозреваю что проблема в
Код:
Если подставить вместо x,y,z - 35, то все работает. Но не работает проверка на последний файл...
Последний скрипт по прежнему проходит по 100 файлам. А вот старый скрипт безупречно отрабатывает на всех 600 файлах.... единственный минус это то что он не знает о последнем файле.
Проблема в том что мой последний файл это:
file0h5.sd
В первом скрипте проверка проходит последовательно:
Сначала с 001 по 009 потом 00a - 00z затем с 010 - 019 и так далее.
Поэтому он захватывает все 600 файлов.
А вот новый скрипт, который проверяет имя последнего файла работает немного по другому:
Сначала с 001 по 090 затем с 0a1 - 0z9 и дойдя до 0h5 (последний файл) успешно останавливается не захватывая остальные файлы с маской 01a - 09z и 0aa - 0zz. Поэтому он и отрабатывает всего около 100 файлов.
Подозреваю что проблема в
Код:
Код: Выделить всё
For i = 0 To x
For j = 0 To y
For k = 0 To zЕсли подставить вместо x,y,z - 35, то все работает. Но не работает проверка на последний файл...

-
Iska
Re: VBS/WSH/JS - Проверка списка имен в цикле
Цитата bombording:
А вот новый скрипт, который проверяет имя последнего файла работает немного по другому:
Сначала с 001 по 090 затем с 0a1 - 0z9
Нет.
Я создал весь перечень из 46655 [36^3 - 1] файлов:
Код:
Затем проверил Ваше утверждение, ограничившись файлом «file0az.sd»:
Код:
Я выделил существенные моменты:
Код:
Видно, что после «file090.sd» идёт «file091.sd», а вовсе не «file0a1.sd», который идёт, как и положено, после «file0a0.sd».
Цитата bombording:
и дойдя до 0h5 (последний файл) успешно останавливается не захватывая остальные файлы с маской 01a - 09z и 0aa - 0zz.
Тут, если честно, ничего не понял. «file01a.sd» и последующие превосходно попадают в перебор.
Таким образом, я пока не могу подтвердить сделанные Вами выводы. Скорее наоборот.
Как мы можем поступить? Создайте перечень Ваших файлов:
Код:
Полученный «List.txt» упакуйте в архив и выложите сюда.
А вот новый скрипт, который проверяет имя последнего файла работает немного по другому:
Сначала с 001 по 090 затем с 0a1 - 0z9
VBS/WSH/JS - Проверка списка имен в цикле
Нет.
Я создал весь перечень из 46655 [36^3 - 1] файлов:
читать дальше »
Код:
Код: Выделить всё
Option Explicit
Dim strSourceFolder
Dim arr10To36
Dim objFSO
Dim i, j, k
Dim strFileName
strSourceFolder = "E:\Песочница\0339"
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
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"
With objFSO.CreateTextFile(objFSO.BuildPath(strSourceFolder, strFileName))
.Close
End With
WScript.Echo strFileName
End If
Next
Next
Next
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 1
End If
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================Затем проверил Ваше утверждение, ограничившись файлом «file0az.sd»:
читать дальше »
Код:
Код: Выделить всё
Option Explicit
Dim strSourceFolder
Dim arr10To36
Dim objFSO
Dim x, y, z
Dim i, j, k
Dim strFileName
strSourceFolder = "E:\Песочница\0339"
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
For i = 0 To x
For j = 0 To y
For k = 0 To z
If i = 0 And j = 0 And k = 0 Then
Else
strFileName = "file" & arr10To36(i) & arr10To36(j) & arr10To36(k) & ".sd"
WScript.Echo strFileName
If strFileName = "file0az.sd" Then
WScript.Quit
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
strFileName = "file" & arr10To36(x) & arr10To36(y) & arr10To36(z) & ".sd"
If objFSO.FileExists(objFSO.BuildPath(strSourceFolder, strFileName)) Then
ExistLastName = True
Exit Function
End If
End If
Next
Next
Next
End Function
'=============================================================================Я выделил существенные моменты:
читать дальше »
Код:
Код: Выделить всё
file001.sd
file002.sd
file003.sd
file004.sd
file005.sd
file006.sd
file007.sd
file008.sd
file009.sd
file00a.sd
file00b.sd
file00c.sd
file00d.sd
file00e.sd
file00f.sd
file00g.sd
file00h.sd
file00i.sd
file00j.sd
file00k.sd
file00l.sd
file00m.sd
file00n.sd
file00o.sd
file00p.sd
file00q.sd
file00r.sd
file00s.sd
file00t.sd
file00u.sd
file00v.sd
file00w.sd
file00x.sd
file00y.sd
file00z.sd
file010.sd
file011.sd
file012.sd
file013.sd
file014.sd
file015.sd
file016.sd
file017.sd
file018.sd
file019.sd
file01a.sd
file01b.sd
file01c.sd
file01d.sd
file01e.sd
file01f.sd
file01g.sd
file01h.sd
file01i.sd
file01j.sd
file01k.sd
file01l.sd
file01m.sd
file01n.sd
file01o.sd
file01p.sd
file01q.sd
file01r.sd
file01s.sd
file01t.sd
file01u.sd
file01v.sd
file01w.sd
file01x.sd
file01y.sd
file01z.sd
file020.sd
file021.sd
file022.sd
file023.sd
file024.sd
file025.sd
file026.sd
file027.sd
file028.sd
file029.sd
file02a.sd
file02b.sd
file02c.sd
file02d.sd
file02e.sd
file02f.sd
file02g.sd
file02h.sd
file02i.sd
file02j.sd
file02k.sd
file02l.sd
file02m.sd
file02n.sd
file02o.sd
file02p.sd
file02q.sd
file02r.sd
file02s.sd
file02t.sd
file02u.sd
file02v.sd
file02w.sd
file02x.sd
file02y.sd
file02z.sd
file030.sd
file031.sd
file032.sd
file033.sd
file034.sd
file035.sd
file036.sd
file037.sd
file038.sd
file039.sd
file03a.sd
file03b.sd
file03c.sd
file03d.sd
file03e.sd
file03f.sd
file03g.sd
file03h.sd
file03i.sd
file03j.sd
file03k.sd
file03l.sd
file03m.sd
file03n.sd
file03o.sd
file03p.sd
file03q.sd
file03r.sd
file03s.sd
file03t.sd
file03u.sd
file03v.sd
file03w.sd
file03x.sd
file03y.sd
file03z.sd
file040.sd
file041.sd
file042.sd
file043.sd
file044.sd
file045.sd
file046.sd
file047.sd
file048.sd
file049.sd
file04a.sd
file04b.sd
file04c.sd
file04d.sd
file04e.sd
file04f.sd
file04g.sd
file04h.sd
file04i.sd
file04j.sd
file04k.sd
file04l.sd
file04m.sd
file04n.sd
file04o.sd
file04p.sd
file04q.sd
file04r.sd
file04s.sd
file04t.sd
file04u.sd
file04v.sd
file04w.sd
file04x.sd
file04y.sd
file04z.sd
file050.sd
file051.sd
file052.sd
file053.sd
file054.sd
file055.sd
file056.sd
file057.sd
file058.sd
file059.sd
file05a.sd
file05b.sd
file05c.sd
file05d.sd
file05e.sd
file05f.sd
file05g.sd
file05h.sd
file05i.sd
file05j.sd
file05k.sd
file05l.sd
file05m.sd
file05n.sd
file05o.sd
file05p.sd
file05q.sd
file05r.sd
file05s.sd
file05t.sd
file05u.sd
file05v.sd
file05w.sd
file05x.sd
file05y.sd
file05z.sd
file060.sd
file061.sd
file062.sd
file063.sd
file064.sd
file065.sd
file066.sd
file067.sd
file068.sd
file069.sd
file06a.sd
file06b.sd
file06c.sd
file06d.sd
file06e.sd
file06f.sd
file06g.sd
file06h.sd
file06i.sd
file06j.sd
file06k.sd
file06l.sd
file06m.sd
file06n.sd
file06o.sd
file06p.sd
file06q.sd
file06r.sd
file06s.sd
file06t.sd
file06u.sd
file06v.sd
file06w.sd
file06x.sd
file06y.sd
file06z.sd
file070.sd
file071.sd
file072.sd
file073.sd
file074.sd
file075.sd
file076.sd
file077.sd
file078.sd
file079.sd
file07a.sd
file07b.sd
file07c.sd
file07d.sd
file07e.sd
file07f.sd
file07g.sd
file07h.sd
file07i.sd
file07j.sd
file07k.sd
file07l.sd
file07m.sd
file07n.sd
file07o.sd
file07p.sd
file07q.sd
file07r.sd
file07s.sd
file07t.sd
file07u.sd
file07v.sd
file07w.sd
file07x.sd
file07y.sd
file07z.sd
file080.sd
file081.sd
file082.sd
file083.sd
file084.sd
file085.sd
file086.sd
file087.sd
file088.sd
file089.sd
file08a.sd
file08b.sd
file08c.sd
file08d.sd
file08e.sd
file08f.sd
file08g.sd
file08h.sd
file08i.sd
file08j.sd
file08k.sd
file08l.sd
file08m.sd
file08n.sd
file08o.sd
file08p.sd
file08q.sd
file08r.sd
file08s.sd
file08t.sd
file08u.sd
file08v.sd
file08w.sd
file08x.sd
file08y.sd
file08z.sd
file090.sd
file091.sd
file092.sd
file093.sd
file094.sd
file095.sd
file096.sd
file097.sd
file098.sd
file099.sd
file09a.sd
file09b.sd
file09c.sd
file09d.sd
file09e.sd
file09f.sd
file09g.sd
file09h.sd
file09i.sd
file09j.sd
file09k.sd
file09l.sd
file09m.sd
file09n.sd
file09o.sd
file09p.sd
file09q.sd
file09r.sd
file09s.sd
file09t.sd
file09u.sd
file09v.sd
file09w.sd
file09x.sd
file09y.sd
file09z.sd
file0a0.sd
file0a1.sd
file0a2.sd
file0a3.sd
file0a4.sd
file0a5.sd
file0a6.sd
file0a7.sd
file0a8.sd
file0a9.sd
file0aa.sd
file0ab.sd
file0ac.sd
file0ad.sd
file0ae.sd
file0af.sd
file0ag.sd
file0ah.sd
file0ai.sd
file0aj.sd
file0ak.sd
file0al.sd
file0am.sd
file0an.sd
file0ao.sd
file0ap.sd
file0aq.sd
file0ar.sd
file0as.sd
file0at.sd
file0au.sd
file0av.sd
file0aw.sd
file0ax.sd
file0ay.sd
file0az.sdВидно, что после «file090.sd» идёт «file091.sd», а вовсе не «file0a1.sd», который идёт, как и положено, после «file0a0.sd».
Цитата bombording:
и дойдя до 0h5 (последний файл) успешно останавливается не захватывая остальные файлы с маской 01a - 09z и 0aa - 0zz.
VBS/WSH/JS - Проверка списка имен в цикле
Тут, если честно, ничего не понял. «file01a.sd» и последующие превосходно попадают в перебор.
Таким образом, я пока не могу подтвердить сделанные Вами выводы. Скорее наоборот.
Как мы можем поступить? Создайте перечень Ваших файлов:
Код:
Код: Выделить всё
dir /b file*.sd >"List.txt"Полученный «List.txt» упакуйте в архив и выложите сюда.
-
Iska
Re: VBS/WSH/JS - Проверка списка имен в цикле
Цитата Iska:
Как мы можем поступить? Создайте перечень Ваших файлов:
Попробуйте исполнить первый ваш скрипт и второй.
Первый отработает так (и это правильно, т.к. скрипт обработает все 617 файлов)
file001.SD
file002.SD
file003.SD
file004.SD
file005.SD
file006.SD
file007.SD
file008.SD
file009.SD
file00a.SD
file00b.SD
file00c.SD
и т.д.
Второй так (обработается только около 100 файлов из 617):
file001.SD
file002.SD
file003.SD
file004.SD
file005.SD
file006.SD
file007.SD
file008.SD
file009.SD
file010.SD
file011.SD
и т.д.
Как мы можем поступить? Создайте перечень Ваших файлов:
VBS/WSH/JS - Проверка списка имен в цикле
Попробуйте исполнить первый ваш скрипт и второй.
Первый отработает так (и это правильно, т.к. скрипт обработает все 617 файлов)
file001.SD
file002.SD
file003.SD
file004.SD
file005.SD
file006.SD
file007.SD
file008.SD
file009.SD
file00a.SD
file00b.SD
file00c.SD
и т.д.
Второй так (обработается только около 100 файлов из 617):
file001.SD
file002.SD
file003.SD
file004.SD
file005.SD
file006.SD
file007.SD
file008.SD
file009.SD
file010.SD
file011.SD
и т.д.
-
bombording
-
Iska
Re: VBS/WSH/JS - Проверка списка имен в цикле
Цитата Iska:
кажись, дошло.
Политкорректно это называется «Лучшее — враг хорошего». А по-простому — «меньше надо выёживаться».
Пробуйте:
Код:
Цитата bombording:
Попробуйте исполнить первый ваш скрипт и второй.
Дело в том, что пока я манипулировал на полных списках («001»-«zzz»), моя логическая ошибка никак не проявлялась. Стоило же только взять ограниченный список (до «zzz») — сразу стал виден мой несусветный ляп. Увы. Приношу Вам свои извинения.
кажись, дошло.
VBS/WSH/JS - Проверка списка имен в цикле
Политкорректно это называется «Лучшее — враг хорошего». А по-простому — «меньше надо выёживаться».
Пробуйте:
читать дальше »
Код:
Код: Выделить всё
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
'=============================================================================Цитата bombording:
Попробуйте исполнить первый ваш скрипт и второй.
VBS/WSH/JS - Проверка списка имен в цикле
Дело в том, что пока я манипулировал на полных списках («001»-«zzz»), моя логическая ошибка никак не проявлялась. Стоило же только взять ограниченный список (до «zzz») — сразу стал виден мой несусветный ляп. Увы. Приношу Вам свои извинения.