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

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

Ответить
Настройки темы
CMD/BAT - [решено] Копирование строк в отдельный файл по условию

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


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

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


Ув. форумчане подскажите пожалуйста, как можно скопировать из файла (С:\1.txt)- все строки которые начинаются на:
/1000
/2000
/3000
/4000
/5000
/6000
, в файл 2.txt ?

Отправлено: 23:20, 24-08-2010

 

Пользователь


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

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


Seryoga204,

Код: Выделить весь код
Echo on & Chcp 1251
Set "$SRS=F:\probe\переименование\1.txt"
Set "$DST=F:\probe\переименование\2.txt"

:loop
Set /a $num+=1
If /i %$num% GTR 6 goto :Eof
Set $Crt=^/%$num%000

For /f "tokens=*" %%a in ('^<%$SRS% Find /i "%$Crt%"') Do Echo %%a >> %$DST%
goto loop
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:21, 25-08-2010 | #2



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

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


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


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

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


Спасибо большое все отлично работает, только батник не завершает работу, а по кругу отбирает записи?

Отправлено: 00:51, 25-08-2010 | #3


Пользователь


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

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


Seryoga204,

почему не завершает? Сколько там у Вас записей с подобным критерием отбора?
Цитата deepred:
goto :Eof »
- там не просто так...
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:08, 25-08-2010 | #4


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


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

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


Все получилось! Спасибо!

Отправлено: 01:28, 25-08-2010 | #5


Googler


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

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


Код: Выделить весь код
FindStr /BRC:"/[1-6]000" 1.txt >2.txt
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:59, 25-08-2010 | #6


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


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

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


amel27,Спасибо! а если еще надо строки которые начинаются со слова "Отдел", так чтобы в файле 2.txt сохранилась последовательность?

Отправлено: 03:31, 25-08-2010 | #7


Googler


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

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


Вложения
Тип файла: 7z 1.7z
(224 байт, 15 просмотров)

Цитата Seryoga204:
еще надо строки которые начинаются со слова "Отдел" »
зависит от исходной кодировки текстового файла, для DOS (OEM/866) всё просто:
Код: Выделить весь код
FindStr /BRC:"/[1-6]000" /C:"Отдел" 1.txt >2.txt
для WIN (ANSI/1251) требуется промежуточная перекодировка во временный файл, типа:
(см. аттач, спецсимволы не дали корректно запостить код)

...либо вместо штатной FINDSTR использовать альтернативы типа GREP
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:24, 25-08-2010 | #8


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


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

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


Цитата:
FindStr /BRC:"/[1-6]000" /C:"Отдел" 1.txt >2.txt
А можно сделать так:
чтобы также копировалась следующая строка идущая после строки удовлетворяющей условию?
и в файле 2.txt в начале скопированных строк прописывалось значение "999 "?

Последний раз редактировалось Seryoga204, 26-09-2010 в 13:29.


Отправлено: 10:11, 26-09-2010 | #9


Googler


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

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


Цитата Seryoga204:
чтобы также копировалась следующая строка идущая после строки удовлетворяющей условию »
штатными средствами непросто, как вариант (текстовый файл в DOS-кодировке):
Код: Выделить весь код
@echo off 
SetLocal EnableDelayedExpansion

set fi=1.txt
set fo=1.out

(for /f "tokens=1 delims=:" %%i in ('findstr /brnc:"/[1-6]000" /c:"Отдел" "%fi%"') do (
 set /a $j=%%i+1& for /f "tokens=1* delims=[]" %%a in (
'find /v /n ""^<"%fi%"^|findstr /bc:"[%%i]" /c:"[!$j!]"') do echo.%%b
)) >"%fo%"
вариант на SED (текстовый файл в WIN-кодировке):
Код: Выделить весь код
set fi=2.txt
set fo=2.out

sed -n "/^\/[1-6]\|^Отдел/{p;n;p;}" "%fi%" >"%fo%"
вариант на AWK (текстовый файл в WIN-кодировке):
Код: Выделить весь код
set fi=3.txt
set fo=3.out

awk "{p-=1};/^\/[1-6]|^Отдел/{p=2};p>0" %fi% >%fo%
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:45, 26-09-2010 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поиск строк с указанным словом и копирование их в отдельный файл Maartimus Скриптовые языки администрирования Windows 2 13-07-2010 20:25
Общее - [решено] Экспорт издания в отдельный WIM-файл САШOК Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 7 03-06-2009 01:41
[решено] Работа с html-кодом страницы, поиск и копирование нужных строк Sestrichka AutoIt 14 02-04-2009 16:51
Вывод размера папки в отдельный файл скриптом Whiteee Microsoft Windows NT/2000/2003 1 16-07-2008 14:06
добавления строк в файл e9990638 Автоматическая установка приложений 5 18-01-2007 18:35




 
Переход