Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Оператор и\или в коде проверки наличия файлов (http://forum.oszone.net/showthread.php?t=329997)

Stalker_AleX333 23-09-2017 21:38 2766385

Оператор и\или в коде проверки наличия файлов
 
Народ, подскажите. Есть такая конструкция:
Код:

set "OldModsPackFiles1=Data\Flora Overhaul.esp"
set "OldModsPackFiles2=Data\Player Blink Fix.esp"
set "OldModsPackFiles3=Data\Realistic Ragdoll Force.esp"
set "OldModsPackFiles4=Data\Static Mesh Improvement.esp"

If exist "%OldModsPackFiles1% %OldModsPackFiles2% %OldModsPackFiles3% %OldModsPackFiles4%"( color C
echo.
echo  ╔═══════════════════════════════════════════════════════════╗
echo  ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
echo  ╚═══════════════════════════════════════════════════════════╝
echo.
echo.
echo *ВНИМАНИЕ! В сборке обнаружены устаревшие файлы. Вероятно, установка или обновление до данной версии было произведено некорректно. Рекомендуется произвести полное удаление, с ручной очисткой оставшихся файлов и установить сборку заново.
echo.
echo.

pause
goto g_menu
)

В кусок нужен оператор "%OldModPackFiles1% И\ИЛИ %OldModPackFiles2% И\ИЛИ %OldModPackFiles3% И\ИЛИ %OldModPackFiles4%"
Что-то я погуглил и ничего. То-ли я такой тупой, то-ли лыжи не едут...

Iska 23-09-2017 23:10 2766398

Цитата:

Цитата Stalker_AleX333
В кусок нужен оператор "%OldModPackFiles1% И\ИЛИ %OldModPackFiles2% И\ИЛИ %OldModPackFiles3% И\ИЛИ %OldModPackFiles4%" »

Stalker_AleX333, Вы понимаете, что «И» и «ИЛИ» дают совершенно противоположные результаты в итоге? Определитесь.

В любом случае, ни оператора «И», ни оператора «ИЛИ» в пакетных файлах не предусмотрено. Укажите, какой из двух операторов Вам был бы нужен, и Вам покажут реализацию.

alpap 23-09-2017 23:11 2766399

Код:

dir /a-d/b "%OldModsPackFiles1%" "%OldModsPackFiles2%" "%OldModsPackFiles3%" "%OldModsPackFiles4%" && echo TRUE
т.е. хотя бы один

Stalker_AleX333 24-09-2017 00:00 2766403

alpap, то, что нужно.

только вот не пойму, почему нет реакции на команду color C? Может это из за использования ее же в коде выше:
Код:

set "GameExeFile=SkyrimSE.exe"
If not exist "%GameExeFile%" ( color C
 echo.
 echo  ╔═══════════════════════════════════════════════════════════╗
 echo  ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
 echo  ╚═══════════════════════════════════════════════════════════╝
 echo.
 echo.
 echo *ОШИБКА! Панель управления сборкой не предназначена для запуска вне папки с игрой. Перезаупустите приложение из папки игры для корректной работы.
 echo.
 echo.
pause
exit
)


Iska 24-09-2017 00:09 2766404

Цитата:

Цитата Stalker_AleX333
только вот не пойму, почему нет реакции на команду color C? »

У меня — есть реакция:
Скрытый текст


В чём она должна, по Вашему мнению, выражаться?

Stalker_AleX333 24-09-2017 00:41 2766407

Iska, дык в том-то и выражается. Но у меня текст в этой части кода она не хочет "красить".

Код целиком
Код:

cls
@echo off
title Панель управления Silver Raven mods pack

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Проверка доступности файлов игры
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

set "GameExeFile=SkyrimSE.exe"
If not exist "%GameExeFile%" ( color 0c
 echo.
 echo  ╔═══════════════════════════════════════════════════════════╗
 echo  ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
 echo  ╚═══════════════════════════════════════════════════════════╝
 echo.
 echo.
 echo *ОШИБКА! Панель управления сборкой не предназначена для запуска вне папки с игрой. Перезаупустите приложение из папки игры для корректной работы.
 echo.
 echo.
pause
exit
)

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Проверка актуальности сборки
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

set "OldModsPackFiles1=Data\Flora Overhaul.esp"
set "OldModsPackFiles2=Data\Player Blink Fix.esp"
set "OldModsPackFiles3=Data\Realistic Ragdoll Force.esp"
set "OldModsPackFiles4=Data\Static Mesh Improvement.esp"
set "OldModsPackFiles5=Data\Blacksmith Forge Water Fix SE USSEP.esp"
If exist dir /a-d/b "%OldModsPackFiles1% %OldModsPackFiles2% %OldModsPackFiles3% %OldModsPackFiles4% %OldModsPackFiles5%" ( color 0c
 echo.
 echo  ╔═══════════════════════════════════════════════════════════╗
 echo  ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
 echo  ╚═══════════════════════════════════════════════════════════╝
 echo.
 echo.
 echo *ВНИМАНИЕ! В сборке обнаружены устаревшие файлы. Вероятно, установка или обновление до данной версии было произведено некорректно. Рекомендуется произвести полное удаление, с ручной очисткой оставшихся файлов и установить сборку заново.
 echo.
 echo.
pause
)

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Основное меню панели управления сборкой
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:main_menu
cls
color 07
@echo.
@echo  ╔═══════════════════════════════════════════════════════════╗
@echo  ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
@echo  ╚═══════════════════════════════════════════════════════════╝
@echo.
@echo.

@echo ■ 1. Копирование отсортированного списка плагинов (модов) в AppData пользователя.
@echo.
@echo  Нажав цифру 1, вы подтверждаете свое согласие на копирование.
@echo.
@echo.
@echo.

@echo ■ 2. Проверка наличия обновлений сборки. (Настоятельно рекомендуется проводить хотя-бы раз в месяц)
@echo.
@echo  Нажав цифру 2, вы подтверждаете свое согласие на переход в меню выбора источника загрузки обновлений.
@echo.
@echo.
@echo.

@echo ■ 3. Загрузка ReShade. (Не влияет на производительность игры, в отличии от ENB и SweetFX)
@echo.
@echo  Нажав цифру 3, вы подтверждаете свое согласие на переход по ссылке загрузки. (Откроется браузер)
@echo.
@echo.
@echo.

@echo ■ 4. Загрузка LOOT.
@echo  Если вы собираетесь добавлять новые плагины (моды) к сборке, воспользуйтесь данной утилитой для сортировки порядка их загрузки.
@echo.
@echo  Нажав цифру 4, вы подтверждаете свое согласие на переход по ссылке загрузки. (Откроется браузер)
@echo.
@echo.
@echo.

@echo ■ 5. Полное удаление сборки. (Если вы хотите сохранить какие-либо файлы, сделайте это сейчас)
@echo.
@echo  Нажав цифру 5, вы подтверждаете свое согласие на переход в меню удаления сборки.
@echo.
@echo.
@echo.
@echo  [Чтобы просмотреть все опции панели управления используйте прокрутку]
@echo.
@echo.

@Set /p var="> Введите номер опции и нажмите Enter: "

if %var%==1  call :option_1
if %var%==2  call :option_2
if %var%==3  call :option_3
if %var%==4  call :option_4
if %var%==5  call :option_5
goto main_menu
pause& exit

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Копирование отсортированного списка плагинов
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:option_1
cls
set "FileIn=Plugins.txt"
set "BoxOut=%USERPROFILE%\AppData\Local\Skyrim Special Edition"
if not exist "%FileIn%" ( color 0c
 echo.
 echo *ОШИБКА! Файл Plugins.txt не найден!
 echo.
 echo Не удалось скопировать отсортированный список плагинов в AppData пользователя.
 echo Извлеките необходимый файл из установочных архивов со сборкой в папку с игрой вручную и перезапустите панель управления сборкой, или воспользуйтесь сортировкой плагинов с помощью программы LOOT. *Опция присутствует в данной панели управления.                                                       
 echo.
 echo.
pause
exit /b
)

if not exist "%BoxOut%" md "%BoxOut%"
copy /y "%FileIn%" "%BoxOut%\"
@echo.
@echo Отсортированный список плагинов скопирован в AppData пользователя.
@echo.
@echo.
pause
exit /b

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Проверка обновлений
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:option_2
cls
@echo.
@echo  Выберете источник проверки обновлений (будет открыт браузер):
@echo.
@echo  ╔══════════════════════════════════════════════════════════════════╗
@echo  ║ ╔═══╗                      ╔═══╗                        ╔═══╗                    ║
@echo  ║ ║ 1 ║ ЯндексДиск        ║ 2 ║ Gamer-Mods.ru        ║ 3 ║ RuTracker.org ║
@echo  ║ ╚═══╝                ╚═══╝                        ╚═══╝                    ║
@echo  ╚══════════════════════════════════════════════════════════════════╝
@echo                          Вернуться в главное меню - 0
@echo.
@echo  *Если вы хотите сообщить об ошибке(ах) в сборке или просто высказать свои идеи и предложения автору, рекомендуется использовать 2-ой вариант.
@echo.
@echo.

@Set /p var="> Введите свой ответ и нажмите Enter: "
if %var%==1 call :option_2_check_updates_yandexdisk
if %var%==2 call :option_2_check_updates_gamer-mods
if %var%==3 call :option_2_check_updates_rutracker
if %var%==0 goto main_menu

:: Проверка обновлений - ЯндексДиск
:option_2_check_updates_yandexdisk
cls
start https://yadi.sk/d/qyJbvZs43Mb3fR
goto main_menu

:: Проверка обновлений - Gamer-mods.ru
:option_2_check_updates_gamer-mods
cls
start http://gamer-mods.ru/forum/73-2082-1
goto main_menu

:: Проверка обновлений - RuTracker.org
:option_2_check_updates_rutracker
cls
start https://rutracker.org/forum/viewtopic.php?t=5356842
goto main_menu

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Загрузка ReShade
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:option_3
cls
start https://reshade.me
exit /b

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Загрузка LOOT
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:option_4
cls
start https://loot.github.io
exit /b

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Удаление сборки
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:option_5
cls
@echo  Удаление Silver Raven mods pack.
@echo.
@echo          ╔═══╗                                                      ╔═══╗
@echo  Нажмите ║ Y ║ для подтверждения начала процесса удаления сборки или ║ N ║ для его отмены.
@echo          ╚═══╝                                                      ╚═══╝
@echo.
@echo  *ВСЕ файлы в подпапках Interface, Meshes, Scripts, Textures, Video, а также плагины сборки и данный exe файл будут удалены!
@echo.
@echo.

@Set /p var="> Введите свой ответ и нажмите Enter: "
if %var%==y call :option_5_start_uninstall
if %var%==n goto main_menu

:option_5_start_uninstall
:: Удаление папок сборки
cls
setlocal enableextensions enabledelayedexpansion
pushd "%~dp0" & (
rd /s /q "Data\Interface" "Data\Meshes" "Data\Scripts" "Data\Textures" "Data\Video"
       
:: Удаление плагинов сборки и прочих файлов       
del /f /q "Data\A Quality World Map - Textures.*" "Data\A Quality World Map.*" "Data\Better Dynamic Snow.*" "Data\Book Covers Skyrim - Textures.*" "Data\Book Covers Skyrim.*" "Data\Cutting Room Floor.*" "Data\Enhanced Blood.*" "Data\Footprints.*" "Data\Immersive Citizens - AI Overhaul.*" "Data\Improved Closefaced Helmets.*" "Data\Improved Puddles.*" "Data\No Snow Under The Roof - Cutting Room Floor Patch.* "Data\No Snow Under The Roof.*" "Data\Northfires Photoreal Mountains.*" "Data\RealisticWaterTwo.*" "Data\Silver Raven Mods Pack.*" "Data\Skyrim Flora Overhaul.*" "Data\Snazzy Furniture and Clutter Overhaul.*" "Data\Static Mesh Improvement Mod.*" "Data\The Paarthurnax Dilemma.*" "Data\True Storms - Textures.*" "Data\True Storms.*" "Data\Unofficial Skyrim Special Edition Patch.*" "Data\Wet and Cold.*" "Data\icepenguinworldmapclassic.*" "Plugins.*" "Readme.*" "Readme update.*"               
popd
)
endlocal

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Удаление самого cmd(exe)-шника
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

del "%~dpnx0"


Iska 24-09-2017 02:17 2766418

Stalker_AleX333, я не могу перевести на понятный для себя язык выражение «текст в этой части кода она не хочет "красить"» («она» — это «реакция», если помните).

Команда COLOR ничего не «красит». Она меняет номера цветов из текущей палитры консоли. Целиком. Для всей консоли. Никакой «раскраски» вида «часть текста одного цвета, часть — другого цвета».

Busla 24-09-2017 10:26 2766450

Цитата:

Цитата Iska
Вы понимаете, что «И» и «ИЛИ» дают совершенно противоположные результаты в итоге? Определитесь. »

Почитайте какую-нибудь классическую литературу по алгоритмам и логическим операторам. И/или - вполне распространённая запись, обозначает неисключающее или т.е. оператор OR. "Противоположные результаты" даёт исключающее ИЛИ - XOR.

Iska 24-09-2017 11:48 2766458

Busla, я что-то пропустил, и булева алгебра изменилась со времён моего ученичества? Если кто скажет, что это:
Код:

Истина И  Истина = Истина
Истина И  Ложь  = Ложь
Ложь  И  Истина = Ложь
Ложь  И  Ложь  = Ложь

Код:

Истина ИЛИ Истина = Истина
Истина ИЛИ Ложь  = Истина
Ложь  ИЛИ Истина = Истина
Ложь  ИЛИ Ложь  = Ложь

мальчик одинаковые результаты, пусть первым бросит в меня камень. Ничего другого под «противоположные результаты» я не подразумевал.

Busla 24-09-2017 15:12 2766503

Iska, в булевой алгебре-логике 4 основных оператора:
НЕ = NOT
И = AND
ИЛИ = XOR
И/ИЛИ = OR

Истина ИЛИ Истина = Ложь
Истина И/ИЛИ Истина = Истина

P.S. Поправочка: в литературе посвящённой алгоритмам, логике и т.п. используются специальные символы. А И/или - закреплённая в словарях и справочниках языковая норма, т.к. в русском языке или обычно несёт исключающий характер.

Stalker_AleX333 24-09-2017 17:27 2766543

Цитата:

Цитата Iska
Команда COLOR ничего не «красит». Она меняет номера цветов из текущей палитры консоли. Целиком. Для всей консоли. Никакой «раскраски» вида «часть текста одного цвета, часть — другого цвета». »


Не совсем, в моем случае, кое-как извернуться можно, что я и сделал. В таком тестовом куске:
Код:

@cls
@echo off
set "testfile=test.txt"
if not exist testfile ( color 0C
echo TEST1
pause
goto test2
)

:test2
cls
color 07
@echo TEST2
pause

Текст TEST1 будет красного цвета, а текст TEST2 - дефолтного белого. Но вне тествого bat-нка пока не работает. А надо запихнуть в код, что я писал выше.

upd. Этот кусок даже в виде отдельного файла работает как-то странно, да и цвет не задается:
Код:

cls
@echo off

set "OldModsPackFiles1=Data\Flora Overhaul.esp"
set "OldModsPackFiles2=Data\Player Blink Fix.esp"
set "OldModsPackFiles3=Data\Realistic Ragdoll Force.esp"
set "OldModsPackFiles4=Data\Static Mesh Improvement.esp"
set "OldModsPackFiles5=Data\Blacksmith Forge Water Fix SE USSEP.esp"
If exist dir /a-d/b "%OldModsPackFiles1% %OldModsPackFiles2% %OldModsPackFiles3% %OldModsPackFiles4% %OldModsPackFiles5%" ( color 0c
 echo.
 echo  ╔═══════════════════════════════════════════════════════════╗
 echo  ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
 echo  ╚═══════════════════════════════════════════════════════════╝
 echo.
 echo.
 echo *ВНИМАНИЕ! В сборке обнаружены устаревшие файлы. Вероятно, установка или обновление до данной версии было произведено некорректно. Рекомендуется произвести полное удаление, с ручной очисткой оставшихся файлов и установить сборку заново.
 echo.
 echo.
pause
)

color 07
@echo All ok.
pause
exit

Да и еще, хочу запилить такие штуки:

Поиск процесса (срабатывает всегда. почему?)
Код:

tasklist | find "skyrimse.exe"
if errorlevel 0 color 0c
 echo.
 echo  ╔═══════════════════════════════════════════════════════════╗
 echo  ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
 echo  ╚═══════════════════════════════════════════════════════════╝
 echo.
 echo.
 echo *Внимание! Обнаружен запущенный процесс игры (SkyrimSE.exe). Выйдете из игры, прежде чем запускать панель управления сборкой!
 echo.
 echo.
pause
exit



Поиск файла - идентификатора

Ищем файл Silver Raven mods pack ver.1.2.7 (в папке откуда запущен батник) без расширения. Не нашли? - тогда ищем такой же но с любым окончанием ver.x.x.x Запоминаем последние пять символов (в переменную %VerID%), содержащие номер версии и пихаем их в сообщение в коде ниже. Не нашли ничего - показываем другое сообщение.

Код:

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


alpap 25-09-2017 00:56 2766622

Цитата:

Цитата Stalker_AleX333
Поиск процесса »

Код:

@echo off
tasklist|>nul find "skyrimse.exe" && color 0c
:: или
::if not errorlevel 1 color 0c
pause

Цитата:

Цитата Stalker_AleX333
Поиск файла - идентификатора »

т.е. маска именно: *ver.цифра.цифра.цифра* и все без расширения или расширение может быть? Точки есть в маске и есть в поиске имени с расширением и пять последних символов надо пояснить или пояснить цель всего этого действа.

Iska 25-09-2017 01:29 2766636

Цитата:

Цитата Stalker_AleX333
Текст TEST1 будет красного цвета, а текст TEST2 - дефолтного белого. »

Нет. Да, сначала TEST1 будет красного, а затем тоже стал бы белым (если бы Вы не очищали консоль посредствм «cls»).

Хотите разные цвета в консоли — пользуйте внешние утилиты типа echox, ansicon и escape-последовательности и т.п. (CMD/BAT - [решено] Разный цвет строк bat), либо PowerShell — там поддержка цветов встроенная.

Цитата:

Цитата Stalker_AleX333
upd. Этот кусок даже в виде отдельного файла работает как-то странно, да и цвет не задается: »

Какой цвет «не задаётся»?

Цитата:

Цитата Busla
Iska, в булевой алгебре-логике 4 основных оператора: »

Я знаю три. Основных. К коим «Исключающее ИЛИ» не относится.

Цитата:

Цитата Busla
ИЛИ = XOR
И/ИЛИ = OR »

Вы, видимо, тут ошиблись в спешке и написали наоборот.



Хорошо, коллега, Вы меня убедили. Я нигде ранее не встречал написания «Исключающего ИЛИ» как «И/ИЛИ». Рассказывайте, что Вы читали, откуда почерпнули такое написание. Будем просвещаться.

Stalker_AleX333 25-09-2017 13:30 2766762

alpap, маска - только цифры с точками (или последние пять символов) файла без расширения, начинающегося на Silver Raven mods pack ver.
Чуть дополню условия поиска: если нашли два файла идентификатора (т.е. тот, который задан в bat-нике и еще любой другой), так же выкидываем ошибку.
Т.е.
1. Актуальный id и ничего более - ок
2. Только устаревший id - ошибка №1 (из сообщений выше)
3. Актуальный id и устаревший id - ошибка №2
4. Не нашли вообще ничего - ошибка №3

Цитата:

Цитата Iska
Да, сначала TEST1 будет красного, а затем тоже стал бы белым (если бы Вы не очищали консоль посредствм «cls»). »

Да знаю я, что командой color окрашивается весь текст консоли, и без сторонних средств нормальную замену не сделать. Но мне этого и не нужно. Достаточно того, что я слепил. Главное - пользователь видит менюшки белыми а ошибки - красными. Другое дело, что не все из них (сообщений об ошибках) почему-то реагируют на команду, оставаясь белого цвета.

Вбейте кто-нибудь код целиком в тестовый файл. Я не вижу ошибок.
Скрытый текст
Код:

cls
@echo off
title Панель управления Silver Raven mods pack

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Проверка доступности файлов игры
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

set "GameExeFile=SkyrimSE.exe"
if not exist "%GameExeFile%" ( color 0c
 echo.
 echo  ╔═══════════════════════════════════════════════════════════╗
 echo  ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
 echo  ╚═══════════════════════════════════════════════════════════╝
 echo.
 echo.
 echo *ОШИБКА! Панель управления сборкой не предназначена для запуска вне папки с игрой. Перезапустите приложение из папки игры для корректной работы.
 echo.
 echo.
pause
exit
)

:: Поиск процеса игры
tasklist |> nul find "skyrimse.exe" && ( color 0c
 echo.
 echo  ╔═══════════════════════════════════════════════════════════╗
 echo  ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
 echo  ╚═══════════════════════════════════════════════════════════╝
 echo.
 echo.
 echo *Внимание! Обнаружен запущенный процесс игры (SkyrimSE.exe). Выйдете из игры, прежде чем запускать панель управления сборкой!
 echo.
 echo.
pause
exit
)

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Проверка актуальности сборки
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

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

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Основное меню панели управления сборкой
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:main_menu
cls
color 07
@echo.
@echo  ╔═══════════════════════════════════════════════════════════╗
@echo  ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
@echo  ╚═══════════════════════════════════════════════════════════╝
@echo.
@echo.

@echo ■ 1. Копирование отсортированного списка плагинов (модов) в AppData пользователя.
@echo.
@echo  Нажав цифру 1, вы подтверждаете свое согласие на копирование.
@echo.
@echo.
@echo.

@echo ■ 2. Проверка наличия обновлений сборки. (Настоятельно рекомендуется проводить хотя-бы раз в месяц)
@echo.
@echo  Нажав цифру 2, вы подтверждаете свое согласие на переход в меню выбора источника загрузки обновлений.
@echo.
@echo.
@echo.

@echo ■ 3. Загрузка ReShade. (Не влияет на производительность игры, в отличии от ENB и SweetFX)
@echo.
@echo  Нажав цифру 3, вы подтверждаете свое согласие на переход по ссылке загрузки. (Откроется браузер)
@echo.
@echo.
@echo.

@echo ■ 4. Загрузка LOOT.
@echo  Если вы собираетесь добавлять новые плагины (моды) к сборке, воспользуйтесь данной утилитой для сортировки порядка их загрузки.
@echo.
@echo  Нажав цифру 4, вы подтверждаете свое согласие на переход по ссылке загрузки. (Откроется браузер)
@echo.
@echo.
@echo.

@echo ■ 5. Полное удаление сборки. (Если вы хотите сохранить какие-либо файлы, сделайте это сейчас)
@echo.
@echo  Нажав цифру 5, вы подтверждаете свое согласие на переход в меню удаления сборки.
@echo.
@echo.
@echo.
@echo  [Чтобы просмотреть все опции панели управления используйте прокрутку]
@echo.
@echo.

@Set /p var="> Введите номер опции и нажмите Enter: "

if %var%==1  call :option_1
if %var%==2  call :option_2
if %var%==3  call :option_3
if %var%==4  call :option_4
if %var%==5  call :option_5
goto main_menu
pause& exit

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Копирование отсортированного списка плагинов
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:option_1
cls
set "FileIn=Plugins.txt"
set "BoxOut=%USERPROFILE%\AppData\Local\Skyrim Special Edition"
if not exist "%FileIn%" ( color 0c
 echo.
 echo *ОШИБКА! Файл Plugins.txt не найден!
 echo.
 echo Не удалось скопировать отсортированный список плагинов в AppData пользователя.
 echo Извлеките необходимый файл из установочных архивов со сборкой в папку с игрой вручную и перезапустите панель управления сборкой, или воспользуйтесь сортировкой плагинов с помощью программы LOOT. *Опция присутствует в данной панели управления.                                                       
 echo.
 echo.
pause
exit /b
)

if not exist "%BoxOut%" md "%BoxOut%"
copy /y "%FileIn%" "%BoxOut%\"
@echo.
@echo Отсортированный список плагинов скопирован в AppData пользователя.
@echo.
@echo.
pause
exit /b

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Проверка обновлений
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:option_2
cls
@echo.
@echo  Выберете источник проверки обновлений (будет открыт браузер):
@echo.
@echo  ╔══════════════════════════════════════════════════════════════════╗
@echo  ║ ╔═══╗                      ╔═══╗                        ╔═══╗                    ║
@echo  ║ ║ 1 ║ ЯндексДиск        ║ 2 ║ Gamer-Mods.ru        ║ 3 ║ RuTracker.org ║
@echo  ║ ╚═══╝                ╚═══╝                        ╚═══╝                    ║
@echo  ╚══════════════════════════════════════════════════════════════════╝
@echo                          Вернуться в главное меню - 0
@echo.
@echo  *Если вы хотите сообщить об ошибке(ах) в сборке или просто высказать свои идеи и предложения автору, рекомендуется использовать 2-ой вариант.
@echo.
@echo.

@Set /p var="> Введите свой ответ и нажмите Enter: "
if %var%==1 call :option_2_check_updates_yandexdisk
if %var%==2 call :option_2_check_updates_gamer-mods
if %var%==3 call :option_2_check_updates_rutracker
if %var%==0 goto main_menu

:: Проверка обновлений - ЯндексДиск
:option_2_check_updates_yandexdisk
cls
start https://yadi.sk/d/qyJbvZs43Mb3fR
goto main_menu

:: Проверка обновлений - Gamer-mods.ru
:option_2_check_updates_gamer-mods
cls
start http://gamer-mods.ru/forum/73-2082-1
goto main_menu

:: Проверка обновлений - RuTracker.org
:option_2_check_updates_rutracker
cls
start https://rutracker.org/forum/viewtopic.php?t=5356842
goto main_menu

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Загрузка ReShade
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:option_3
cls
start https://reshade.me
exit /b

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Загрузка LOOT
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:option_4
cls
start https://loot.github.io
exit /b

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Удаление сборки
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:option_5
cls
@echo  Удаление Silver Raven mods pack.
@echo.
@echo          ╔═══╗                                                      ╔═══╗
@echo  Нажмите ║ Y ║ для подтверждения начала процесса удаления сборки или ║ N ║ для его отмены.
@echo          ╚═══╝                                                      ╚═══╝
@echo.
@echo  *ВСЕ файлы в подпапках Interface, Meshes, Scripts, Textures, Video, а также плагины сборки и данный exe файл будут удалены!
@echo.
@echo.

@Set /p var="> Введите свой ответ и нажмите Enter: "
if %var%==y call :option_5_start_uninstall
if %var%==n goto main_menu

:option_5_start_uninstall
:: Удаление папок сборки
cls
setlocal enableextensions enabledelayedexpansion
pushd "%~dp0" & (
rd /s /q "Data\Interface" "Data\Meshes" "Data\Scripts" "Data\Textures" "Data\Video"
       
:: Удаление плагинов сборки и прочих файлов       
del /f /q "Data\A Quality World Map - Textures.*" "Data\A Quality World Map.*" "Data\Better Dynamic Snow.*" "Data\Book Covers Skyrim - Textures.*" "Data\Book Covers Skyrim.*" "Data\Cutting Room Floor.*" "Data\Enhanced Blood.*" "Data\Footprints.*" "Data\Immersive Citizens - AI Overhaul.*" "Data\Improved Closefaced Helmets.*" "Data\Improved Puddles.*" "Data\No Snow Under The Roof - Cutting Room Floor Patch.* "Data\No Snow Under The Roof.*" "Data\Northfires Photoreal Mountains.*" "Data\RealisticWaterTwo.*" "Data\Silver Raven Mods Pack.*" "Data\Skyrim Flora Overhaul.*" "Data\Snazzy Furniture and Clutter Overhaul.*" "Data\Static Mesh Improvement Mod.*" "Data\The Paarthurnax Dilemma.*" "Data\True Storms - Textures.*" "Data\True Storms.*" "Data\Unofficial Skyrim Special Edition Patch.*" "Data\Wet and Cold.*" "Data\icepenguinworldmapclassic.*" "Plugins.*" "Readme.*" "Readme update.*"               
popd
)
endlocal

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Удаление самого cmd(exe)-шника
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

del "%~dpnx0"


Iska 25-09-2017 13:44 2766769

Цитата:

Цитата Stalker_AleX333
Я не вижу ошибок. »

И тем не менее, они пишутся открытым текстом.
Код:

echo *Внимание! Обнаружен запущенный процесс игры ^(SkyrimSE.exe^). Выйдете из игры, прежде чем запускать панель управления сборкой!
Дальше не глядел.

Stalker_AleX333 25-09-2017 14:23 2766786

Iska, так, стоп. А что не так-то со скобками? Они есть и в других сообщениях, но к ошибкам это не приводит.

upd. Ой я дурак. Сообщение же само по себе в скобках. Все верно.

Iska 25-09-2017 14:45 2766793

Цитата:

Цитата Stalker_AleX333
А что не так-то со скобками? Они есть и в других сообщениях, но к ошибкам это не приводит. »

Эти скобки расположены внутри других операторных скобок:
Код:

tasklist.exe | >nul find.exe "skyrimse.exe" && (
        color 0c
        echo ╔═══════════════════════════════════════════════════════════╗
        echo ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
        echo ╚═══════════════════════════════════════════════════════════╝
        echo *Внимание Обнаружен запущенный процесс игры ^(SkyrimSE.exe^). Выйдете из игры, прежде чем запускать панель управления сборкой
        pause
        exit /b
)

Посему, без экранирования интерпретатор команд воспримет первую же «)» как конец операторных скобок:
Код:

