|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - CMD-шник с внешним конфиг-файлом |
|
CMD/BAT - CMD-шник с внешним конфиг-файлом
|
Stalker_AleX333
Сообщения: n/a |
Поскольку меня задолбало перед каждой из множества опцией конвертированного в exe cmd-шника, устанавливать проверки наличия необходимых файлов на своих местах и править его при любом чихе (ибо ее юзеры, любят творить дичь), я решил запилить нечто вроде внешнего конфиг файла, где будут храниться все постоянно изменяемые параметры.
1. Для проверки наличия файлов по списку, нарыл такой код: :: NoTot счётчик отсутствующих файлов set NoTot=0 :: NoFil перечень отсутствующих файлов set NoFil= :: перебор элементов заданного перечня for %%a in ("file 1.txt" "file 2.txt") do call :ChkFile %%a :: если всё в порядке - делаем то, что нужно if %NoTot% == 0 goto IfAllOk :: если чего-то нет - известим о факте echo ! Missed %NoTot% file(s) [%NoFil% ] goto :eof :ChkFile проверка наличия, учёт отсутствия файла if exist %1 goto :eof :: если файла нет, запомним имя и увеличим счётчик set NoFil=%NoFil% %1 set /a NoTot=%NoTot%+1 goto :eof :IfAllOk действия при наличии всех файлов из списка Скрытый текст
Silver Raven mods pack data\ENB\enbseries\enbbloom\GaussBlur2.h Silver Raven mods pack data\ENB\enbseries\enbbloom\KawaseBloom.h Silver Raven mods pack data\ENB\enbseries\modular shaders\enbeffect_AdaptTool.fxh Silver Raven mods pack data\ENB\enbseries\modular shaders\msHelpers.fxh Silver Raven mods pack data\ENB\enbseries\textures\SMAA_AreaTex.dds Silver Raven mods pack data\ENB\enbseries\textures\SMAA_SearchTex.dds Silver Raven mods pack data\ENB\enbseries\textures\Firelut.png Silver Raven mods pack data\ENB\enbseries\textures\Firelut1.png Silver Raven mods pack data\ENB\enbseries\textures\Firelut2.png Silver Raven mods pack data\ENB\enbseries\enbadaptation.fx Silver Raven mods pack data\ENB\enbseries\enbbloom.fx Silver Raven mods pack data\ENB\enbseries\enbdepthoffield.fx Silver Raven mods pack data\ENB\enbseries\enbeffect.fx Silver Raven mods pack data\ENB\enbseries\enbeffectpostpass.fx Silver Raven mods pack data\ENB\enbseries\enblens.fx Silver Raven mods pack data\ENB\enbseries\enbsmaa.fx Silver Raven mods pack data\ENB\enbseries\SMAA.h Silver Raven mods pack data\ENB\enbseries\_weatherlist.ini Silver Raven mods pack data\ENB\enbseries\enbadaptation.fx.ini Silver Raven mods pack data\ENB\enbseries\enbbloom.fx.ini Silver Raven mods pack data\ENB\enbseries\enbdepthoffield.fx.ini Silver Raven mods pack data\ENB\enbseries\enbeffect.fx.ini Silver Raven mods pack data\ENB\enbseries\enbeffectpostpass.fx.ini Silver Raven mods pack data\ENB\enbseries\enblens.fx.ini Silver Raven mods pack data\ENB\enbseries\enbraindrops.png Silver Raven mods pack data\ENB\d3d11.dll Silver Raven mods pack data\ENB\d3dcompiler_46e.dll Да и в принципе, указывать любые отсутствующие файлы по списку не нужно, в случае их нехватки пойдет и что-то, вроде этого: if not exist "%что-угодно из списка%" ( color fc echo. echo ╔════════════════════════════════════════════════════════════╗ echo ║ Панель управления Silver Raven mods pack версии 1.4.0 BETA ║ echo ╚════════════════════════════════════════════════════════════╝ echo. echo. echo *ОШИБКА! Некоторые файлы, необходимые для корректной работы программы, не найдены. echo Извлеките папку Silver Raven mods pack data из установочных архивов со сборкой в папку игры и перезапустите панель управления. Убедитесь, что антивирусное ПО не блокирует ее работу. echo. echo. pause exit ) При каждом запуске cmd-шника, в config.cfg проверяется статус строки update_installed, если он = false игнорим и продолжаем свою работу. Если = true, тогда goto :autoupdate После выполнения кода в :autoupdate, меняем значение update_installed на = false. Аналогично, возможно ли указывать список файлов для переименования\перемещения\удаления во внешнем файле? cls del /f /q *список файлов ищем в config.cfg, в строке autoupdate_files_for_delete = * popd ) endlocal Возможно, я запутанно все описал и это идиотская утопия. И да, я знаю, что такое лучше сделать на чем-нибудь другом, ну тут уж так получилось. Надеюсь на вашу помощь! З.Ы. На Win XP никто запускать не будет. Доп. извращений не нужно. |
|
Отправлено: 19:47, 21-01-2019 |
Stalker_AleX333
Сообщения: n/a |
Вот что дали (захвачу соседний код, чтобы нагляднее было):
:: Перемещение папок и\или файлов cls xcopy %AutoUpdateMoveFoldersAndFiles% /e /y /c /i rd /s /q %AutoUpdateMoveFoldersAndFilesForDelete% :: Читаем конфиг-файл и тут же пишем его вызывая из write_autoupdate_config, так, вроде? <"%AutoUpdateConfig%" (for /f "delims=" %%a in ('more') do @set "%%a"& call :write_autoupdate_config "%%a") >nul move $ "%AutoUpdateConfig%" goto autoupdate_end :: Пишем изменившиеся значения :write_autoupdate_config >>$ (<nul set /p="%~1"|>nul find "UpdateInstalled=" && ( echo %UpdateInstalled%|>nul find "true" && (echo UpdateInstalled=false& echo:) ) || ( echo %~1& echo: ) ) exit /b :autoupdate_end color f2 @echo. @echo ╔══════════════════════════════════════════╗ @echo ║ Панель управления Silver Raven mods pack ║ @echo ║ РЕЖИМ ОБНОВЛЕНИЯ ║ @echo ╚══════════════════════════════════════════╝ @echo. @echo. @echo ■ Операции с файлами сборки успешно завершены. @echo. @echo. @echo Для корректной работы сборки, рекомендуется заново скопировать отсортированный список загрузки модов и файлы настроек игры. Если у вас уже установлены какие-либо дополнительные плагины, потребуется провести их повторную сортировку вручную. @echo. @echo. pause goto main_menu Anonymоus, я придержу ваш вариант на будущее, прикрутить то не проблема. Просто пока вышло, что его функционал избыточен. У меня и так уже 3676 строк. Читать эту портянку то еще занятие. Ну сам виноват, надо было остановиться, пока стало не поздно... |
Отправлено: 00:03, 30-01-2019 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Stalker_AleX333:
Цитата Stalker_AleX333:
Цитата Stalker_AleX333:
Цитата Stalker_AleX333:
Цитата Stalker_AleX333:
Скрытый текст
Основной.bat
@echo off :: Код :: Обращение к одному из Вспомогательных1.bat call "Вспомогательный1.bat" "параметр1" "параметр2" ... :: Вернулись из "Вспомогательного1.bat" с какими-то результатами (новыми переменными) :: Код :: Обращение к одному из Вспомогательных2.bat call "Вспомогательный2.bat" "параметр1" "параметр2" ... :: Вернулись из "Вспомогательного2.bat" с какими-то результатами (новыми переменными) :: Код exit |
|||||
Отправлено: 01:44, 30-01-2019 | #22 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Stalker_AleX333:
Цитата Stalker_AleX333:
![]() Скрытый текст
![]() В нём всё замечательно видно, будь то хоть 1000 строк, хоть 10000 строк. |
||
Отправлено: 03:36, 30-01-2019 | #23 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать |
Последний раз редактировалось alpap, 05-04-2019 в 22:57. Отправлено: 18:09, 30-01-2019 | #24 |
Stalker_AleX333
Сообщения: n/a |
Я вот что-то сломал и не пойму что, но оно теперь не работает:
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Проверка доступности файлов панели управления :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: set "HDSoundsPackagesConfigBackup=Silver Raven mods pack data\hd_sounds_packages_backup.cfg" set "ControlPanelFilesListConfig=Silver Raven mods pack data\fileslist.cfg" set "ControlPanelFilesListMissingFiles=" :: Проверяем наличие конфиг-файла hd_sounds_packages_backup.cfg от прошлой установки и устанавливаем его как основной if exist "%HDSoundsPackagesConfigBackup%" ( del /f /q "Silver Raven mods pack data\hd_sounds_packages.cfg" ren "%HDSoundsPackagesConfigBackup%" hd_sounds_packages.cfg ) if not exist "%ControlPanelFilesListConfig%" ( cls color fc echo. echo ╔══════════════════════════════════════════╗ echo ║ Панель управления Silver Raven mods pack ║ echo ╚══════════════════════════════════════════╝ echo. echo. echo *ОШИБКА! Файл конфигурации fileslist.cfg, необходимый для корректной работы программы, не найден. echo Извлеките его из установочных архивов со сборкой в папку Silver Raven mods pack data вручную и перезапустите панель управления. Убедитесь, что антивирусное ПО не блокирует ее работу. echo. echo. pause exit ) :: Чтение конфиг-файла fileslist.cfg setlocal EnableDelayedExpansion for /f "tokens=1,2* delims==" %%A in ("%ControlPanelFilesListConfig%") do set "$%%A=%%B" :: Проверка наличия всех файлов для панели управления в Silver Raven mods pack data for %%? in (%$ControlPanelFilesListConfig%) do ( if not exist "%%~?" set ControlPanelFilesListMissingFiles=!ControlPanelFilesListMissingFiles!, "%%~?" ) setlocal DisableDelayedExpansion if defined ControlPanelFilesListMissingFiles ( color fc echo. echo ╔══════════════════════════════════════════╗ echo ║ Панель управления Silver Raven mods pack ║ echo ╚══════════════════════════════════════════╝ echo. echo. echo *ОШИБКА! Следующие файлы, необходимые для корректной работы программы, не найдены: echo. echo. for %%A in (%ControlPanelFilesListMissingFiles%) do echo %%~A echo. echo. echo Извлеките папку Silver Raven mods pack data из установочных архивов со сборкой в папку игры вручную и перезапустите панель управления. Убедитесь, что антивирусное ПО не блокирует ее работу. echo. echo. pause exit ) И надо было о переменных подумать заранее. В разных модулях, порой приходится объявлять одни и те же. Цитата alpap:
Цитата alpap:
Цитата Iska:
![]() |
|||
Отправлено: 18:39, 30-01-2019 | #25 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата alpap:
![]() Цитата Stalker_AleX333:
Цитата Stalker_AleX333:
|
|||
Отправлено: 19:13, 30-01-2019 | #26 |
Stalker_AleX333
Сообщения: n/a |
Цитата Iska:
Цитата Iska:
Хотя, я где-то читал, что ! можно забить так: ^^^! А так, я давно бы перенес все переменные в шапку cmd-шника. И объем кода заметно уменьшился. |
||
Отправлено: 20:53, 30-01-2019 | #27 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Stalker_AleX333:
|
|
Отправлено: 21:06, 30-01-2019 | #28 |
Stalker_AleX333
Сообщения: n/a |
Цитата Iska:
И кстати, без PowerShell-а создать ярлык с атрибутами и указанным путем к отображаемой иконке возможно? |
|
Последний раз редактировалось Stalker_AleX333, 30-01-2019 в 22:00. Отправлено: 21:26, 30-01-2019 | #29 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Stalker_AleX333, Попробуйте сначала так:
@Echo Off cls Set "A=Main" Echo %A% Call :Kuku Echo %A% Pause Exit /B :Kuku Set "A=kuku" Echo %A% Exit /B @Echo Off cls Set "A=Main" Echo %A% Call :Kuku Echo %A% Pause Exit /B :Kuku SetLocal Set "A=kuku" Echo %A% EndLocal Exit /B Если у Вас длинный код, для читаемости и удобства написания можно оформить отдельные функционально обусловленные куски в виде процедур, при необходимости применяя SetLocal - EndLocal А переменные в знаках ! - это уже другая песТня |
------- Последний раз редактировалось megaloman, 30-01-2019 в 22:14. Отправлено: 22:00, 30-01-2019 | #30 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Общее - [статья]OOBE.cmd/SetupComplete.cmd/FirstLogon.cmd | alegz81 | Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista | 19 | 17-04-2018 08:18 | |
CMD/BAT - копирование файлов из одной папки в другую cmd файлом через txt файл | Marina_Egorova | Скриптовые языки администрирования Windows | 1 | 15-03-2018 22:36 | |
Перестал открываться DVD-шник | cahes | Оптические приводы | 3 | 18-06-2016 12:24 | |
[решено] Как запустить cmd-шник в окне, которое нельзя закрыть | KostyaTax | Microsoft Windows NT/2000/2003 | 6 | 04-07-2005 18:09 | |
не запускается ехе"шник | rivera | Хочу все знать | 2 | 20-06-2005 16:51 |
|