Войти

Показать полную графическую версию : Многоуровневая рекурсия отличных друг от друга .bat файлов


patrickfox
16-04-2020, 14:37
Не знал как ещё обозначить более корректно тему. Проблема заключается в следующем: есть .bat файл, в нем прописаны разные команды (порядок может быть любой, если же для решения проблемы нужен конкретный, то пусть), среди команд есть инструкции по созданию отдельных .bat файлов (программа в программе программы и т.д.), в которых в дальнейшем будут аналогичные инструкции по созданию уже других .bat файлов, и возможно в этих, уже других новых .bat файлах будут уже другие инструкции. Возможно ли это? Обычное экранирование в данном случае выглядит очень жутко, % превращается в %%, а если и они включены в другую программу (подпрограмму), это выглядит ещё забористее, думаю это понятно. Была одна тема на этом сайте: CMD/BAT - [решено] Как записать в txt файл большой кусок текста с помощью bat (http://forum.oszone.net/thread-249659.html). Но там скорее такой метод подойдет для одного лишь .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 по два, три раза или больше, но думаю там и так понятно, суть в том, есть ли возможность осуществить подобное без грубого экранирования, которое ухудшает читаемость. Надеюсь идея более менее ясна.

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

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

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

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

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

Iska
16-04-2020, 17:13
patrickfox, а кто сказал, что «типичную задачу», которую Вы не хотите озвучить, нужно решать именно выбранным Вами способом? Понимаете?

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

iglezz
16-04-2020, 18:59
Батники, которые делают другие батники, рано или поздно приведут к тому, что отладка того, что получится, превратится в насилие над мозгом.

Можно просто через метки сформировать отдельные функции (тем более, что эта тема уже знакома (http://forum.oszone.net/thread-344848.html)) и получить хорошо структурированный код.

patrickfox
16-04-2020, 19:47
iglezz, только свой мозг конечным результатом если поднапрягу, метки тоже затея интересная, но пока меня волнует наличие иных рабочих методов создания подобной структуры батников помимо экранирования.




© OSzone.net 2001-2012