tasklist.exe | >nul find.exe "skyrimse.exe" && (
        color 0c
        echo ╔═══════════════════════════════════════════════════════════╗
        echo ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
        echo ╚═══════════════════════════════════════════════════════════╝
        echo *Внимание Обнаружен запущенный процесс игры (SkyrimSE.exe)bla-bla-bla. Выйдете из игры, прежде чем запускать панель управления сборкой
        pause
        exit /b
)


В данном случае достаточно экранировать только закрывающую скобку, но лучше экранировать обе — и открывающую, и закрывающую.

Прочие же echo со скобками расположены вовне операторных скобок, посему последние не вызывают при интерпретации подобных проблем.

Stalker_AleX333 25-09-2017 14:54 2766796

Iska, а с этим можешь помочь?

Цитата:

alpap, маска - только цифры с точками (или последние пять символов) файла без расширения, начинающегося на Silver Raven mods pack ver.
Чуть дополню условия поиска: если нашли два файла идентификатора (т.е. тот, который задан в bat-нике и еще любой другой), так же выкидываем ошибку.
Т.е.
1. Актуальный id и ничего более - ок
2. Только устаревший id - ошибка №1 (из сообщений выше)
3. Актуальный id и устаревший id - ошибка №2
4. Не нашли вообще ничего - ошибка №3 »

