Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 7

Автор: 01MDM
Дата сообщения: 17.06.2009 11:32
Nagual

Цитата:
у меня выдает


Процентов на 75 это set.

Цитата:
только sed, как обычно, по дефолту не использует перевод строк а-ля windows

Наверное а-ля unix? Последний sed-4.2 уже все делает правильно

Автор: yurkesha
Дата сообщения: 17.06.2009 11:37
Nagual
01MDM
на 100% это 'findstr /n %last% 1.txt' во втором for...

Добавлено:
А вот если %last% экранировать кавычками и ключем /C то получим требуемый результат.

Добавлено:
ну и конечно /L забывать нельзя...

Добавлено:
Но вообще я предлагаю решать задачу примерно так:
Код: (TYPE 1.txt&ECHO MY_STING_TO_DETECTION)|findstr /N /L /C:"MY_STING_TO_DETECTION"
Автор: Nagual
Дата сообщения: 17.06.2009 12:22
01MDM
да версия 4.2 наконец-то правильно ставит перенос строки
все равно та же ошибка, значит ошибка, как говорит yurkesha
здесь findstr /n %last% 1.txt
и странно то, что если первый файл (оба файла) не заканчивается пустой строкой последние две строки скливаются в одну
yurkesha
приведи весь код
Автор: yurkesha
Дата сообщения: 17.06.2009 12:26
Nagual
всю задачу я не делал - только замену двум строкам связанным с подсчетом количества строк(включая пустые). Итоговый код на замену приведен у меня выше и за катом код для оценки быстродействия...
Автор: Nagual
Дата сообщения: 17.06.2009 13:41
господа-знатоки sed и т.п.
обратная задача
высети из исходного файла каждую вторую строку в результирующий
из файла содержащего
aaa1
aaa2
bbb1
bbb2
ccc1
ccc2
надо получить
aaa2
bbb2
ccc2
Автор: Maza_Faka
Дата сообщения: 17.06.2009 16:08
Nagual

Код:
Sed -n "0~2p" test.txt > result.txt
Автор: garri671
Дата сообщения: 18.06.2009 06:59
VetalKr

Цитата:
Как закрыть процесс через BAT-файл?

так же и через pskill
Автор: wolf0425
Дата сообщения: 18.06.2009 15:55
yurkesha
Цитата:
Добавлено:
Обращаю внимание что номер будет выводиться реальный, а не на единицу больше(как может показаться на первый взгляд).
да с чего же это он реальный?

Код: echo test>test.txt
FOR /F "TOKENS=1 DELIMS=:" %%i IN ('^(TYPE test.txt^&ECHO MY_STING_TO_DETECTION^)^|findstr /N /L /C:"MY_STING_TO_DETECTION"') DO echo %%i
Автор: Rush
Дата сообщения: 18.06.2009 16:13
wolf0425
Если файл заканчивается переводом строки, значит эта пустая строка присутствует. Любой нормальный счетчик строк обязан ее учитывать.
Автор: wolf0425
Дата сообщения: 18.06.2009 18:15
Rush заканчивается строка переводом строки или eof - это все равно одна строка.
Если за переводом строки файл не заканчивается - то только тогда начинается следующая строка.
Любой нормальный счетчик от winword до findstr - считает строки именно так, по их началам, а не по переводам строк.

для тренировки определись:
1. сколько строк в файле состоящем только из одного перевода строки
2. сколько строк в файле, который на 1 перевод строки короче.
Автор: HaK1R
Дата сообщения: 18.06.2009 19:40
wolf0425

Цитата:
сколько строк в файле, который на 1 перевод строки короче

это как?
Автор: yurkesha
Дата сообщения: 18.06.2009 19:53
wolf0425
ты конечно можешь упираться сколько угодно но в такой ситуации test.txt состоит из 2-х строк... Посчитай в любом редакторе двигая курсором вниз Иначе ты все строки подобного вида в файле потеряешь.
Спорить не намерен.
Автор: alexander6161
Дата сообщения: 18.06.2009 22:01
wolf0425
Цитата:
для тренировки определись:
1. сколько строк в файле состоящем только из одного перевода строки
2. сколько строк в файле, который на 1 перевод строки короче.

Моё мнение такое:

1. Сколько строк в файле состоящем только из одного перевода строки?
Ответ: две строки. Действительно, двигая курсор по документу отчётливо видим две строки.

