![]() |
Оператор и\или в коде проверки наличия файлов
Народ, подскажите. Есть такая конструкция:
Код:
set "OldModsPackFiles1=Data\Flora Overhaul.esp" Что-то я погуглил и ничего. То-ли я такой тупой, то-ли лыжи не едут... |
Цитата:
В любом случае, ни оператора «И», ни оператора «ИЛИ» в пакетных файлах не предусмотрено. Укажите, какой из двух операторов Вам был бы нужен, и Вам покажут реализацию. |
Код:
dir /a-d/b "%OldModsPackFiles1%" "%OldModsPackFiles2%" "%OldModsPackFiles3%" "%OldModsPackFiles4%" && echo TRUE |
alpap, то, что нужно.
только вот не пойму, почему нет реакции на команду color C? Может это из за использования ее же в коде выше: Код:
set "GameExeFile=SkyrimSE.exe" |
Цитата:
Скрытый текст
![]() В чём она должна, по Вашему мнению, выражаться? |
Iska, дык в том-то и выражается. Но у меня текст в этой части кода она не хочет "красить".
Код целиком
Код:
cls |
Stalker_AleX333, я не могу перевести на понятный для себя язык выражение «текст в этой части кода она не хочет "красить"» («она» — это «реакция», если помните).
Команда COLOR ничего не «красит». Она меняет номера цветов из текущей палитры консоли. Целиком. Для всей консоли. Никакой «раскраски» вида «часть текста одного цвета, часть — другого цвета». |
Цитата:
|
Busla, я что-то пропустил, и булева алгебра изменилась со времён моего ученичества? Если кто скажет, что это:
Код:
Истина И Истина = Истина Код:
Истина ИЛИ Истина = Истина |
Iska, в булевой алгебре-логике 4 основных оператора:
НЕ = NOT И = AND ИЛИ = XOR И/ИЛИ = OR Истина ИЛИ Истина = Ложь Истина И/ИЛИ Истина = Истина P.S. Поправочка: в литературе посвящённой алгоритмам, логике и т.п. используются специальные символы. А И/или - закреплённая в словарях и справочниках языковая норма, т.к. в русском языке или обычно несёт исключающий характер. |
Цитата:
Не совсем, в моем случае, кое-как извернуться можно, что я и сделал. В таком тестовом куске: Код:
@cls upd. Этот кусок даже в виде отдельного файла работает как-то странно, да и цвет не задается: Код:
cls Поиск процесса (срабатывает всегда. почему?)
Код:
tasklist | find "skyrimse.exe" Поиск файла - идентификатора
Ищем файл Silver Raven mods pack ver.1.2.7 (в папке откуда запущен батник) без расширения. Не нашли? - тогда ищем такой же но с любым окончанием ver.x.x.x Запоминаем последние пять символов (в переменную %VerID%), содержащие номер версии и пихаем их в сообщение в коде ниже. Не нашли ничего - показываем другое сообщение. Код:
set "ModsPackVerID=Silver Raven mods pack ver.1.2.7.*" |
Цитата:
Код:
@echo off Цитата:
|
Цитата:
Хотите разные цвета в консоли — пользуйте внешние утилиты типа echox, ansicon и escape-последовательности и т.п. (CMD/BAT - [решено] Разный цвет строк bat), либо PowerShell — там поддержка цветов встроенная. Цитата:
Цитата:
Цитата:
Хорошо, коллега, Вы меня убедили. Я нигде ранее не встречал написания «Исключающего ИЛИ» как «И/ИЛИ». Рассказывайте, что Вы читали, откуда почерпнули такое написание. Будем просвещаться. |
alpap, маска - только цифры с точками (или последние пять символов) файла без расширения, начинающегося на Silver Raven mods pack ver.
Чуть дополню условия поиска: если нашли два файла идентификатора (т.е. тот, который задан в bat-нике и еще любой другой), так же выкидываем ошибку. Т.е. 1. Актуальный id и ничего более - ок 2. Только устаревший id - ошибка №1 (из сообщений выше) 3. Актуальный id и устаревший id - ошибка №2 4. Не нашли вообще ничего - ошибка №3 Цитата:
Вбейте кто-нибудь код целиком в тестовый файл. Я не вижу ошибок. Скрытый текст
Код:
cls |
Цитата:
Код:
echo *Внимание! Обнаружен запущенный процесс игры ^(SkyrimSE.exe^). Выйдете из игры, прежде чем запускать панель управления сборкой! |
Iska, так, стоп. А что не так-то со скобками? Они есть и в других сообщениях, но к ошибкам это не приводит.
upd. Ой я дурак. Сообщение же само по себе в скобках. Все верно. |
Цитата:
Код:
tasklist.exe | >nul find.exe "skyrimse.exe" && ( Код:
tasklist.exe | >nul find.exe "skyrimse.exe" && ( ![]() В данном случае достаточно экранировать только закрывающую скобку, но лучше экранировать обе — и открывающую, и закрывающую. Прочие же echo со скобками расположены вовне операторных скобок, посему последние не вызывают при интерпретации подобных проблем. |
Iska, а с этим можешь помочь?
Цитата:
|
Цитата:
|
Stalker_AleX333,
Цитата:
например Цитата:
или же каждый файл начинается так: Silver Raven mods pack ver *цифра.цифра.цифра или Silver Raven mods pack ver *x:~-5 где этот файл (файлы) находятся? В папке с батником или отдельно и что может быть там еще кроме них чтобы знать каким образом их искать. теперь самое непонятное нашли два файла идентификатора - файла??? задан в bat-нике??? Искать именно в батнике? и еще любой другой, что значит любой? Где он еще задан? приведите лучше образец из нескольких файлов покажите на них что есть маска по которой искать и что будет являться id еще интересны возможные варианты этих id по отношению их сравнения, например: ver 1.10.12 ver 10.1.12 ver 111.1.1 ver 01.02.1 различные их сочетания - это раз и cmd-шная команда sort, к примеру, может нервы хорошо попортить чтобы выявить из них максимальную версию (и что считать за максимальную) - это все тоже надо сразу предусмотреть и уложить в код. |
alpap, посидел, подумал. Выходит как-то так:
С каждой версии продукта, будет устанавливаться файл Он будет находиться в %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 Набросал что-то вроде заготовки сообщений для различных ошибок
Код:
:: Поиск файла-идентификатора сборки Надеюсь, описал все нюансы. Если что - спрашивайте. Сам уже несколько раз перерабатывал варианты, чтобы пользователь не грохнул случайно файл-идентификатор. Пока это лучшее, что мне пришло в голову. Главное, чтобы bat-ник, который будет копировать файл-идентификатор (по окончании установки) успел отработать до того, как автоматически запустится основной. Я использую самораспаковывающиеся sfx архивы. |
Я так понимаю тему можно закрывать? Поток благодетельной помощи иссяк?
|
Stalker_AleX333, начинайте изучать пособие «Как самому правильно создавать инсталляционные пакеты». Можете ознакомиться с Inno Setup или NSIS. Только, повторяю: сначала — теорию, потом — код.
|
Извиняюсь, запамятовал про эту тему.
Цитата:
Цитата:
По поводу "И/ИЛИ" - в Логическом словаре-справочнике (Н. И. Кондаков, 1975 год) уже "И/ИЛИ" приводится как практически используемая форма записи. |
Цитата:
Цитата:
Я не встречался вообще с таким написанием, как «И/ИЛИ». Ни в какой трактовке. Равным образом никогда не встречался с трактовкой «ИЛИ» как «XOR», а не «OR». Я привык, что трактовки вполне однозначны:
Цитата:
Цитата:
|
Цитата:
это XOR - исключающее ИЛИ и сами никогда не говорили: "могу выделить время сегодня или завтра" - это тоже XOR Цитата:
|
Время: 04:53. |
Время: 04:53.
© OSzone.net 2001-