PDA

Показать полную графическую версию : [решено] Оператор и\или в коде проверки наличия файлов


Страниц : 1 [2]

Stalker_AleX333
25-09-2017, 23:40
alpap, посидел, подумал. Выходит как-то так:

С каждой версии продукта, будет устанавливаться файл без расширения (упс, не выйдет - последняя цифра номера версии будет считаться расширением файла) с расширением .id, носящий имя: Silver Raven mods pack ver.x.x.xx (будет только такой формат).
Он будет находиться в %USERPROFILE%\AppData\Local\Skyrim Special Edition и его имя строго задано (при обновлении продукта, обновляется и bat-ник, проверяющий его). Но, если пользователь накосячит с установкой обновлений или поставит полную новую\старую версию поверх уже существующей (что недопустимо в моем случае), в папке окажется несколько таких файлов. Задача - найти таковые и предупредить пользователя о возможных последствиях, путем принудительного вывода соответствующего сообщения при запуске bat-ника. Ну а если вдруг файл-идентификатор не был найден вообще то тут сам бог велел подозревать возможное наличие проблем.

Получается, полный алгоритм должен быть таким:

После установки продукта, запускается наш bat-ник и проверяет наличие файла-идентификатора по маске Silver Raven mods pack ver.x.x.xx.id в %USERPROFILE%\AppData\Local\Skyrim Special Edition, совпадающего по названию с тем что уже задан. Если такой файл уже есть и номер версии совпадает - идем дальше. Но если что-то не так...
1. Найден только устаревший id-файл - текст с ошибкой №1 (с описанием найденной старой версии. пример писал выше. при считывании номера, смотрим только символы после ver.)
2. Актуальный id-файл и устаревший id-файл - текст с ошибкой №2 (тут бы перечислить все найденные номера версий. прим. 1.2.3, 1.2.6, и т.д.)
3. Не нашли вообще ничего - текст с ошибкой №3


:: Поиск файла-идентификатора сборки
set "ModsPackVerID=Silver Raven mods pack ver.1.2.7.id"
set "ModsPackVerIDOld=Silver Raven mods pack ver.x.x.x.id" :: - ?
:: %VerID% и %VerIDOld% - ?
if exist "%ModsPackVerIDOld%" ( color 0c
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo.
echo *ВНИМАНИЕ! Обнаружен устаревший идентификатор сборки версии %VerID%. Вероятно, установка или обновление до данной версии было произведено некорректно. Рекомендуется произвести полное удаление, с ручной очисткой оставшихся файлов и установить сборку заново.
echo.
echo.
pause
)

if exist "%ModsPackVerID% %ModsPackVerIDOld%" ( color 0c
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo.
echo *ВНИМАНИЕ! Обнаружено несколько файлов-идентификаторов сборки версий %VerID%, %VerIDOld%. Вероятно, установка или обновление до данной версии было произведено некорректно. Рекомендуется произвести полное удаление, с ручной очисткой оставшихся файлов и установить сборку заново.
echo.
echo.
pause
)

if not exist "%ModsPackVerID%" ( color 0c
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo.
echo *ВНИМАНИЕ! Не обнаружено файла-идентификатора версии сборки. Вероятно, установка или обновление до данной версии было произведено некорректно. Рекомендуется произвести полное удаление, с ручной очисткой оставшихся файлов и установить сборку заново.
echo.
echo.
pause
)


Надеюсь, описал все нюансы. Если что - спрашивайте. Сам уже несколько раз перерабатывал варианты, чтобы пользователь не грохнул случайно файл-идентификатор. Пока это лучшее, что мне пришло в голову. Главное, чтобы bat-ник, который будет копировать файл-идентификатор (по окончании установки) успел отработать до того, как автоматически запустится основной. Я использую самораспаковывающиеся sfx архивы.

Stalker_AleX333
28-09-2017, 20:44
Я так понимаю тему можно закрывать? Поток благодетельной помощи иссяк?

