powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Windows [игнор отключен] [закрыт для гостей] / Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
16 сообщений из 16, страница 1 из 1
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38493105
BOGGART
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторБатник - прочитать текстовый файл и создать на его основе другой файл, меняя переменные среды в тексте на их значения
Почему-то подумал что батником будет удобнее, особенно если соберусь на юниксы или мак переносить всё.
С батниками имел дело на слабом уровне - просто не требовалось как-то особых финтов.

Допустим есть текстовый файл "name_template.ext".
В файле какое-то количество строк, в которых среди текста могут попадаться скобки < и >, а так же текст вида %WINDIR% и %RANDOM_VAR%
Необходим батник, который создаст (перезапишет) файл "name.ext", поменяв переменные в template на их значения, а если какой-то переменной не существует - тут два варианта - или генерировал ошибку, которою я могу отловить, или подставлял какое-то значение по умолчанию именно для этого места в тексте.

Поиск потихоньку даёт плоды, но вдруг можно сделать проще, а не как я начал.
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38493120
Фотография С0ВЕСТЬ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOGGARTно вдруг можно сделать проще, а не как я начал
Отличные примеры
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38493123
BOGGART
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хреновые примеры, взять другую статью там же - на голову лучше: http://www.rsdn.ru/article/winshell/NTCommandProcessor.xml
Но это не ответ на вопрос "вдруг можно сделать проще".
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38493126
Фотография С0ВЕСТЬ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOGGARTвзять другую статью там же - на голову лучше
Молодец, умеешь пользоваться поиском.
Ищи дальше, вдруг готовое решение найдешь эдак через пару месяцев, может быть :)
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38493131
BOGGART
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Member "С0ВЕСТЬ"
"Если вам нечего написать по теме - не пишите вообще." ©
Решение и так уже почти дописано.

Как заставить ECHO выводить спецсимволы в файл (без кавычек вокруг)?
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38493137
Фотография С0ВЕСТЬ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOGGART Member "С0ВЕСТЬ"
"Если вам нечего написать по теме - не пишите вообще." ©
Решение и так уже почти дописано.

Как заставить ECHO выводить спецсимволы в файл (без кавычек вокруг)?

Может мне каждому студенту забесплатно курсовые писать?
Сессия однако, студентики забегали.
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38493185
BOGGART
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Учиться я закончил и давно. А подобное в институтах не проходят кстати.
2) Сессия в январе, во всяком случае когда учился было так.
3) Я писал всей группе и бесплатно.
4) Лично вас я ни о чём не просил. Говорю ещё раз: не хотите писать по делу - не пишите вообще. Пришли тут и ворчите, и ворчите.


Как заставить ECHO выводить спецсимволы в файл (без кавычек вокруг)?
Вопрос снимается, проблема была не в этом, при передаче через CALL некоторые последовательности символов крашились... Видимо он понимает ""<| как конвейер даже когда оно внутри внешних кавычек.
Хотел без ENABLEDELAYEDEXPANSION обойтись, видимо не получится. Жаль. Хотя в большинстве случаев наверное и не попадутся такие последовательности, надо будет посмотреть.
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38493202
Фотография С0ВЕСТЬ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOGGART,

Наверное стал старым ворчуном.
А что и экранирование не помогает?
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38493318
BOGGART
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Экранирование чего? Строки приходят из внешнего файла, в общем случае вообще случайные символьные последовательности.
Вариант чтения строк без использования ENABLEDELAYEDEXPANSION мне чем-то понравился, решил использовать его, теперь видно что не подходит.
Переделал так:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@ECHO OFF&CLS
VERIFY OTHER 2>nul
SETLOCAL ENABLEDELAYEDEXPANSION
IF ERRORLEVEL 1 ECHO Не удается включить расширенную обработку
SET FILE_IN=test_template.xml
SET FILE_OUT=test.xml
SET FILE_LINE=
CALL set_variables.bat
DEL %FILE_OUT%
FOR /F "tokens=*" %%s IN (%FILE_IN%) DO (
	CALL SET "FILE_LINE=%%s"
	ECHO !FILE_LINE!
	ECHO !FILE_LINE!>>%FILE_OUT%
)
PAUSE


Часть багов пропала, новые добавились. Почему оно удваивает символы "^"? И куда девает табуляцию? Есть ли другие нативные способы перебора строк текстового файла кроме FOR?
эх... На freepascal было бы на 5 строк и без таких косяков...
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38494113
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOGGARTЕсть ли другие нативные способы перебора строк текстового файла кроме FOR?
VBS
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38494694
BOGGART
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Весь смысл делать батником, а не на делфи/фрипаскале - в кросплатформенности! Какой VBS? =\
Нашёл более профильный форум, если и там не помогут ну его в баню батник этот, на экзешник который из того же bat можно вызвать минут 15 бы ушло...
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38494698
Фотография zirra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOGGART> Весь смысл делать батником, а не на делфи/фрипаскале - в кросплатформенности! Какой VBS? =\
Какой-такой кроссплатформенный батник??? Ты с какого баобаба свалился головою вниз?..

