CMD/BAT - CMD-шник с внешним конфиг-файлом

Ответить
 • Просмотры: 1
Аватара пользователя
Guest

Re: CMD/BAT - CMD-шник с внешним конфиг-файлом

Сообщение Guest »

Если честно, не вижу смысла в упрощении. Разве что на размере скрипта сэкономить? Так он всё равно в exe конвертируется.Для вашего случая может быть избыточно наличие тех же комментариев в конфиге, но можно ведь просто их не использовать?

Просто если вдруг в будущем понадобится добавить ещё что-то, в случае использования функции из моего примера никаких изменений вносить не понадобится, а ваш вариант со временем обрастёт кучей условий, когда скрипт панели управления будет прирастать функционалом.
Аватара пользователя
megaloman

Re: CMD/BAT - CMD-шник с внешним конфиг-файлом

Сообщение megaloman »

Цитата Stalker_AleX333:



что в данном случае делют символы: < и >, >>
CMD/BAT - CMD-шник с внешним конфиг-файлом




>$
CMD/BAT - CMD-шник с внешним конфиг-файлом




- запись во временный файл $ с дозаписью, поэтому >>, равносильно: echo stroka>>$


Цитата Stalker_AleX333:



не очень нравиться прыжки туда сюда через goto и exit
CMD/BAT - CMD-шник с внешним конфиг-файлом




ну это как кому, если правильно и наглядно организовано, то гораздо лучше наваленных строк


Цитата Stalker_AleX333:



Я бы в один код все засунул
CMD/BAT - CMD-шник с внешним конфиг-файлом




это надо пояснить, код в данном случае один, что имелось ввиду?


Цитата Stalker_AleX333:



У меня и так уже 3676 строк
CMD/BAT - CMD-шник с внешним конфиг-файлом




вот поэтому и удобнее подпрограммы с наглядными переходами, а еще можно практиковать такой вариант. Выделяете папку под задачу и складываете в нее отдельные bat файлы с осмысленными названиями, а в коде основного bat обращаетесь по call не к подпрограмме, а к одному из bat в папке, выглядит примерно так:





Скрытый текст

[spoiler]Основной.bat



Код:
[/spoiler]

Код: Выделить всё

@echo off
:: Код
:: Обращение к одному из Вспомогательных1.bat
call "Вспомогательный1.bat" "параметр1" "параметр2" ...
:: Вернулись из "Вспомогательного1.bat" с какими-то результатами (новыми переменными)
:: Код
:: Обращение к одному из Вспомогательных2.bat
call "Вспомогательный2.bat" "параметр1" "параметр2" ...
:: Вернулись из "Вспомогательного2.bat" с какими-то результатами (новыми переменными)
:: Код
exit

Вспомогательный1.bat (и также другие)



Код:

Код: Выделить всё

@echo off
:: Код (Какие-то новые переменные)
:: Заканчивать Вспомогательные.bat обязательно по exit /b (exit /b 0 или 1 ...)
exit /b
Аватара пользователя
alpap

Re: CMD/BAT - CMD-шник с внешним конфиг-файлом

Сообщение alpap »

Цитата Stalker_AleX333:



Ну и не очень нравиться прыжки туда сюда через goto и exit.
CMD/BAT - CMD-шник с внешним конфиг-файлом




Не существует «прыжков через goto и exit». Либо goto-goto (простые переходы), либо call-exit /b (вызов квазипроцедуры). А goto и exit несовместимы в принципе. И в коде коллеги megaloman их нет. Есть пара именно квазипроцедур с вызовом по call и возвратом по exit /b, и один goto :eof.




Цитата Stalker_AleX333:



У меня и так уже 3676 строк. Читать эту портянку то еще занятие.
CMD/BAT - CMD-шник с внешним конфиг-файлом




Вот для того и разбивают код на части и организуют те самые процедуры. Или, возможно, у кого-то просто неудачно выбранный редактор Изображение. У меня такой:



Скрытый текст

[spoiler]Изображение[/spoiler]




В нём всё замечательно видно, будь то хоть 1000 строк, хоть 10000 строк.
Аватара пользователя
Iska

Re: CMD/BAT - CMD-шник с внешним конфиг-файлом

Сообщение Iska »

Цитата Iska:



всё замечательно видно
CMD/BAT - CMD-шник с внешним конфиг-файлом




в AkeiPad тоже вполне так:



Скрытый текст

[spoiler]
Файл 156280
[/spoiler]
Аватара пользователя
alpap

