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 по два, три раза или больше, но думаю там и так понятно, суть в том, есть ли возможность осуществить подобное без грубого экранирования, которое ухудшает читаемость. Надеюсь идея более менее ясна.
@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 по два, три раза или больше, но думаю там и так понятно, суть в том, есть ли возможность осуществить подобное без грубого экранирования, которое ухудшает читаемость. Надеюсь идея более менее ясна.