Iska
28-09-2017, 21:52
Stalker_AleX333, начинайте изучать пособие «Как самому правильно создавать инсталляционные пакеты». Можете ознакомиться с Inno Setup или NSIS. Только, повторяю: сначала — теорию, потом — код.

Busla
08-10-2017, 17:15
Извиняюсь, запамятовал про эту тему.
Вы, видимо, тут ошиблись в спешке и написали наоборот.
<..> Я нигде ранее не встречал написания «Исключающего ИЛИ» как «И/ИЛИ». »
Это, конечно, "гениальный" ход - сначала исправить моё утверждение на обратное, а после сказать, что не встречались с таким.

Цитата Busla:
Iska, в булевой алгебре-логике 4 основных оператора: »
Я знаю три. Основных. К коим «Исключающее ИЛИ» не относится. »
Если, например, открыть MIT (https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%81%D1%81%D0%B0%D1%87%D1%83%D1%81%D0%B5%D1%82%D1%81%D0%BA%D0%B8%D0%B9_%D1%82%D0%B5%D1 %85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%BD%D1%81%D1%82 %D0%B8%D1%82%D1%83%D1%82)'овский учебник "Алгоритмы: построение и анализ (https://www.ozon.ru/context/detail/id/83808/)", то там упоминаются 6 основных логических элементов: NOT, AND, OR, XOR, NAND и NOR, но при этом явно указано, что подробно рассматривают только первые 4. Наверное, в смысле практического использования, они и есть "основные".

По поводу "И/ИЛИ" - в Логическом словаре-справочнике (Н. И. Кондаков, 1975 год) уже "И/ИЛИ" приводится как практически используемая форма записи.

Iska
09-10-2017, 06:57
Это, конечно, "гениальный" ход - сначала исправить моё утверждение на обратное, а после сказать, что не встречались с таким.»
Я предположил, что Вы описались. Это не так? Теперь я правильно понимаю, что выделенное:
Iska, в булевой алгебре-логике 4 основных оператора:
НЕ = NOT
И = AND
ИЛИ = XOR
И/ИЛИ = OR
Истина ИЛИ Истина = Ложь
Истина И/ИЛИ Истина = Истина »
мне следует понимать именно так, как Вы написали и не иначе?


Я не встречался вообще с таким написанием, как «И/ИЛИ». Ни в какой трактовке. Равным образом никогда не встречался с трактовкой «ИЛИ» как «XOR», а не «OR». Я привык, что трактовки вполне однозначны:

«Отрицание», «НЕ», «NOT»;
«Конъюнкция», «И», «AND»;
«Дизъюнкция», «ИЛИ», «OR»;
«Неравнозначность» (иногда — «Строгая дизъюнкция»), «Исключающее ИЛИ», «XOR»;
и т.д. — эквивалентность, импликация и прочее.

По поводу "И/ИЛИ" - в Логическом словаре-справочнике (Н. И. Кондаков, 1975 год) уже "И/ИЛИ" приводится как практически используемая форма записи. »
Ткните пальцем номер/номера страниц или укажите названия статей, где можно посмотреть.

Если, например, открыть MIT'овский учебник "Алгоритмы: построение и анализ", то там упоминаются 6 основных логических элементов: NOT, AND, OR, XOR, NAND и NOR, но при этом явно указано, что подробно рассматривают только первые 4. Наверное, в смысле практического использования, они и есть "основные". »
Спасибо, ясно. Источник Вашей информации понятен.

Busla
09-10-2017, 11:21
Равным образом никогда не встречался с трактовкой «ИЛИ» как «XOR», а не «OR». »
мама вас в детстве не спрашивала: Тебе купить машинку или мячик?
это XOR - исключающее ИЛИ
и сами никогда не говорили: "могу выделить время сегодня или завтра" - это тоже XOR

Ткните пальцем номер/номера страниц »
Полагаю, словарём вы пользоваться умеете. Будет доступ к книге - найдёте. Когда писал, - сверялся, оно там есть.




© OSzone.net 2001-2012