Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Многоуровневая рекурсия отличных друг от друга .bat файлов

Ответить
Настройки темы
CMD/BAT - Многоуровневая рекурсия отличных друг от друга .bat файлов

Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: patrickfox
Дата: 16-04-2020
Описание: Обновление url
Не знал как ещё обозначить более корректно тему. Проблема заключается в следующем: есть .bat файл, в нем прописаны разные команды (порядок может быть любой, если же для решения проблемы нужен конкретный, то пусть), среди команд есть инструкции по созданию отдельных .bat файлов (программа в программе программы и т.д.), в которых в дальнейшем будут аналогичные инструкции по созданию уже других .bat файлов, и возможно в этих, уже других новых .bat файлах будут уже другие инструкции. Возможно ли это? Обычное экранирование в данном случае выглядит очень жутко, % превращается в %%, а если и они включены в другую программу (подпрограмму), это выглядит ещё забористее, думаю это понятно. Была одна тема на этом сайте: CMD/BAT - [решено] Как записать в txt файл большой кусок текста с помощью bat. Но там скорее такой метод подойдет для одного лишь .bat файла внутри программы (если правильно понимаю). Если нужен пример, то ниже я постарался примерно описать суть наглядно:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sFile=BigText.txt
more +10 "%~0">"%sFile%"

endlocal
exit /b 0


Тут какой-то текст
Весь текст в батнике
Здесь разные строки
Будет много спецсимволов :^)
`~!@#$%^&*()_+|\/.,;:'"
Будут и другие команды, вот например


Код: Выделить весь код
set /P username="Your username: "
Set iuser=%username%
Set mathfile="C:\Users\"&%iuser%&"\Desktop\1.bat"

@echo off>"%mathfile%"
setlocal enableextensions enabledelayedexpansion>>"%mathfile%"

For /L %%i In (1,1,10) Do (>>"%mathfile%"
echo Attempt %%i^%% %>>"%mathfile%"
call :gen %%>>"%mathfile%"
ping -n !r10! 127.0.0.1> nul %%>>"%mathfile%"
)>>"%cntfile%"

cal :gen>>"%mathfile%"

:gen>>"%mathfile%"
set /a r10=%random%%%(8-2+1)+2>>"%mathfile%"
echo %r10%>>"%mathfile%"
exit /b>>"%mathfile%"

Set physfile="C:\Users\"&%iuser%&"\Desktop\3.bat">>"%mathfile%"

@echo off>"%physfile%">>"%mathfile%"
set /a r15=(25-5+1)+5>>"%physfile%">>"%mathfile%"
echo %r15%>>"%physfile%">>"%mathfile%"
echo Такой вот результат?>>"%physfile%">>"%mathfile%"

Set chemfile="C:\Users\"&%iuser%&"\Desktop\2.bat">>"%physfile%">>"%mathfile%"

@echo off>"%chemfile%">>"%physfile%">>"%mathfile%"
set /a r20=%random%%%(10000)>>"%chemfile%">>"%physfile%">>"%mathfile%"
echo %r20%>>"%chemfile%">>"%physfile%">>"%mathfile%"
echo Ну и результат!>>"%chemfile%">>"%physfile%">>"%mathfile%"
pause>>"%chemfile%">>"%physfile%">>"%mathfile%"

start %chemfile%>>"%physfile%">>"%mathfile%"
pause>>%physfile%>>"%mathfile%"

start %physfile%>>"%mathfile%"
pause>>"%mathfile%"

start %mathfile%

REM здесь ещё всякий код например, возможно ещё один .bat в .bat далее вновь программа (возможно и не одна ещё)

Set frogfile="C:\Users\"&%iuser%&"\Desktop\n.bat">>"%physfile%">>"%mathfile%"
REM код подобный тем, что вверху
start %frogfile%
REM всякий прочий возможный код
Две пустые строки Ещё команды set /a r50=(500-250) echo %r50% pause
Понимаю, что кое-где, где "код внутри кода" нужно было писать echo по два, три раза или больше, но думаю там и так понятно, суть в том, есть ли возможность осуществить подобное без грубого экранирования, которое ухудшает читаемость. Надеюсь идея более менее ясна.

Отправлено: 14:37, 16-04-2020

 

Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


patrickfox, сложно как-то. Что такое код внутри кода. Эти все коды внутри кода, они однотипные? Может попробуете объяснить задачу сначала: какую задачу Вы решаете, а не как сделать батник.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:18, 16-04-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, Batch код внутри batch кода. Batch-скрипт, в дальнейшем именуемый "главный скрипт", содержит в себе команды на создание других batch-скриптов, в дальнейшем именуемых "скрипты 2-го порядка", которые содержат в себе команды на создание других batch-скриптов, в дальнейшем именуемых "скрипты n-го порядка" и т.д. Может есть ограничение этой "глубины" по уровню, учитывая что все это изначально прописано в главном скрипте? Ещё так же следует учитывать, что команды во всех скриптах разные, я имею в виде основная суть тех скриптов, пример я привел в шапке, хоть там и арифметика кажется однотипной, это лишь пример, команды на самом деле разные. Хотелось бы узнать есть ли метод создания подобных главных скриптов без многослойного экранирования, ну или если есть методы без экранирования, то на сколько они позволяют углубить этот "код внутри кода"? Получается же так, что в главном (самом первом скрипте) прописаны все операции по созданию следующих скриптов, ну и суть в том, что как только эти все операции пропишутся, главный скрипт закроется и эти скрипты n-го порядка будут действовать сами по себе, создавая других, или выполняя конкретные задачи. Пример сверху кратко описывает то, что необходимо, но там нет экранирования (для удобства чтения), а так же там нет команд echo, которые будут тоже наслоены друг на друга и чтение будет и без того осложнено. Надеюсь стало чуть понятнее.

Отправлено: 15:59, 16-04-2020 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


patrickfox, Вы не поняли. Вопрос был — не что, а зачем. Какую задачу Вы пытаетесь решить таким образом?

P.S. Не надо повторять то же самое описание: Вы описываете не задачу, а уже выбранный метод решения неизвестной задачи.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:11, 16-04-2020 | #4


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, прошу прощения, я просто не понимаю верно ли изъяснился в шапке, так, чтобы именно получить нужную информацию, а не готовое решение конкретной проблемы. Мой вопрос скорее не как лучше решить определенную задачу (пока что), а можно ли решить её этим методом (о существовании которого пытаюсь узнать). Мне не нужно, например, 10 таких подуровней, просто хотелось узнать как реализовать данный метод, на любой задаче, решение которой хотелось бы осуществить именно этим методом. А пример в шапке, это для малого удобства понимания (что именно в нем не хватает, уже объяснил, и почему тоже). Да, я описываю метод, задача, указанная выше она лишь типичная, но необходимо выполнить её этим методом. Возможно ли такое? Даже не знаю как ещё объяснить.

Отправлено: 16:56, 16-04-2020 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


patrickfox, а кто сказал, что «типичную задачу», которую Вы не хотите озвучить, нужно решать именно выбранным Вами способом? Понимаете?

Отправлено: 17:13, 16-04-2020 | #6


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, да, это понятно, но как раз именно «типичная задача», про которую идет речь и размещена как пример в шапке. Если её можно решить другим способом, также буду рад услышать об этих возможностях. Если же нет, то актуальным остается тот метод, о котором и речь.

Отправлено: 17:42, 16-04-2020 | #7


Старожил


Сообщения: 352
Благодарности: 193

Профиль | Отправить PM | Цитировать


Батники, которые делают другие батники, рано или поздно приведут к тому, что отладка того, что получится, превратится в насилие над мозгом.

Можно просто через метки сформировать отдельные функции (тем более, что эта тема уже знакома) и получить хорошо структурированный код.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:59, 16-04-2020 | #8


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 19:47, 16-04-2020 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Многоуровневая рекурсия отличных друг от друга .bat файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Подключение 2 мониторов независимо друг от друга на 1 видеокарту ? dxRxb Видеокарты 4 11-10-2014 18:51
2008 - Чем оличаются друг от друга эти издания? Dr. Comp Windows Server 2008/2008 R2 2 25-10-2012 12:05
Разное - [решено] Word, как сделать две независимые друг от друга колонки? amelika Microsoft Office (Word, Excel, Outlook и т.д.) 4 15-10-2011 02:08
TTBToolbar, как можно отличать кнопки друг от друга? Romanka AutoIt 6 04-07-2011 19:29
Прочее - Изолировать рабочие группы друг от друга tentakle Сетевые технологии 6 16-02-2011 21:12




 
Переход