2. Сколько строк в файле, который на 1 перевод строки короче?
Ответ: одна. Убираем перевод строки и видим, что курсор занимает одну строку. Мой текстовый редактор при пустом файле показывает, что я нахожусь именно в первой строке, а не в какой-нибудь нулевой. Единственный ньюанс - это строка нулевой длины, вот и всё.
Автор: wolf0425
Дата сообщения: 18.06.2009 22:02
HaK1R
Цитата:
это как?
просто. файл из единственного crlf - имеет одну строку.
файл в котором на 1 crlf меньше - имеет нулевой размер и 0 строк. а yurkesha бредит, утверждая что в файле нулевого размера есть 1 строка - так как при открытии такого файла редактор на какой-то строке стоит.

yurkesha
Цитата:
Иначе ты все строки подобного вида в файле потеряешь.
ты бредишь, я совершенно ничего не потеряю


Добавлено:

Цитата:
Действительно, двигая курсор по документу отчётливо видим две строки.
а просим редактор (ну наприрмер ms-word) посчитать количество строк - он говорит что одна.


Добавлено:

Цитата:
2. Сколько строк в файле, который на 1 перевод строки короче?
Ответ: одна. Убираем перевод строки и видим, что курсор занимает одну строку. Мой текстовый редактор при пустом файле показывает, что я нахожусь именно в первой строке, а не в какой-нибудь нулевой.
замечательно. теперь пометь все строки по Ctrl-a - твоя строка (если она там есть) должна по Ctr-c скопироваться и вставь буфер 10 раз. если получишь курсор на 11 строке - напиши
Автор: alexander6161
Дата сообщения: 18.06.2009 22:09
wolf0425
Цитата:
а просим редактор (ну наприрмер ms-word) посчитать количество строк - он говорит что одна.

А ты посчитай на обычном китайском калькуляторе, сколько будет 2+2*2? Калькулятор скажет, что восемь. А на самом деле будет шесть! И что теперь, калькулятору верить?
Предлагаю больше не флудить на эту тему, а то засрём весь топик.

Добавлено:
wolf0425
Предлагаю тебе решить задачку, только не бери Word как эталон всего что касается текстов. Возьми Notepad, Bred3.
Введи в первую строку например 123 без перевода строки.
Я думаю, здесь ты согласен, что в файле одна строка?
Теперь выдели текст CTRL+A, скопируй CTRL+C, стрелкой вправо до конца строки и вставь два раза CTRL+V.
Судя твоей логике, в файле уже три строки? А видим только одну: 123123123
А теперь то же самое сделй в Word (я использовал 2003), будет так:
123123
123
Он с какого-то перепуга первый раз вставляет в эту же строку, а потом сам начинает переносить на другую строку. И ты после этого считаешь его эталоном текстовых редакторов, и всё что он делает есть аксиома?
Пиши мне в личку, если найдёшь здравомыслящее объяснение описанной ситуации.
Автор: wolf0425
Дата сообщения: 18.06.2009 22:14

Цитата:
Предлагаю больше не флудить на эту тему, а то засрём весь топик.
так не флуди про калькуляторы, особенно после того как ты точно так же вместо калькулятора использовал редактор.

Если найдешь другой редатор, умеющий показывать статистику по файлу (количество строк, символов, итп) и он тебе скажет что в пустом файле есть одна строка - свистни.


по твоей логике в пустом файле строка не только есть - она еще и бесконечной длины, так как стрелка вправо например в ФАРовском редакторе никуда не упирается
Автор: alexander6161
Дата сообщения: 18.06.2009 22:18
wolf0425
Цитата:
Если найдешь другой редатор, умеющий показывать статистику по файлу (количество строк, символов, итп) и он тебе скажет что в пустом файле есть одна строка - свистни.

Текстовый редактор Bred3 показывает в пустом файле, что курсор находится в положении первая строка, первый символ.
Автор: wolf0425
Дата сообщения: 18.06.2009 22:22

Цитата:
Текстовый редактор Bred3 показывает в пустом файле, что курсор находится в положении первая строка, первый символ.
ты неграмотный или прикадываешься? повторяю - редактор показывающий статистику о редактируемом файле, а не позицию курсора.

Кстати, редактор тебе показывает "первый символ".
Мы уже выяснили что файл нулевой длины и никаких символов в нем нет - в том числе и первого (иначе встанет вопрос о коде первого символа).
Т.е. твой редактор, позиционируя курсор в конец файла, показывает никак не то сколько символов в последней строке файла, да? чем его индикатор строки должен отличаться от индикатора колонки?
Автор: HaK1R
Дата сообщения: 18.06.2009 22:35
wolf0425,alexander6161
Господа, не флудите. Это столь не важно.
Можете сделать новую тему, и ссылку на нее скинуть. Кому интересно-зайдет, почитает
p.s. Я согласен с alexander6161
Цитата:
Моё мнение такое:


Автор: yurkesha
Дата сообщения: 18.06.2009 22:45
...удалено - был не прав - обещал не спорить...
All
Сорри за офтоп - больше не повторится...
Автор: vitaliy91
Дата сообщения: 18.06.2009 23:08
Как можно увеличить переменную на еденицу не используя цикл ?

Добавлено:


Уже разлбрался ) set /a
Автор: slay1212
Дата сообщения: 19.06.2009 15:24
Помогите решить задачку. Батник периодически запускается и отслеживает время работы определенного юзера, имя и время работы в минутах задается параметром.
Система w2k3. Для определения логона используются коды 528(логон), 551 (логоф) журнала секюрити и утилита Руссиновича Pslogkist (в идеале лучше бы виндовое средство, но systeminfo не всегда правильно uptime системы определяет)
psloglist.exe -d 0 -s -id 551,528 security > 11.txt
Возможно надо еще | find "%usrname%" добавить

выдает все логоны логофы за последний день в таком виде.
[more]Security log on \\FILSRV:
728542,Security,Security,AUDIT SUCCESS,FILSERV,19.06.2009 11:19:43,528,Administrator\Dom_D,Successful Logon: User Name: Administrator Domain:Dom_d Logon ID: (0x0,0x35AA9AE) Logon Type: 7 Logon Process: User32 Authentication Package: Negotiate Workstation Name: FILSRV Logon GUID: {a3fa49de-bf71-077a-6591-b3d0df7e6830} Caller User Name: FILSRV$ Caller Domain: Caller Logon ID: (0x0,0x3E7) Caller Process ID: 320 Transited Services: - Source Network Address: 127.0.0.1 Source Port: 0 [/more]
Собственно что надо
1. - посчитать время работы от логона до логофа в минутах (имхо не совсем правильно ибо в случае бсода логофа не будет . Поэтому возможно надо анализировать и журнал систем на предмет событий 6008 (за эти же сутки) для определения времени окончания работы юзера.
8552,System,EventLog,ERROR,FILSRV,01.06.2009 13:29:08,6008,None,The previous system shutdown at 13:22:57 on 01.06.2009 was unexpected.
2. Посчитать общее время работы юзера.При превышении лимита скорее всего убивать експлорер с задержкой 5 мин и предупреждающим окошком ( ну или логоф).

Автор: ForposT_ForeveR
Дата сообщения: 19.06.2009 19:05
Здравствуйте.

Код: for /f "delims=" %%N in (file.txt) do md "%%N" && xcopy "C:\lala" "%%N" /E /C /Q
Автор: 01MDM
Дата сообщения: 19.06.2009 20:06
ForposT_ForeveR

Код:
@echo off
setlocal

for /f "tokens=*" %%i in (file.txt) do call:copy "%%i"
goto:eof

:copy
set /a cnt+=1
xcopy /i /e /c /q "C:\%cnt%" %1
Автор: ForposT_ForeveR
Дата сообщения: 19.06.2009 20:20
Спасибо огромное, работает
Автор: 01MDM
Дата сообщения: 19.06.2009 21:06
ForposT_ForeveR

Код:
xcopy /i /e /c /q "C:\%cnt%" "%~1\dir"
Автор: vitaliy91
Дата сообщения: 19.06.2009 21:54
Как можно выделить путь батника из переменной %0 ? Или другим образом получить путь где лежит батник.
Автор: 01MDM
Дата сообщения: 19.06.2009 22:29
vitaliy91

%~dp0
Автор: vitaliy91
Дата сообщения: 20.06.2009 01:23
Спасибо 01MDM
Автор: yurkesha
Дата сообщения: 20.06.2009 12:00
wolf0425
специально для тебя - модифицированный код подсчета строк который игнорирует последнюю строку если она пустая.
Быстродействие не пострадало
Для всех остальных - правильный способ подсчета строк на предыдущей странице.

Код: FOR /F "TOKENS=1,2 DELIMS=: " %%i IN ('^(TYPE 1.txt^&ECHO MY_STING_TO_DETECTION^)^|findstr /N /L /C:"MY_STING_TO_DETECTION"') DO IF "%%j"=="MY_STING_TO_DETECTION" (SET /A "LAST=%%i-1") ELSE (SET "last=%%i")

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.