Андрей_Угаров@vk |
21-12-2012 13:59 2050348 |
Как записать в txt файл большой кусок текста с помощью bat
Как создать 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 2050357 |
Супер! Спасибо!)
|
Или так:
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
set sFile=BigText.txt
more +10 "%~0">"%sFile%"
endlocal
exit /b 0
Создаем большой текст
Весь текст в батнике
Здесь очень много строк
Так можно и спецсимволы :^)
`~!@#$%^&*()_+|\/.,;:'"
Три пустые строки
Последняя строка
|
mactepcepbep@vk |
27-07-2013 07:35 2191436 |
подскажите, последний скрипт идеально работает в локальной папке, но я никак не могу заставить его писать в файлы в директории выше, все значки cd ../ работают а вот set sFile ../12345/123.txt уже не работает. мне нужен только относительный путь касательно запускаемого бантика. заранее спасибо.
|
mactepcepbep@vk,
Тебе не надо "cd ..\"
Код:
set "sFile=%~dp0..\12345\123.txt"
|
mactepcepbep@vk |
27-07-2013 09:27 2191445 |
thanks, the script works well.
|
Цитата:
Цитата Iska
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
set sFile=BigText.txt
more +10 "%~0">"%sFile%"
endlocal
exit /b 0
Создаем большой текст
Весь текст в батнике
Здесь очень много строк
Так можно и спецсимволы :^)
`~!@#$%^&*()_+|\/.,;:'"
Три пустые строки
Последняя строка
»
|
Возможно ли сделать так, чтобы после этого кода можно было написать другой еще? Просто есть код, который обязательно должен быть в конце.
После more можно ли указать точное количество строк, которое надо скопировать? или такого функционала нет?
|
Можно написать с заменой More на вывод Echo в цикле, тогда возможны проблемы со спецсимволами. У Вас что в тексте?
Цитата:
Цитата V!RTuE
Просто есть код, который обязательно должен быть в конце. »
|
Почему, что, его нельзя оформить процедурой и вставить перед выводимым текстом? Как пример:
Код:
@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
Создаем большой текст
Весь текст в батнике
Здесь очень много строк
Так можно и спецсимволы :^)
`~!@#$%^&*()_+|\/.,;:'"
Три пустые строки
Последняя строка
|
Цитата:
Цитата megaloman
Можно написать с заменой More на вывод Echo в цикле, тогда возможны проблемы со спецсимволами. У Вас что в тексте? »
|
Спецсимволов полно. Текст более 200 строк. Содержимое файла openssl-1.0.0.cnf (программы OpenVPN)
Цитата:
Цитата megaloman
Почему, что, его нельзя оформить процедурой и вставить перед выводимым текстом? »
|
Нельзя, так как используется этот код . Там обязательное условие, что он должен быть в конце.
В принципе уже задачу решил, но не копируются пустые строки (в данном случае абсолютно не критично), но для красоты хотелось бы. Да и просто на будущее знать как можно реализовать подобную задачу.
Вот рабочий код. Реализовано через поиск начальной и конечной строки
Код:
...
: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. Подобных решений нигде не встречал еще
|
Serguei Kouzmine |
14-12-2022 06:35 2998794 |
вам все еще нужно решение ?
выдачу произвольного текста заключенного в теле бат файла в выполнением того что было до и того что после этого текста ?
Код:
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 2998852 |
добавьте
Код:
-executionpolicy bypass
если все таки не работает покажите диагностику
цмд это очень архаичный интерпретатор и
использовать его это примерно как добывать огонь трением
одним куском дерева о другой
https://ru.wikipedia.org/wiki/%D0%97...B3%D0%BD%D1%8F
нужно иметь серезные причины так вот себя ограничивать
|
Serguei Kouzmine |
14-12-2022 16:37 2998853 |
Вложений: 1
скриншот
|
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 2998882 |
Цитата:
Цитата V!RTuE
на win7x64 home basic msdn »
|
Ставится Powershell 5.1 и всё прекрасно работает.
|
Цитата:
Цитата DJ Mogarych
Ставится Powershell 5.1 и всё прекрасно работает. »
|
Сейчас проверил и там стоит 2.0. Хорошо, когда это личный комп и только на нем запускать надо скрипт. Но нужна максимальная универсальность, чтобы на любом компе, даже старом, всё работало. Поэтому и был выбран cmd/batch.
P.S.: этот код там сработал
|
Serguei Kouzmine |
15-12-2022 18:47 2998956 |
Цитата:
Цитата V!RTuE
мне надо не на экран вывести текст, а экспортировать его в файл 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
|
Время: 22:11.
© OSzone.net 2001-