Добавление текста
Собстно мне необходимо добавить пару слов в txt файл, но без использования GUI. Т.е. условно "через батник". Такое возможно?
Нужно чтобы:
1. Текст добавлялся в первую свободную строку (т.е. НЕ с новой строчки).
2. Чтобы скрипт срабатывал, даже если текста в файле изначально нет (он может быть, а может и не быть).
3. Не удалял уже существующий текст в файле (если в нем есть текст)
4. Чтобы если файла не существует, скрипт его создавал (это не критично)
|
А можно вариант, в котором текст записывался бы не с новой строчки, а просто в конец уже существующей?
|
P.S.
Сорри что сам забыл о возможности поиска по форуму :)
|
Цитата:
Цитата Morpheus
CMD/BAT - [решено] как дописать текст в текстовой файл »
|
Протестировал тамтешние скрипты более детально и заметил одну неприятную особенность: они срабатывают, только если в txt файле уже есть текст, а мне нужно чтобы текст добавлялся независимо от этого.
В идеале вообще хотелось бы, чтобы если файл не найден, то батник его создавал...
|
Raf-9600, и что мешает сие сделать самостоятельно?
Код:
if exist "file.txt" (
…
) else (
…
)
|
Попробуй
Код:
ECHO %DATE%.%TIME%.%1 обновлен успешно >> otchet.txt
Добавляю, запись с датой, временем и результатом выполнения скрипта в файл отчета, если файл не существует то создается новый, а если существует дописывается в конец файла. Вся хитрость в использовании " ECHO" с " >>", если оставить одну " >"то эта команда просто полностью перепишет уже существующий файл или создаст новый файл с текстом, однако " >>" дописывает текст в конец файла и может создавать новый файл с текстом если такого файла нет.
|
Oleg48, для меня критично чтобы текст записывался не с новой строки, а с последней.
|
В смысле, дописывался в конец последней строки?
А что на
Цитата:
Цитата Morpheus
CMD/BAT - [решено] как дописать текст в текстовой файл »
|
примеры неработают, там вроде все просто. Может нужно переписать последнюю строку в текстовом файле?
|
Цитата:
Цитата Oleg48
примеры неработают, там вроде все просто. »
|
Они срабатывают, только если в файле изначально есть хоть какой-то текст.
|
Хм... Я придумал, как обойти проблему. Можно создать файл с одним символом, допустим с "-", потом воспользоваться скриптами из темы
Цитата:
Цитата Morpheus
CMD/BAT - [решено] как дописать текст в текстовой файл »
|
а потом удалить этот "-". Собсно вопрос: как из блокнота удалить один конкретный символ?
|
Raf-9600, создавайте пустой файл:
Код:
>nul copy nul file.txt
|
Цитата:
Цитата Iska
создавайте пустой файл: »
|
Создание пустого файла, это не настолько важна проблема как:
1. Добавление текста в первую строчку файла, вне зависимости от того пустой он или нет. (Т.е. НЕ с новой строки)
2. Удаление одного конкретного символа из файла.
Если бы одну из этих проблем решить, было бы очень круто (^_^)
|
Raf-9600, сделал через "точку"
Код:
@Echo Off
set fail=123.txt
set tekct=Этот текст надо дописать
IF NOT exist %fail% (echo .>%fail%)
For /F "tokens=*" %%i In (%fail%) Do Set ti=%%i
Set new=%ti:.=%
Set new=%new%%tekct%
Echo %new%>123.txt
|
Raf-9600, для удовлетворения подобных требований пакетные файлы без использования сторонних утилит не слишком годятся. Рассмотрите вопрос о переходе к WSH/PoSH.
2Oleg48:
1. Зачем Вы добавляете в конец почти каждой строки пакетного файла по два пробела?
2. Проверьте, например, Ваш код на таком файле:
Код:
He.ll.o Wo.r.ld!
He.ll.o Wo.r.ld!
и посмотрите, во что он превратится.
|
То, что нужно! Благодарю.
Цитата:
Цитата Iska
для удовлетворения подобных требований пакетные файлы без использования сторонних утилит не слишком годятся. Рассмотрите вопрос о переходе к WSH/PoSH. »
|
Честно говоря, я это и предполагал, поэтому создал эту тему в другом разделе, но модераторам показалось, что батники меня спасут, и они перенесли её сюда :)
|
Цитата:
Цитата Raf-9600
поэтому создал эту тему в другом разделе, но модераторам показалось, что батники меня спасут, и они перенесли её сюда »
|
Спасибо, ясно. Возможно, потому, что изначально не все требования ТЗ были озвучены.
|
Можно и без точек.
Код:
@Echo Off
set file=D:\123.txt
set text=text
For /F "tokens=*" %%i In (%file%) Do Set ti=%%i%text%
if "%ti%"=="" (
echo %text%>%file%
) else (
echo %ti%>%file%
)
pause
|
Morpheus, то же — в файле остаётся одна строка.
|
Iska, ну да, но вроде на это жалоб не было?
|
Morpheus, были ;)
Ваш скрипт удаляет текст, который был в файле до применения батника, это неприемлемо.
|
Raf-9600, однако про скрипт в сообщении 15 вы написали
Цитата:
Цитата Raf-9600
То, что нужно! Благодарю. »
|
|
Morpheus, а вы его проверьте ;)
Он не удаляет текст, который уже есть в файле, он дописывает к нему новый.
|
Raf-9600, да ну?
Создайте файл с текстом
и натравите скрипт, получите
Код:
cccЭтот текст надо дописать
А в случае если файл пустой, получите
Код:
.=Этот текст надо дописать
|
Цитата:
Цитата Morpheus
и натравите скрипт, получите »
|
Morpheus, я это и имел в виду, говоря выше «то же».
Raf-9600, может, всё-таки, откажемся от пакетного файла?
|
Iska, может есть возможность прочитать его целиком, а не построчно? Неужели для такой простой операции надо в другие языки уходить?
|
На самом деле тот скрипт забагирован. Благодарю что обратили мое внимание на это.
Цитата:
Цитата Iska
может, всё-таки, откажемся от пакетного файла? »
|
Мне не критичен способ реализации.
Цитата:
Цитата Morpheus
для такой простой операции »
|
Снимаю галочку "решено" из названия темы, и смиренно надеюсь, что кто-нибудь поможет в решении этой задачки
P.S.
Обновил первый пост.
|
Цитата:
Цитата Raf-9600
1. Текст добавлялся в первую свободную строку (т.е. НЕ с новой строчки). »
|
Это как?
В конец последней строки, независимо от того, заканчивается ли она символами «Конец строки»:
Код:
Hello·World¶
Hello·World¶
Hello·World¶
либо она не заканчивается символами «Конец строки»:
Код:
Hello·World¶
Hello·World¶
Hello·World
так?
И куда добавлять, если, например, в конце файла несколько пустых строк:
Код:
Hello·World¶
Hello·World¶
Hello·World¶
¶
¶
|
Raf-9600, на POSH
Код:
$text = "Текст"
if (!(test-path 1.txt)) { new-item -t file 1.txt }
$content = @()
$content += get-content 1.txt
$content[0] += $text
$content | set-content 1.txt
|
Iska, у меня вообще планируется только одна строка :)
Наверное, в конец первой строки...
|
Цитата:
Цитата Morpheus
А в случае если файл пустой, получите
Код:
.=Этот текст надо дописать »
|
Morpheus, это неправда проверте еще раз, перед тем как запускать удалите сушествующий пустой файл, тогда все будет работать.
Цитата:
Цитата Morpheus
и натравите скрипт, получите
Код:
cccЭтот текст надо дописать »
|
Согласен, вывод такой, однако за основу я брал код сдесь CMD/BAT - [решено] Дописать в конец файла, значит там закралась ошибка, сори (извиняюсь) непроверил чужой код. В нем и правда каждое значение предыдущей строчки затирается следующей, подумаю еще.
|
Эм... Загуглил что это такое... В общем, желательно бы чтобы способ был работоспособен на любой версии Windows (в том числе на 9x), а POSH это если не обманывает Википедия, только для новых.
P.S.
Извините, что не сказал об этом ранее.
Цитата:
Цитата Oleg48
это неправда проверте еще раз, перед тем как запускать удалите сушествующий пустой файл, тогда все будет работать. »
|
Дважды запустите этот скрипт:
Код:
@Echo Off
set fail=Command.txt
set tekct=;multitest
IF NOT exist %fail% (echo .>%fail%)
For /F "tokens=*" %%i In (%fail%) Do Set ti=%%i
Set new=%ti:.=%
Set new=%new%%tekct%
Echo %new%>Command.txt
|
Цитата:
Цитата Oleg48
это неправда проверте еще раз, перед тем как запускать удалите сушествующий пустой файл, тогда все будет работать. »
|
Если файл пустой, о чём я и сказал, то это правда. Есть 3 состояния:
1. Файл с текстом
2. Файл пустой
3. Файла нет
Единственное отличие 19 от 15 как раз в корректной обработке пустых файлов.
|
Morpheus, у меня два
1) файла нет
2) файл непустой однострочный
Таким его сделал ну а дальше надо переделывать
|
Morpheus, на самом деле Oleg48 по-своему прав. Вы видь, наверняка удалили пробелы в его скрипте, от этого и такая ошибка. Но если пробелы не удалять, тогда при первом срабатывании перед добавленным текстом будет длиннющий пробел.
Цитата:
Цитата Oleg48
файл непустой однострочный »
|
Это кстати приемлимо.
|
Сдесь обязательно ; ?
Raf-9600, я несильно большой дока в написании командных файлов, у меня вроде работает как я задумал, а вам удачи :) !!!
|
Да! =)
Цитата:
Цитата Oleg48
я несильно большой дока в написании командных файлов »
|
И, тем не менее, благодарю за попытку помочь :)
|
Raf-9600, если файлы будут однострочными, то в чём тогда проблема?
Если
Цитата:
Цитата Oleg48
1) файла нет
2) файл непустой однострочный »
|
cм.#15 или #19.
Если
Цитата:
Цитата Morpheus
1. Файл с текстом
2. Файл пустой
3. Файла нет »
|
cм.#19.
|
Цитата:
Цитата Oleg48
у меня вроде работает как я задумал »
|
Удалите текстовый файл и один раз запустите свой скрипт (тот который с лишними пробелами), тогда перед добавленным словом будет длиннющий пробел. Или удалите лишние пробелы в своем скрипте и дважды его запустите, тогда заметите другую ошибку.
Цитата:
Цитата Morpheus
то в чём тогда проблема? »
|
Ага, нашел проблему. В вашем скрипте, если добавляемый текст вначале содержит знак ; то текст который уже есть в файле удаляется и записывается новый. Это реально как-то обойти?
|
Вложений: 1
Вот мой оригинальный скрипт, в нем только добавлена строка
Код:
SETLOCAL enabledelayedexpansion
в нужном месте
|
Oleg48, Да, вроде бы работает как надо. Ошибка возникает только если вначале добавляемого текста поставить точку с запятой ( ; ). Это реально как-то обойти?.. 
|
Raf-9600, задайте какой-нибудь символ, с которого ваша строчка не может начинаться:
Код:
@Echo Off
set file=D:\123.txt
set text=text
For /F "eol=' tokens=*" %%i In (%file%) Do Set ti=%%i%text%
if "%ti%"=="" (
echo %text%>%file%
) else (
echo %ti%>%file%
)
pause
Точка с запятой просто по умолчанию обозначает начало комментария и такие строки пропускаются. Символ можно переназначить.
|
Raf-9600,
Код:
set tekct=^;Этот_текст_надо_дописать
срабатывает только один первый раз когда файла еще нет
|
Цитата:
Цитата Oleg48
срабатывает только один первый раз когда файла еще нет »
|
Даже без символа ( ^ ) тоже в первый раз срабатывает, а вот на второй и третий немного глючит... а на остальные срабатывает %)
Цитата:
Цитата Morpheus
задайте какой-нибудь символ, с которого ваша строчка не может начинаться »
|
Вот это вроде бы подходит. Спасибо огромное! 
|
Morpheus, все работает, сказал спасибо, мне вроде и ненадо, а может когда пригодится.
Интересный ключик
А все таки, такой скрипт, но с добавлением текста в конец многострочного текстового файла, кто-нибудь сваяет? :)
|
Самое интересное, какой бред написан в справке.
XP:
Цитата:
eol=c Specifies an end of line character (just one character).
...
for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k
This command parses each line in Myfile.txt, ignoring lines that begin with a semicolon and ...
|
http://www.microsoft.com/resources/d....mspx?mfr=true
7:
Цитата:
eol=c - specifies an end of line comment character
eol=c - знак начала комментария в конце строки
|
- вообще вынос мозга.
Цитата:
Цитата Oleg48
А все таки, такой скрипт, но с добавлением текста в конец многострочного текстового файла, кто-нибудь сваяет? »
|
А если оно никому не нужно, то стоит ли тратить силы?
|
Время: 22:32.
© OSzone.net 2001-