Именно ФриПаскаль - единственно 100% кроссплатформенное...
--
Vladimir A.Bakhvaloff
E-Mail: zirra1969<bark>gmail<dot>com

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38494907
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOGGARTВесь смысл делать батником, а не на делфи/фрипаскале - в кросплатформенности! Какой VBS? =\
)) и что же кросплатформенного в батнике???
vbs тот же "батник", только исполняется он не через cmd, а сscript виндовым.
ну не спорю, я б тоже вот в соседней теме задачу бы на cpp минут за 30 нарисовал
создаешь текстовый файл с расширением .vbs, копипастишь туда мой пример и куришь его, 2 раза мышкой ткнуть уж ума надеюсь у тебя хватит.
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
if Wscript.Arguments.Count = 0 then
	WScript.Echo "Необходимо указать хотя бы имя файла"
	WScript.Quit 1
end if

filename = WScript.Arguments.Named.Item("filename")

Set fso = CreateObject("Scripting.FileSystemObject")

if fso.FileExists(filename) then
	Set fr = fso.OpenTextFile(filename, 1, false)
else
	WScript.Echo "Файл не существует"
	WScript.Quit 1
end if

summa = 0.0
Do Until fr.AtEndOfStream
	buff = fr.ReadLine
	if Left(buff, 1) <> "#" then
		arr = Split(buff, ";")
		summa = summa + CCur(arr(7))
	end if
Loop
fr.Close()

Set sr = CreateObject("ADODB.Stream")
sr.Type = 2
sr.Charset = "cp866"
sr.Open
sr.LoadFromFile(filename)
Set sw = CreateObject("ADODB.Stream")
sw.Type = 2
sw.Charset = "cp866"
sw.Open

bEnd = true
Do Until sr.EOS
	buff = sr.ReadText(-2)
	if bEnd then
		if Left(buff, 1) <> "#" then
			sw.WriteText("#NOTE " + FormatNumber(summa,2,vbTrue,vbFalse,vbFalse) + vbCrLf)
			bEnd = false
			WScript.Echo summa
		end if
	end if
	sw.WriteText(buff + vbCrLf)
Loop
sr.Close
sw.SaveToFile filename+".note", 2
sw.Close
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38494911
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOGGARTПочему-то подумал что батником будет удобнее, особенно если соберусь на юниксы или мак переносить всё.

)) не смеши мои подковы, /bin/*sh рядом не стоял с твоим cmd
к слову - смотрел тут как на бате сделали МОРСКОЙ БОЙ, так там АССЕМБЛЕРНЫЕ ВСТАВКИ используются на виндовом компиляторе.
хочешь маломальской кроссплатформенности - JavaScript с виндовым обрубком в виде JScript тебе в помощь.
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38494940
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот тебе тоже самое в JScript (файл с расширением .js так же выполняемый из командной строки), так интереса ради переделал
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
if (WScript.Arguments.Count() == 0) {
	WScript.Echo("Необходимо указать хотя бы имя файла");
	WScript.Quit(1);
}

filename = WScript.Arguments.Named.Item("filename");

var fso = new ActiveXObject("Scripting.FileSystemObject");

if (fso.FileExists(filename))
	var fr = fso.OpenTextFile(filename, 1, false);
else {	
	WScript.Echo("Файл не существует");
	WScript.Quit(1);
}

var buff = "";
var summa = 0.0;
while (!fr.AtEndOfStream) {
	buff = fr.ReadLine();
	if (buff.charAt(0) != "#") {
		arr = buff.split(";");
		summa = summa + parseFloat(arr[7]);
	}
}
fr.Close();

var sr = new ActiveXObject("ADODB.Stream")
sr.Type = 2
sr.Charset = "cp866"
sr.Open
sr.LoadFromFile(filename)
var sw = new ActiveXObject("ADODB.Stream")
sw.Type = 2
sw.Charset = "cp866"
sw.Open

bEnd = true
while (!sr.EOS) {
	buff = sr.ReadText(-2);
	if (bEnd) {
		if (buff.charAt(0) != "#") {
			sw.WriteText("#NOTE " + summa.toFixed(2) + "\r\n");
			bEnd = false;
		}
	}
	sw.WriteText(buff + "\r\n");
}
sr.Close();
sw.SaveToFile(filename+".note", 2);
sw.Close();

WScript.Echo(summa);
...
Рейтинг: 0 / 0
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
    #38494943
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
субъективно VBS выполняется быстрее JS
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Windows [игнор отключен] [закрыт для гостей] / Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]