Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Добавить строку в начало текстовых файлов

Ответить
Настройки темы
CMD/BAT - Добавить строку в начало текстовых файлов

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Подскажите решение моей проблемы... В папке имеется несколько текстовых файлов, нужно, чтобы в начало каждого файла добавилась нужная мне строка.
решение примерно такое: http://forum.oszone.net/thread-187587.html только нужно, чтобы строка вставлялась не в конец, а в начало

Отправлено: 18:17, 22-05-2017

 

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Если не усложнять, то в простейшем случае решение может быть таким:
Код: Выделить весь код
@echo off
  setlocal enabledelayedexpansion
    set "i=1"
    set "arr.0=first string"
    for /f "tokens=*" %%i in (file.txt) do (
      set "arr.!i!=%%i"&set /a "i+=1"
    )
    set /a "i-=1"
    cd.>file.txt
    for /l %%i in (0, 1, !i!) do (
      for /f "tokens=1,* delims==" %%j in (
        'set arr.%%i'
      ) do echo:%%k>>file.txt
    )
  endlocal
exit /b
По-настоящему же крутым решение будет если "склеить" строку, которую необходимо вставить, с текстом "на лету", то есть перенаправив вывод в один из стандартных потоков консоли; правда придется задействовать con, но для начала разберитесь с примером выше, а дальше посмотрим.

Отправлено: 19:44, 22-05-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для NickM

Ветеран


Contributor


Сообщения: 4593
Благодарности: 1098

Профиль | Отправить PM | Цитировать


Если приемлемо использование сторонних утилит, то простой примерчик будет выглядить так:
Код: Выделить весь код
for %%i in (*.txt) do sed -i -e "1 s/^/нужная_Мне_строка\n/;" %%i

Отправлено: 20:03, 22-05-2017 | #3


Ветеран


Contributor


Сообщения: 2732
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off

Set "Mask=Z:\Box_In\*.txt"

Set "Str=Нужная мне для вставки в начало текстового файла строка"

FOR %%f IN ("%Mask%") DO (
	(Echo %Str% &More "%%f")>"%%f.tmp" 
	Move /Y "%%f.tmp" "%%f" >nul
)
Даже в этом решении возможны проблемы при наличии спецсимволов в тексте.
Если не принципиально, решение лучше сделать посредством .vbs-скрипта.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 22-05-2017 в 21:50.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:16, 22-05-2017 | #4

y-- y-- вне форума

Старожил


Сообщения: 231
Благодарности: 62

Профиль | Отправить PM | Цитировать


All
как же вы любите все усложнять...
COPY /? и обращаем внимание на символ "+" в выводе справки. Дальше в принципе все очевидно.

-------
Ты это - заходи если что...

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:41, 22-05-2017 | #5


Ветеран


Contributor


Сообщения: 2732
Благодарности: 1698

Профиль | Отправить PM | Цитировать


y--,
Код: Выделить весь код
@Echo Off

Set "BoxIn=Z:\Box_In"
Set "Mask=*.txt"
Set "Str=Нужная мне для вставки в начало текстового файла строка"

>"%BoxIn%\%~nx0.tmp" (Echo %Str%)

FOR %%f IN ("%BoxIn%\%Mask%") DO (
	Copy /B "%BoxIn%\%~nx0.tmp"+"%%f" "%%f.tmp">nul 
	Move /Y "%%f.tmp" "%%f" >nul
)
del "%BoxIn%\%~nx0.tmp"

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:11, 22-05-2017 | #6


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата y--:
как же вы любите все усложнять...
А Вы утрировать. Вообще вполне ожидаемо было услышать про copy, команду имеющую довольно много побочных эффектов, к тому же для объединения файлов требуется создать отдельный файл (и как следствие отдельный поток), в то время, когда проще использовать потоки уже существующего файла. Но, как уже было верно подмечено, в командном языке непременно возникнут проблемы со спецсимволами и кодировками. Ну а если речь идет все же о командномм языке, то можете помедитировать над следующим.
Код: Выделить весь код
rem тестовый файл для вставки строки
E:\src> more < con > test.txt
string 1
string 2
^Z

rem смотрим что получилось
E:\src> type test.txt
string 1
string 2

rem строку, которую нужно вставить, пишем в ADS
E:\src> echo:required string>test.txt:stream1

rem убеждаемся что содержимое файла не изменилось
E:\src> type test.txt
string 1
string 2

rem и что в созданном потоке хранится строка для вставки
E:\src> streams test.txt
E:\src\test.txt:
              :stream1:$DATA 17

E:\> more < test.txt:stream1
required string

rem переносим строки из основного потока в созданный ADS
E:\> type test.txt>>test.txt:stream1
E:\> more < test.txt:stream1
required string
string 1
string 2

rem выводим ADS в основной поток
E:\> more < test.txt:stream1 > test.txt
E:\> type test.txt
required string
string 1
string 2

rem убеждаемся, что ADS при перезаписи основного потока был удален
E:\> streams test.txt

Отправлено: 09:32, 23-05-2017 | #7

y-- y-- вне форума

Старожил


Сообщения: 231
Благодарности: 62

Профиль | Отправить PM | Цитировать


greg zakharov
Цитата greg zakharov:
А Вы утрировать. »
не вопрос - исходник - текстовый файл на 1 миллион строчек, каждая из которых представляет собой один единственный символ.
Сравни быстродействие методов... и тогда понятно станет утрирую я или нет.

-------
Ты это - заходи если что...


Отправлено: 12:06, 23-05-2017 | #8


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата y--:
Сравни быстродействие методов... и тогда понятно станет утрирую я или нет.
Мы на брудершафт не пили, так что запанибратство, пожалуйста, оставьте при себе. Это во-первых. Во-вторых, кто в зравом уме и трезвой памяти станет создавать файл в миллион строк с одним единственным символом в каждой из оных? В-третьих, быстро не является синонимом хорошо, и если бы Вы удосужились разобрать исходный код copy, вряд ли стали раздавать столь порочные советы. Впрочем, людям свойственно очаровываться вещами оставляющими желать лучшего. Удачи!

Отправлено: 12:50, 23-05-2017 | #9


Ветеран


Contributor


Сообщения: 2732
Благодарности: 1698

Профиль | Отправить PM | Цитировать


greg zakharov, Если приземлённо вникнуть в постановку и рассуждать без эмоций в деловом стиле, то возникает вопрос: а где решение поставленной задачи?
Цитата method777:
В папке имеется несколько текстовых файлов, нужно, чтобы в начало каждого файла добавилась нужная мне строка. »
Цитата greg zakharov:
Если не усложнять, то в простейшем случае решение может быть таким: »
Даже для одного файла это сомнительное решение. После работы Вашего скрипта исходный файл может быть сильно искажен
А вот этот файл file.txt вообще обрабатывается криво
Код: Выделить весь код
1 Варкалось!

	Хливкие шорьки пырялись по наве!

И хрюкотали зелюки

	Как мюмзики в мове!

2 Ехала деревня мимо мужика

	Вдруг из-под собаки 
	
	Лают ворота!

3 Выбежала бабка с палкою в руке

4 
	Начала дубасить

	Коня на мужике!

5
Лошадь ела сало, 

	А мужик овёс!

6 
	Лошадь села в сани,

А мужик повёз
Цитата greg zakharov:
можете помедитировать над следующим. »
А реальное решение где?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 23-05-2017 в 17:19.


Отправлено: 17:10, 23-05-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Добавить строку в начало текстовых файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Добавить символ в начало каждой строчки в txt supervision Скриптовые языки администрирования Windows 1 22-09-2015 14:36
CMD/BAT - Добавить в начало каждой строки ее номер papacoca Скриптовые языки администрирования Windows 10 17-11-2014 19:12
Разное - [решено] Не могу добавить элемент в контекстное меню для текстовых файлов (*.txt) в windows 7 kefirko Microsoft Windows 7 37 17-07-2014 09:28
.NET - Как добавить строку в таблицу? котвася Программирование и базы данных 4 27-04-2012 02:44
CMD/BAT - [решено] Добавить строку в конце текстовых файлов Seryoga204 Скриптовые языки администрирования Windows 14 19-11-2010 02:33




 
Переход