Показать полную графическую версию : [решено] Как записать в txt файл большой кусок текста с помощью bat
Андрей_Угаров@vk
21-12-2012, 13:59
Как создать txt файл с большим количеством текста с помощью bat?
Этот текст должен быть с самом batнике
@Echo Off
Set txtfile=e:\Temp\bigtxt.txt
(Echo Создаем большой текст
Echo Весь текст в батнике
Echo Здесь очень много строк
Echo Но спец. символов здесь нет
Echo Иначе их придется экранировать
Echo А это сложно... :^)
Echo Три пустые строки
Echo.
Echo.
Echo.
Echo Последняя строка
)>"%txtfile%"
Андрей_Угаров@vk
21-12-2012, 14:23
Супер! Спасибо!)
Или так:
@echo off
setlocal enableextensions enabledelayedexpansion
set sFile=BigText.txt
more +10 "%~0">"%sFile%"
endlocal
exit /b 0
Создаем большой текст
Весь текст в батнике
Здесь очень много строк
Так можно и спецсимволы :^)
`~!@#$%^&*()_+|\/.,;:'"
Три пустые строки
Последняя строка
mactepcepbep@vk
27-07-2013, 07:35
подскажите, последний скрипт идеально работает в локальной папке, но я никак не могу заставить его писать в файлы в директории выше, все значки cd ../ работают а вот set sFile ../12345/123.txt уже не работает. мне нужен только относительный путь касательно запускаемого бантика. заранее спасибо.
Foreigner
27-07-2013, 08:56
mactepcepbep@vk,
Тебе не надо "cd ..\"
set "sFile=%~dp0..\12345\123.txt"
mactepcepbep@vk
27-07-2013, 09:27
thanks, the script works well.
@echo off
setlocal enableextensions enabledelayedexpansion
set sFile=BigText.txt
more +10 "%~0">"%sFile%"
endlocal
exit /b 0
Создаем большой текст
Весь текст в батнике
Здесь очень много строк
Так можно и спецсимволы :^)
`~!@#$%^&*()_+|\/.,;:'"
Три пустые строки
Последняя строка »
Возможно ли сделать так, чтобы после этого кода можно было написать другой еще? Просто есть код, который обязательно должен быть в конце.
После more можно ли указать точное количество строк, которое надо скопировать? или такого функционала нет?
megaloman
12-12-2022, 09:25
такого функционала нет »Можно написать с заменой More на вывод Echo в цикле, тогда возможны проблемы со спецсимволами. У Вас что в тексте?Просто есть код, который обязательно должен быть в конце. »Почему, что, его нельзя оформить процедурой и вставить перед выводимым текстом? Как пример:@Echo Off
cls
Set "FileOut=Z:\Box_In\BigText.txt"
Set /A N=10000000
FOR /F "usebackq tokens=1 delims=[]" %%i In (`Find /N ":My_Out_Text" "%~dpnx0"`) DO Set /A N=%%i
>"%FileOut%" more +%N% "%~dpnx0"
Echo 1. Тут можно продолжать писать код
Call :MyCode
Echo 2. Тут можно продолжать писать код
pause
Exit /b 0
:MyCode
Echo Просто есть код, который НЕ обязательно должен быть в конце.
Exit /B
:My_Out_Text
Создаем большой текст
Весь текст в батнике
Здесь очень много строк
Так можно и спецсимволы :^)
`~!@#$%^&*()_+|\/.,;:'"
Три пустые строки
Последняя строка
Можно написать с заменой More на вывод Echo в цикле, тогда возможны проблемы со спецсимволами. У Вас что в тексте? »
Спецсимволов полно. Текст более 200 строк. Содержимое файла openssl-1.0.0.cnf (программы OpenVPN)
Почему, что, его нельзя оформить процедурой и вставить перед выводимым текстом? »
Нельзя, так как используется этот код (http://forum.oszone.net/post-2214015-8.html). Там обязательное условие, что он должен быть в конце.
В принципе уже задачу решил, но не копируются пустые строки (в данном случае абсолютно не критично), но для красоты хотелось бы. Да и просто на будущее знать как можно реализовать подобную задачу.
Вот рабочий код. Реализовано через поиск начальной и конечной строки
...
:Createopensslcnf
:: Обязательно должно быть в начале батника или здесь @echo off, иначе некорректно экспортируется текст
:: Допустимо в начале указать @echo on, а в этой части @echo off
@echo off
Set "FileIn=%~0"
Set "Key1=# For use with easy-rsa version 2.0 and OpenSSL 1.0.0*"
Set "Key2=init = 0"
FOR /F "usebackq skip=2 tokens=1 delims=[]" %%i In (`Find /N /I "%Key1%" "%FileIn%"`) DO Set /A N=%%i-1
>"%KEY_CONFIG%" (FOR /F "usebackq delims=" %%i In (`More +%N% "%FileIn%"`) DO (
Echo %%i|Find /I /V "%Key2%"||(<nul Set /P Str=%%i&Exit /B 0)
))
GoTo :EOF
# For use with easy-rsa version 2.0 and OpenSSL 1.0.0*
...
...
init = 0
:: ----------------------------------------
...
P.S.: это часть моего проекта по автоматизации работы с OpenVPN на Windows. Подобных решений нигде не встречал еще
https://i.ibb.co/2SqGKd2/Open-VPN-All-In-One.jpg
Serguei Kouzmine
14-12-2022, 06:35
вам все еще нужно решение ?
выдачу произвольного текста заключенного в теле бат файла в выполнением того что было до и того что после этого текста ?
cat_embedded_text.cmd
CMD doing some stuff
If you want
If you want to
If you want to know
If you want to know PowerShell ?
That is all !@#$%^^&*()_ you want to know ...
CMD doing other stuff
CMD doing some other stuff
пример привести не жалко но боюсь флейма :-)
пример печатающего тела
@echo OFF
echo CMD doing some stuff
powershell.exe "&{ $p = $false; (get-content -path $args[0])| foreach-object {if ($_ -match '^REM D4D5BBCD' ){ $p = $false } if ($p) { $_ } ; if ($_ -match '^REM FAE04EC0'){ $p = $true } } }" %~dpnx0
echo CMD doing other stuff
call :AFTER
goto :EOF
REM FAE04EC0
If you want
If you want to
If you want to know
If you want to know PowerShell ?
That is all !@#$%^^&*()_ you want to know ...
REM D4D5BBCD
:AFTER
echo doing some other stuff
goto :EOF
Serguei Kouzmine, тут уже комбинирование с powershell идет. а он не на всех компах может корректно работать как показала практика. Например, на win7x64 home basic msdn это не сработает. интересно решение чисто с помощью cmd/bat.
Serguei Kouzmine
14-12-2022, 16:28
добавьте
-executionpolicy bypass
если все таки не работает покажите диагностику
цмд это очень архаичный интерпретатор и
использовать его это примерно как добывать огонь трением
одним куском дерева о другой
https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B6%D0%B8%D0%B3%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B3%D0%BD%D1%8F
нужно иметь серезные причины так вот себя ограничивать
Serguei Kouzmine
14-12-2022, 16:37
скриншот
Serguei Kouzmine, мне надо не на экран вывести текст, а экспортировать его в файл test.txt, например. Как это сделать?
В коде не хватает кавычек, иначе не работает, если есть пробелы в пути до батника
powershell.exe "&{ $p = $false; (get-content -path $args[0])| foreach-object {if ($_ -match '^REM D4D5BBCD' ){ $p = $false } if ($p) { $_ } ; if ($_ -match '^REM FAE04EC0'){ $p = $true } } }" '%~dpnx0'
DJ Mogarych
14-12-2022, 21:59
на win7x64 home basic msdn »
Ставится Powershell 5.1 (https://learn.microsoft.com/ru-ru/powershell/scripting/windows-powershell/wmf/setup/install-configure?view=powershell-7.3) и всё прекрасно работает.
Ставится Powershell 5.1 и всё прекрасно работает. »
Сейчас проверил и там стоит 2.0. Хорошо, когда это личный комп и только на нем запускать надо скрипт. Но нужна максимальная универсальность, чтобы на любом компе, даже старом, всё работало. Поэтому и был выбран cmd/batch.
P.S.: этот код там сработал
Serguei Kouzmine
15-12-2022, 18:47
мне надо не на экран вывести текст, а экспортировать его в файл test.txt, например. Как это сделать »
это сделать просто
set DEBUG=true
.\print_embedded_text.cmd dummy.txt
CMD doing some stuff
CMD doing other stuff
doing some other stuff
contents of dummy.txt
If you want
If you want to
If you want to know
If you want to know PowerShell ?
That is all !@#$%^^&*()_ you want to know ...
print_embedded_text.cmd
@echo OFF
echo CMD doing some stuff
REM NOTE: for some reason cannot break command into multiple lines
REM powershell.exe -executionpolicy bypass ^
REM ...
set OUTPUTFILE=%~1
if "%OUTPUTFILE%" == "" set OUTPUTFILE=output.txt
powershell.exe -executionpolicy bypass "&{ $p = $false; (get-content -path $args[0])| foreach-object {if ($_ -match '^REM DATA_END' ){ $p = $false } if ($p) { $_ } ; if ($_ -match '^REM DATA_START'){ $p = $true } } | out-file -encoding ascii -filepath $args[1] }" "%~dpnx0" "%OUTPUTFILE%"
echo CMD doing other stuff
call :AFTER
if /i "%DEBUG%"=="true" echo contents of %OUTPUTFILE%&&type %OUTPUTFILE%
goto :EOF
REM DATA_START
If you want
If you want to
If you want to know
If you want to know PowerShell ?
That is all !@#$%^^&*()_ you want to know ...
REM DATA_END
:AFTER
echo doing some other stuff
goto :EOF
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC