Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   чтение / запись *.txt (http://forum.oszone.net/showthread.php?t=182283)

RUVATA 06-08-2010 11:00 1468031

чтение / запись *.txt
 
Всем доброго времени суток :gamer: ...
Продолжаю попытки освоить bat , спасибо всем кто отвечает в моих темах, за терпение к порой банальным проблемам и глупым вопросам.
Вот например еще одна, готов внимать мудрость гуру :umnik:

Задача - По ходу выполнения батника создать *.txt записать в него значение переменной, открыть/прочитать другой *txt и получить из него новое значение переменной ( соответственно из определенной строки)

Ознакомился http://forum.oszone.net/thread-181512.html этого форума.

Вот в этом примере... есть вроди бы все необходимое для решения моей задачи...
прокомментируйте пожалуйста этот код, что к чему.

Код:

@Echo Off
(For /F %%i In (names.txt) Do (
        Set nm=%%i
        For /F "tokens=*" %%k In (text.txt) Do For /F "tokens=*" %%j In ('Echo %%k') Do Echo %%j
        Echo.
))>out.txt


deepred 06-08-2010 11:19 1468056

RUVATA,

хм... комментарии тут излишни, код абсолютно прозрачен, но все же:

из списка первого файла извлекаются имена, для каждого из них выполняются следующие операции - запись
полученого имени (т.е. подстроки %%i) в переменную %nm%, открытие файла с предложениями, подстановка
значения переменной %nm% в эти предложения и запись, полученного текста в новый файл.

Для записи и чтения, можно воспользоваться таким приемом (я работаю с одним файлом....):

Код:

(<nul set /p A="qwer" & Echo.)>>out.txt

timeout /t 5

For /f %%a in (out.txt) Do Echo %%a

pause

Запись через Set - просто для дополнительной информации, если исключить
Echo. ,то все значения будут записываться в одну строку, если это не нужно, то
достаточно просто Echo "текст". Подробнее расскажет справка...

gora 06-08-2010 11:35 1468075

Цитата:

Цитата RUVATA
прошу прокомментировать »

Код:

@Echo Off
Отключение вывода на экран
Код:

For /F %%i In (names.txt) Do (
...
)

Построчное чтение (имен) из файла names.txt
Код:

Set nm=%%i
Присвоение переменной nm прочитанного из файла имени
Код:

For /F "tokens=*" %%k In (text.txt) Do
Построчное чтение из файла text.txt. Применить в этом цикле простое Echo %%k не получится, т.к., переменная %nm%, содержащаяся в строках файла text.txt, не раскроется в значение этой переменной. Для этого раскрытия применен следующий цикл:
Код:

For /F "tokens=*" %%j In ('Echo %%k') Do Echo %%j
Здесь уже в переменной %%j значение %nm% будет раскрыто.
Код:

Echo.
Перевод строки после каждого вывода из text.txt согласно постановке задачи.
Код:

(...
)>out.txt

Самая первая скобка во второй строке и самая последняя скобка в последней строке - вывод всех операторов Echo в этих кавычках не на экран консоли, а в файл out.txt
Цитата:

Цитата RUVATA
Задача - По ходу выполнения батника создать *.txt записать в него значение переменной, открыть/прочитать другой *txt и получить из него новое значение переменной ( соответственно из определенной строки) »

Конкретизируйте задачу:
1 Укажите названия обоих файлов (желательно)
2 Приведите содержание второго файла, из которого нужно читать в переменную
3 Укажите номер строки, которую нужно прочитать в переменную

Упс... Опередили. :)
deepred, тогда Вы продолжайте, а я ушел...

RUVATA 06-08-2010 12:34 1468132

Приведенный в теме код - из примера http://forum.oszone.net/thread-181512.html
это не мой случай... я просто хотел понять как использовать оператор For для чтения то есть с параметром /f
справка - зло :read: я из нее ничего не понял, по крайней мере на лету... думал, что описание примера мне будет доступнее...
видимо ошибался :)

Цитата:

Разбор файлов состоит в чтении вывода, строки или содержимого файла, разбиении его на отдельные строки текста и разборе каждой строки на ноль или маркеры. Цикл программы for затем называется с переменной итерации, установленной в маркер. По умолчанию /F передает первый отделенный пробелом элемент из каждой строки каждого файла. Пустые строки пропускаются. Используется также другой синтаксис.

for /F ["КлючевыеСловаРазбора"] {%% | %}переменная in (МножествоИменФайлов) do команда [ПараметрыКоманднойСтроки]

for /F ["КлючевыеСловаРазбора"] {%% | %}переменная in ("СимвольнаяСтрока") do команда [ПараметрыКоманднойСтроки]

for /F ["КлючевыеСловаРазбора"] {%% | %}переменная in ('команда') do команда [ПараметрыКоманднойСтроки]
что-то мне ка-то непонятно... как все таки им пользоваться из вышеуказанного...

если можно приведите мне пример кода для вот такой задачи:
Условимся:
файл text.txt имеет следующее содержание
Цитата:

строка1
строка2
строка3
по ходу скрипта объявляются 3 переменные
Цитата:

First = "своя строка"
Second
Mute
Задача
получить в переменную Second значение 2 строки текстового файла text.txt >>
в переменной Mute получить конкатенацию First, "двух символов \\" и Second
создать new.txt
записать в него 1-ой строкой значение Fist
2-ой строкой значение Mute

т.е. содержание new.txt должно получится
Цитата:

своя строка
своя строка\\строка2

Олег97 06-08-2010 15:04 1468229

RUVATA,
Код:

@echo off>nul
setlocal enableextensions enabledelayedexpansion
(set first=своя строка
set second=way
set mute=cola
for /f "skip=1 tokens=*" %%i in (text.txt) do set second=%%i & goto :next
)
:next
set mute=%First%\\%Second%
echo %First% > new.txt
echo %mute% >>new.txt


читать дальше »

скрипт пропускает первую строку, передает %%i значение второй строки, передает это же в переменную Second, выходит,
объявляет mute, и записыват в файл

RUVATA 06-08-2010 15:17 1468240

Спасибо... вот именно этого я и хотел... :applause:

остались только маленькие нюансы, если не сложно, если не трудно :unsure:

Цитата:

Цитата Олег97
:next
set mute=%First%\\%Second%
echo %First% > new.txt
echo %mute% >>new.txt
»

оператор echo производит или > и >> запись? кстати почему так...
сначала > а потом >>

echo - ж вроде отвечает onli за коменты

Олег97 06-08-2010 15:20 1468243

Цитата:

Цитата RUVATA
кстати почему так...
сначала > а потом >> »

">" создает файл и записывает туда строку
">>" просто дописывает строку в файл
если в обоих случаях указать >, то вторая команда удалит файл new.txt, созданный первой командой, создаст его, и запишет в него %mute%

gora 06-08-2010 15:28 1468250

RUVATA, рекомендую прочесть для начала:
Урок bat-аники
Особенности реализации командного процессора cmd.exe операционных систем WinNT, или Урок bat-аники 2-ой

А также можете скачать справку по командам CMD из этого поста и держать ее под рукой.

RUVATA 06-08-2010 15:43 1468263

понял... - надо читать "Маркса" :read:
Спасибо, Спасибо, Спасибо....

Ситуация заставляет сталкиваться с администрированием ЛВС... знаний конечно - кот наплакал :cry:
Надысь автоматизировать многие процессы... умные люди очень уверенно настаивали на возможностях
BAT... я и слушаюсь... (молодой неопытный). Пишу на VBA, соответственно и Visual Basic (Script, в среде VB-studio) проблемой не будет т.е. решить многие задачи я могу иначе - полноценными приложениями, хотя для большинства задач приложение - лихо! игра не стоит свеч.

Хотелось бы авторитетного мнения... Если есть опыт VB стоит ли заморачиваться с изучением возможностей BAT, или может есть еще варианты?
Может есть интерактивная среда для BAT?


Время: 15:19.

Время: 15:19.
© OSzone.net 2001-