CMD/BAT - CMD-шник с внешним конфиг-файлом
-
Guest
Re: CMD/BAT - CMD-шник с внешним конфиг-файлом
Если честно, не вижу смысла в упрощении. Разве что на размере скрипта сэкономить? Так он всё равно в exe конвертируется.Для вашего случая может быть избыточно наличие тех же комментариев в конфиге, но можно ведь просто их не использовать?
Просто если вдруг в будущем понадобится добавить ещё что-то, в случае использования функции из моего примера никаких изменений вносить не понадобится, а ваш вариант со временем обрастёт кучей условий, когда скрипт панели управления будет прирастать функционалом.
Просто если вдруг в будущем понадобится добавить ещё что-то, в случае использования функции из моего примера никаких изменений вносить не понадобится, а ваш вариант со временем обрастёт кучей условий, когда скрипт панели управления будет прирастать функционалом.
-
megaloman
Re: CMD/BAT - CMD-шник с внешним конфиг-файлом
Цитата Stalker_AleX333:
что в данном случае делют символы: < и >, >>
>$
- запись во временный файл $ с дозаписью, поэтому >>, равносильно: echo stroka>>$
Цитата Stalker_AleX333:
не очень нравиться прыжки туда сюда через goto и exit
ну это как кому, если правильно и наглядно организовано, то гораздо лучше наваленных строк
Цитата Stalker_AleX333:
Я бы в один код все засунул
это надо пояснить, код в данном случае один, что имелось ввиду?
Цитата Stalker_AleX333:
У меня и так уже 3676 строк
вот поэтому и удобнее подпрограммы с наглядными переходами, а еще можно практиковать такой вариант. Выделяете папку под задачу и складываете в нее отдельные bat файлы с осмысленными названиями, а в коде основного bat обращаетесь по call не к подпрограмме, а к одному из bat в папке, выглядит примерно так:
Скрытый текст
[spoiler]Основной.bat
Код: [/spoiler]
Вспомогательный1.bat (и также другие)
Код:
что в данном случае делют символы: < и >, >>
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-шник с внешним конфиг-файлом
Цитата Stalker_AleX333:
Ну и не очень нравиться прыжки туда сюда через goto и exit.
Не существует «прыжков через goto и exit». Либо goto-goto (простые переходы), либо call-exit /b (вызов квазипроцедуры). А goto и exit несовместимы в принципе. И в коде коллеги megaloman их нет. Есть пара именно квазипроцедур с вызовом по call и возвратом по exit /b, и один goto :eof.
Цитата Stalker_AleX333:
У меня и так уже 3676 строк. Читать эту портянку то еще занятие.
Вот для того и разбивают код на части и организуют те самые процедуры. Или, возможно, у кого-то просто неудачно выбранный редактор
. У меня такой:
Скрытый текст
[spoiler]
[/spoiler]
В нём всё замечательно видно, будь то хоть 1000 строк, хоть 10000 строк.
Ну и не очень нравиться прыжки туда сюда через 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:
всё замечательно видно
в AkeiPad тоже вполне так:
Скрытый текст
[spoiler]
всё замечательно видно
CMD/BAT - CMD-шник с внешним конфиг-файлом
в AkeiPad тоже вполне так:
Скрытый текст
[spoiler]
Файл 156280
[/spoiler]-
alpap
Re: CMD/BAT - CMD-шник с внешним конфиг-файлом
Я вот что-то сломал и не пойму что, но оно теперь не работает:
Код:
А вообще, не представляю, как все оттестировать (не на кошках юзерах). Есть кто скучающий, упертый, перфикционист? Я отправил бы весь код в личку. Там наверняка можно многое улучшить.
И надо было о переменных подумать заранее. В разных модулях, порой приходится объявлять одни и те же.
Цитата alpap:
вот поэтому и удобнее подпрограммы с наглядными переходами
Да кто ж спорит то, конечно удобнее. Но напоминаю, у меня это компилируется в exe-шник. Не плодить же, сгенерированные им cmd-шники в подпапках.
Цитата alpap:
это надо пояснить, код в данном случае один, что имелось ввиду?
В первом куске, мы читаем конфиг-файл, затем через call переходим во второй и там уже пишем. Вот это все я хотел объединить, без переходов.
Цитата Iska:
Или, возможно, у кого-то просто неудачно выбранный редактор
Notepad++ наше фсе!11 (правда я не пользуюсь темными темами оформления, как большинство, не привык. может, многое теряю)
Код:
Код: Выделить всё
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Проверка доступности файлов панели управления
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
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-шник с внешним конфиг-файлом
Цитата alpap:
в AkeiPad тоже вполне так:
Хе-хе. Теперь я понял, почему заключают set'ы в кавычки
— там лишние пробелы в конце строк. И я бы ещё задал в настройках длину tab'ам не в 8 пробелов, а в 4.
Цитата Stalker_AleX333:
Notepad++ наше фсе!11
Не в том дело. Я гляжу, что Вы вложенными отступами для наглядности фактически не пользуетесь.
Цитата Stalker_AleX333:
И надо было о переменных подумать заранее. В разных модулях, порой приходится объявлять одни и те же.
Ну и хрен с ним — setlocal/endlocal-то на что нам даны?!
в 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:
Ну и хрен с ним — setlocal/endlocal-то на что нам даны?!
А с ними не пашет вывод символов, вроде * : !
Хотя, я где-то читал, что ! можно забить так: ^^^!
А так, я давно бы перенес все переменные в шапку cmd-шника. И объем кода заметно уменьшился.
Я гляжу, что Вы вложенными отступами для наглядности фактически не пользуетесь.
CMD/BAT - CMD-шник с внешним конфиг-файлом
Да как то не приучился.
Цитата Iska:
Ну и хрен с ним — setlocal/endlocal-то на что нам даны?!
CMD/BAT - CMD-шник с внешним конфиг-файлом
А с ними не пашет вывод символов, вроде * : !
Хотя, я где-то читал, что ! можно забить так: ^^^!
А так, я давно бы перенес все переменные в шапку cmd-шника. И объем кода заметно уменьшился.
-
Iska
Re: CMD/BAT - CMD-шник с внешним конфиг-файлом
Цитата Stalker_AleX333:
А с ними не пашет вывод символов, вроде * : !
Да ладно. На обработку символа ! влияет параметр enabledelayedexpansion, но никак не сама команда setlocal.
А с ними не пашет вывод символов, вроде * : !
CMD/BAT - CMD-шник с внешним конфиг-файлом
Да ладно. На обработку символа ! влияет параметр enabledelayedexpansion, но никак не сама команда setlocal.
-
Iska
Re: CMD/BAT - CMD-шник с внешним конфиг-файлом
Цитата Iska:
Да ладно. На обработку символа ! влияет параметр enabledelayedexpansion, но никак не сама команда setlocal.
Ну значит у меня уже крыша потихоньку едет, от этого всего.
И кстати, без PowerShell-а создать ярлык с атрибутами и указанным путем к отображаемой иконке возможно?
Да ладно. На обработку символа ! влияет параметр enabledelayedexpansion, но никак не сама команда setlocal.
CMD/BAT - CMD-шник с внешним конфиг-файлом
Ну значит у меня уже крыша потихоньку едет, от этого всего.
И кстати, без PowerShell-а создать ярлык с атрибутами и указанным путем к отображаемой иконке возможно?
-
Iska
Re: CMD/BAT - CMD-шник с внешним конфиг-файлом
Stalker_AleX333, Попробуйте сначала так:
Код:
Потом вот так
Код:
Пара SetLocal - EndLocal позволяет "экранироваить" область видимости переменных. Переменные с одинаковыми именами в одной части программы не будут изменяться в другой части, то есть, внутри подпрограммы Вы можете объявлять переменные без боязни их переопределить в других частях программы.
Если у Вас длинный код, для читаемости и удобства написания можно оформить отдельные функционально обусловленные куски в виде процедур, при необходимости применяя SetLocal - EndLocal
А переменные в знаках ! - это уже другая песТня
Код:
Код: Выделить всё
@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
А переменные в знаках ! - это уже другая песТня