|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Проверка списка имен в цикле |
|
VBS/WSH/JS - Проверка списка имен в цикле
|
Старожил Сообщения: 226 |
Профиль | Отправить PM | Цитировать Добрый день.
Имеется папка с файлами определённой структуры: file001.sd file002.sd file003.sd … file009.sd file00a.sd file00b.sd file00c.sd …. file00z.sd file010.sd file011.sd file012.sd и т.д. Задача: Проверять все файлы в папке на последовательность. И в случае нарушения последовательности, выдавать ошибку. Например, если в последовательности file001 - file009 не будет файла file003 то выдавалась бы ошибка. Как я вижу решение данной задачи: Собрать все имена файлов в массив. А дальше для каждой последовательности создать свой цикл, со своим условием. Собрать файлы в массив я смогу, а вот написать условие для отработки цикла с трудом смогу. Помогите пожалуйста. |
|
------- Отправлено: 14:21, 23-12-2013 |
Старожил Сообщения: 226
|
Профиль | Отправить PM | Цитировать Iska, Большое спасибо! Весьма интересная реализация.
|
------- Отправлено: 12:29, 24-12-2013 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 226
|
Профиль | Отправить PM | Цитировать Iska, Кстати заметил проблему сейчас.
Новая версия скрипта(которая выдергивает имя последнего файла) работает немного не корректно. Сначала скрипт проверяет цифровые имена 001 - 090 Затем скрипт проверяет имена (буква цифра) 0a1 - 0z9 При этом скрипт не проверяет имена 01a - 09z а так же не проверяет 0aa - 0zz. Поэтому из 600 моих файлов, скрипт проверил только 100 и успешно завершился. Хотя старый скрипт, который не проверял последний файл (ваш пост №4), отрабатывал по всем 600 файлам. P.S. и в переменной arr10To36 две буквы g. |
------- Отправлено: 15:38, 25-12-2013 | #12 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата bombording:
Цитата bombording:
|
||
Отправлено: 15:47, 25-12-2013 | #13 |
Старожил Сообщения: 226
|
Профиль | Отправить PM | Цитировать 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, то все работает. Но не работает проверка на последний файл... |
------- Последний раз редактировалось bombording, 25-12-2013 в 17:31. Отправлено: 16:38, 25-12-2013 | #14 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать bombording, ясно. Я посмотрю.
|
Отправлено: 16:45, 25-12-2013 | #15 |
Старожил Сообщения: 226
|
Профиль | Отправить PM | Цитировать Iska, может быть тогда действительно сделать на базе вашего первого варианта скрипта подсчет файлов по маске и условие по которому цикл будет прекращаться по истечению количества шагов равным количеству файлов ?
Я тут сделал данную проверку. Но к сожалению умения хватило только на подсчет файлов по расширению....а не по маске file*.sd Option Explicit Dim strSourceFolder Dim arr10To36 Dim i, j, k Dim strFileName Dim fso,f1,s1,o,n strSourceFolder = "D:\!Project\script" 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", ";") ' count files o = 0 n = 0 Set fso = CreateObject("Scripting.FileSystemObject") For Each f1 in fso.GetFolder(strSourceFolder).Files If InStr(1,f1.name,".sd",0) Then o = o + 1 End If Next With WScript.CreateObject("Scripting.FileSystemObject") If .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 If n < o Then strFileName = "file" & arr10To36(i) & arr10To36(j) & arr10To36(k) & ".sd" If Not .FileExists(.BuildPath(strSourceFolder, strFileName)) Then WScript.Echo "Can't find file [" & strFileName & "]." WScript.Quit 2 Else n = n + 1 End If End If End If Next Next Next Else WScript.Echo "Can't find source folder [" & strSourceFolder & "]." WScript.Quit 1 End If End With WScript.Quit 0 |
------- Отправлено: 15:36, 26-12-2013 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата bombording:
Я создал весь перечень из 46655 [36^3 - 1] файлов: Затем проверил Ваше утверждение, ограничившись файлом «file0az.sd»: Я выделил существенные моменты: Видно, что после «file090.sd» идёт «file091.sd», а вовсе не «file0a1.sd», который идёт, как и положено, после «file0a0.sd». Цитата bombording:
Таким образом, я пока не могу подтвердить сделанные Вами выводы. Скорее наоборот. Как мы можем поступить? Создайте перечень Ваших файлов: Полученный «List.txt» упакуйте в архив и выложите сюда. |
||
Последний раз редактировалось Iska, 27-12-2013 в 10:57. Причина: Зачеркнул некорректные выводы. Отправлено: 08:08, 27-12-2013 | #17 |
Старожил Сообщения: 226
|
Профиль | Отправить PM | Цитировать Цитата 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 и т.д. |
|
------- Отправлено: 09:34, 27-12-2013 | #18 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать bombording, кажись, дошло. Буду думать.
|
Отправлено: 09:52, 27-12-2013 | #19 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Пробуйте: Цитата bombording:
|
||
Отправлено: 10:53, 27-12-2013 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Цикл в Цикле | deamon7 | Скриптовые языки администрирования Windows | 5 | 15-04-2023 09:04 | |
CMD/BAT - Проверка файлов в сетевом каталоге, и создание списка из тех которые по размеру < N | wonted | Скриптовые языки администрирования Windows | 21 | 17-03-2014 13:40 | |
VBS/WSH/JS - [решено] Сравнить три списка имен файлов между собой. | bombording | Скриптовые языки администрирования Windows | 2 | 19-12-2013 15:19 | |
запуск GUICtrlSetData в цикле | bugmenotagain | AutoIt | 10 | 04-08-2012 16:30 | |
CMD/BAT - [решено] Множественная проверка в цикле (IF) с оперратором "ИЛИ"(OR) | Nuclears | Скриптовые языки администрирования Windows | 7 | 29-12-2011 13:13 |
|