Iska 25-09-2017 17:04 2766822

Цитата:

Цитата Stalker_AleX333
Iska, а с этим можешь помочь? »

Сомневаюсь, ибо мне непонятно, что требуется.

alpap 25-09-2017 21:36 2766887

Stalker_AleX333,
Цитата:

Цитата Iska
ибо мне непонятно, что требуется »

присоединяюсь

например
Цитата:

Цитата Stalker_AleX333
маска - только цифры с точками (или последние пять символов) файла без расширения, начинающегося на Silver Raven mods pack ver »

так только цифры с точками: *цифра.цифра.цифра или *x:~-5
или же каждый файл начинается так: 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, к примеру, может нервы хорошо попортить чтобы выявить из них максимальную версию (и что считать за максимальную) - это все тоже надо сразу предусмотреть и уложить в код.

Stalker_AleX333 25-09-2017 23:40 2766912

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 2767479

Я так понимаю тему можно закрывать? Поток благодетельной помощи иссяк?

Iska 28-09-2017 21:52 2767482

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

Busla 08-10-2017 17:15 2769194

Извиняюсь, запамятовал про эту тему.
Цитата:

Цитата Iska
Вы, видимо, тут ошиблись в спешке и написали наоборот.
<..> Я нигде ранее не встречал написания «Исключающего ИЛИ» как «И/ИЛИ». »