Re: CMD/BAT - CMD-шник с внешним конфиг-файлом

Сообщение alpap »

Я вот что-то сломал и не пойму что, но оно теперь не работает:



Код:

Код: Выделить всё

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Проверка доступности файлов панели управления
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
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:



вот поэтому и удобнее подпрограммы с наглядными переходами
CMD/BAT - CMD-шник с внешним конфиг-файлом




Да кто ж спорит то, конечно удобнее. Но напоминаю, у меня это компилируется в exe-шник. Не плодить же, сгенерированные им cmd-шники в подпапках.




Цитата alpap:



это надо пояснить, код в данном случае один, что имелось ввиду?
CMD/BAT - CMD-шник с внешним конфиг-файлом




В первом куске, мы читаем конфиг-файл, затем через call переходим во второй и там уже пишем. Вот это все я хотел объединить, без переходов.




Цитата Iska:



Или, возможно, у кого-то просто неудачно выбранный редактор
CMD/BAT - CMD-шник с внешним конфиг-файлом




Notepad++ наше фсе!11 (правда я не пользуюсь темными темами оформления, как большинство, не привык. может, многое теряю)



Аватара пользователя
Iska

Re: CMD/BAT - CMD-шник с внешним конфиг-файлом

Сообщение Iska »

Цитата alpap:



в AkeiPad тоже вполне так:
CMD/BAT - CMD-шник с внешним конфиг-файлом




Хе-хе. Теперь я понял, почему заключают set'ы в кавычки Изображение — там лишние пробелы в конце строк. И я бы ещё задал в настройках длину tab'ам не в 8 пробелов, а в 4.




Цитата Stalker_AleX333:



Notepad++ наше фсе!11
CMD/BAT - CMD-шник с внешним конфиг-файлом




Не в том дело. Я гляжу, что Вы вложенными отступами для наглядности фактически не пользуетесь.




Цитата Stalker_AleX333:



И надо было о переменных подумать заранее. В разных модулях, порой приходится объявлять одни и те же.
CMD/BAT - CMD-шник с внешним конфиг-файлом




Ну и хрен с ним — setlocal/endlocal-то на что нам даны?!
Аватара пользователя
Iska

Re: CMD/BAT - CMD-шник с внешним конфиг-файлом

Сообщение Iska »

Цитата Iska:



Я гляжу, что Вы вложенными отступами для наглядности фактически не пользуетесь.
CMD/BAT - CMD-шник с внешним конфиг-файлом




Да как то не приучился.




Цитата Iska:



Ну и хрен с ним — setlocal/endlocal-то на что нам даны?!
CMD/BAT - CMD-шник с внешним конфиг-файлом




А с ними не пашет вывод символов, вроде * : !

Хотя, я где-то читал, что ! можно забить так: ^^^!



А так, я давно бы перенес все переменные в шапку cmd-шника. И объем кода заметно уменьшился.
Аватара пользователя
Iska

Re: CMD/BAT - CMD-шник с внешним конфиг-файлом

Сообщение Iska »

Цитата Stalker_AleX333:



А с ними не пашет вывод символов, вроде * : !
CMD/BAT - CMD-шник с внешним конфиг-файлом




Да ладно. На обработку символа ! влияет параметр enabledelayedexpansion, но никак не сама команда setlocal.
Аватара пользователя
Iska

Re: CMD/BAT - CMD-шник с внешним конфиг-файлом

Сообщение Iska »

Цитата Iska:



Да ладно. На обработку символа ! влияет параметр enabledelayedexpansion, но никак не сама команда setlocal.
CMD/BAT - CMD-шник с внешним конфиг-файлом




Ну значит у меня уже крыша потихоньку едет, от этого всего.



И кстати, без PowerShell-а создать ярлык с атрибутами и указанным путем к отображаемой иконке возможно?
Аватара пользователя
Iska

Re: CMD/BAT - CMD-шник с внешним конфиг-файлом

Сообщение Iska »

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 позволяет "экранироваить" область видимости переменных. Переменные с одинаковыми именами в одной части программы не будут изменяться в другой части, то есть, внутри подпрограммы Вы можете объявлять переменные без боязни их переопределить в других частях программы.

Если у Вас длинный код, для читаемости и удобства написания можно оформить отдельные функционально обусловленные куски в виде процедур, при необходимости применяя SetLocal - EndLocal

А переменные в знаках ! - это уже другая песТня
Ответить

Вернуться в «Скриптовые языки администрирования Windows»