Это, конечно, "гениальный" ход - сначала исправить моё утверждение на обратное, а после сказать, что не встречались с таким.

Цитата:

Цитата Iska
Цитата Busla:
Iska, в булевой алгебре-логике 4 основных оператора: »
Я знаю три. Основных. К коим «Исключающее ИЛИ» не относится. »

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

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

Iska 09-10-2017 06:57 2769284

Цитата:

Цитата Busla
Это, конечно, "гениальный" ход - сначала исправить моё утверждение на обратное, а после сказать, что не встречались с таким.»

Я предположил, что Вы описались. Это не так? Теперь я правильно понимаю, что выделенное:
Цитата:

Цитата Busla
Iska, в булевой алгебре-логике 4 основных оператора:
НЕ = NOT
И = AND
ИЛИ = XOR
И/ИЛИ = OR
Истина ИЛИ Истина = Ложь
Истина И/ИЛИ Истина = Истина
»

мне следует понимать именно так, как Вы написали и не иначе?


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

Цитата:

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

Ткните пальцем номер/номера страниц или укажите названия статей, где можно посмотреть.

Цитата:

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

Спасибо, ясно. Источник Вашей информации понятен.

Busla 09-10-2017 11:21 2769322

Цитата:

Цитата Iska
Равным образом никогда не встречался с трактовкой «ИЛИ» как «XOR», а не «OR». »

мама вас в детстве не спрашивала: Тебе купить машинку или мячик?
это XOR - исключающее ИЛИ
и сами никогда не говорили: "могу выделить время сегодня или завтра" - это тоже XOR

Цитата:

Цитата Iska
Ткните пальцем номер/номера страниц »

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


Время: 04:53.

Время: 04:53.
© OSzone.net 2001-