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

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

Автор: BasiL
Дата сообщения: 11.01.2008 09:02
vu1tur
Тогда и ссылочку на греп в студию
Автор: vu1tur
Дата сообщения: 11.01.2008 11:31
BasiL
не брезгуем читать шапку: UnxUtils - набор GNU утилит для Win32.
Автор: JohnRD
Дата сообщения: 11.01.2008 14:21
01MDM
спасибо за помощь есть проблема
находит только если строка заканчивается логином а собака на другой строке
как сдесь:
EmailAddresses : {smtp:V.V.Ivanov@domain.ru, SMTP:Ivanov-VV <-
@domain.ru, smtp:Ivanov-VV@domain.local}

причем находит только эти
V.V.Ivanov@domain.ru
Ivanov-VV @domain.ru

Ivanov-VV@domain.ru этот игнорирует

если строка обрывается так или еще как нибудь
EmailAddresses : {smtp:V.V.Sidorov@domain.ru, SMTP:Sidorov-VV@do <-
main.ru, smtp:Ivanov-VV@domain.local}
в них ничего не находит

ну и только 2 строки первые правильные выводит
echo %%a>>result.txt
echo %%b>>result.txt
Автор: king_stiven
Дата сообщения: 11.01.2008 15:05
JohnRD
"если строка обрывается так или еще как нибудь"

лучше приведи все варианты
Автор: 01MDM
Дата сообщения: 11.01.2008 15:22
JohnRD

Цитата:

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

Ну так на этом все и построено, я же не знаю как лог выводится во всех случаях, что ты привел как пример, я и взял за основу
Автор: JohnRD
Дата сообщения: 11.01.2008 15:28
king_stiven 01MDM

варианты зависят от количества почтовых адресов их может быть 2,3,4,5 итд, и от количества символов в фамилии каждого адреса, плюс количество строк в строке 111 символов и дальше перевод строки + 17 пробелов для красоты выгрузки


| 111 символов |
EmailAddresses : {smtp:V.V.Ivanov@domain.ru, SMTP:Ivanov-VV
@domain.ru, SMTP:Ivanov_VV@domain.ru, SMT
P:Ivanov--VV@domain.ru,smtp:Ivanov-VV@dom
ain.local}

EmailAddresses : {smtp:V.V.ya@domain.ru, SMTP:ya-VV@domain
.ru, smtp:ya-VV@domain.local}

EmailAddresses : {smtp:V.V.ona@domain.ru, SMTP:ona-VV@doma
in.ru, smtp:ona-VV@domain.local}

EmailAddresses : {smtp:V.V.tynah@domain.ru, SMTP:tynah-VV@d
omain.ru, smtp:tynah-VV@domain.local}

любые варианты разрыва строки, разное количество адресов,

при чем такой адрес (плоский) не нужен, только реальные почтовые адреса
Ivanov-VV@domain.local
не нужен, только реальные почтовые адреса

это нужно для базы релей сервера

shell эксченжа не выгружает в другом виде сволочь, а людей много, если приходит новый или уходит нужно выгрузить в формат вида

Код:
V.V.Ivanov@domain.ru
Ivanov-VV @domain.ru
Ivanov_VV @domain.ru
V.V.Sidorov@domain.ru
Sidorov-VV @domain.ru
Petrov_AA @domain.ru
Vasya@domain.ru
Petruha@domain.ru
ya@domain.ru
ya_aa@domain.ru
Автор: king_stiven
Дата сообщения: 11.01.2008 15:50
JohnRD

ну вот ты приводишь пример:

Код: EmailAddresses : {smtp:V.V.Ivanov@domain.ru, SMTP:Ivanov-VV
@domain.ru, SMTP:Ivanov_VV@domain.ru, SMT
P:Ivanov--VV@domain.ru,smtp:Ivanov-VV@dom
ain.local}

EmailAddresses : {smtp:V.V.ya@domain.ru, SMTP:ya-VV@domain
.ru, smtp:ya-VV@domain.local}

EmailAddresses : {smtp:V.V.ona@domain.ru, SMTP:ona-VV@doma
in.ru, smtp:ona-VV@domain.local}

EmailAddresses : {smtp:V.V.tynah@domain.ru, SMTP:tynah-VV@d
omain.ru, smtp:tynah-VV@domain.local}
Автор: JohnRD
Дата сообщения: 11.01.2008 15:58
king_stiven

выход из ексченжа

Код:
EmailAddresses : {smtp:V.V.Ivanov@domain.ru, SMTP:Ivanov-VV
@domain.ru, SMTP:Ivanov_VV@domain.ru, SMT
P:Ivanov--VV@domain.ru,smtp:Ivanov-VV@dom
ain.local}

EmailAddresses : {smtp:V.V.ya@domain.ru, SMTP:ya-VV@domain
.ru, smtp:ya-VV@domain.local}

EmailAddresses : {smtp:V.V.ona@domain.ru, SMTP:ona-VV@doma
in.ru, smtp:ona-VV@domain.local}

EmailAddresses : {smtp:V.V.tynah@domain.ru, SMTP:tynah-VV@d
omain.ru, smtp:tynah-VV@domain.local}
Автор: BasiL
Дата сообщения: 11.01.2008 16:29
JohnRD
я бы для таких целей использовал UltraEdit или аналог...
Где можно искать и заменять по регулярным выражениям...
будет и быстро, и качественно.
Автор: king_stiven
Дата сообщения: 11.01.2008 17:41
JohnRD

небыстро будет

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (log.txt) do (
if not "%%i"=="" (
set "line=!line!%%i"
) else (
call:line !line!
)
)
goto:eof
:line
if not "%1"=="" (
for /f "tokens=1,2 delims=:" %%a in ("%1") do echo %%b | FINDSTR "@" | FINDSTR /v /i "@domain.local">> result.txt
shift
goto :line
)
set line=
Автор: JohnRD
Дата сообщения: 11.01.2008 17:59
king_stiven

V.V.Ivanov@domain.ru
Ivanov_VV@domain.ru
Ivanov--VV@domain.ru
Ivanov-VV@dom
V.V.ya@domain.ru
ya-VV@domain
V.V.ona@domain.ru
ona-VV@doma

вот это выдал с тестовым файлом

Код:
EmailAddresses : {smtp:V.V.Ivanov@domain.ru, SMTP:Ivanov-VV
@domain.ru, SMTP:Ivanov_VV@domain.ru, SMT
P:Ivanov--VV@domain.ru,smtp:Ivanov-VV@dom
ain.local}

EmailAddresses : {smtp:V.V.ya@domain.ru, SMTP:ya-VV@domain
.ru, smtp:ya-VV@domain.local}

EmailAddresses : {smtp:V.V.ona@domain.ru, SMTP:ona-VV@doma
in.ru, smtp:ona-VV@domain.local}

EmailAddresses : {smtp:V.V.tynah@domain.ru, SMTP:tynah-VV@d
omain.ru, smtp:tynah-VV@domain.local}
Автор: king_stiven
Дата сообщения: 11.01.2008 18:49
есчо вариант

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (log.txt) do (
echo %%i | FINDSTR "}" > nul
if errorlevel 1 (
set line=!line!%%i
) else (
set line=!line!%%i
call:line !line!
)
)
goto:eof
:line
if not "%1"=="" (
for /f "tokens=1,2 delims=:, " %%a in ("%1") do echo %%b| FINDSTR "@" | FINDSTR /v /i "@domain.local">> result.txt
shift
goto :line
)
set line=
Автор: JohnRD
Дата сообщения: 11.01.2008 20:39
king_stiven

спасибо есть траблы

1й батник работает с тестовым но не работает с реальным логом, не выдает результ


Код:
EmailAddresses : {smtp:N.N.Kagarlitskaya@1234domain.ru, smtp:Kagarlitskaya-NN@1234domain.local, SMTP:Kagarlitsk
aya-NN@1234domain.ru}

EmailAddresses : {smtp:Fadeev-VV@1234domain.local, SMTP:Fadeev-VV@1234domain.ru}

EmailAddresses : {smtp:N.A.Kormina@1234domain.ru, smtp:Kormina-NA@1234domain.local, SMTP:Kormina-NA@1234domain.
ru}

EmailAddresses : {smtp:pupkin@1234domain.ru, smtp:Pupkin-VV@1234domain.local, SMTP:Pupkin-VV@1234domain.ru, smt
p:pupkin@1234domain.local}

EmailAddresses : {smtp:Test-User@1234domain.local, SMTP:Test-User@1234domain.ru}

EmailAddresses : {smtp:a.v.patsianskiy@1234domain.ru, smtp:Patsianskiy-AV@1234domain.local, SMTP:Patsianskiy-AV
@1234domain.ru}

EmailAddresses : {smtp:D.V.Fedorov@1234domain.ru, smtp:Fedorov-DV@1234domain.local, SMTP:Fedorov-DV@1234domain.
ru}

EmailAddresses : {smtp:D.A.Kharakhorin@1234domain.ru, smtp:Kharakhorin-DA@1234domain.local, SMTP:Kharakhorin-DA
@1234domain.ru}

EmailAddresses : {smtp:sapadm1@1234domain.local, SMTP:sapadm1@1234domain.ru}

EmailAddresses : {smtp:Shevchenko-SV@1234domain.local, SMTP:Shevchenko-SV@1234domain.ru}

EmailAddresses : {smtp:v.a.bulanov@1234domain.ru, smtp:Bulanov-VA@1234domain.local, SMTP:Bulanov-VA@1234domain.
ru}
Автор: king_stiven
Дата сообщения: 11.01.2008 21:33
JohnRD

проверь

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (log.txt) do (
set line=!line!%%i
echo %%i | FINDSTR "}" > nul
if not errorlevel 1 call:line !line!
)
echo REJECT>> result.txt

goto:eof
:line
if not "%1"=="" (
for /f "tokens=1,2 delims=:,}" %%a in ("%1") do echo %%b        OK| FINDSTR "@" | FINDSTR /v /i "domain.local">> result.txt
shift
goto :line
)
set line=
Автор: 01MDM
Дата сообщения: 11.01.2008 22:40
JohnRD
Мой вариант, раз уж написал..

Код:
@echo off
setlocal
for /f "tokens=*" %%i in (log.txt) do if not .%%i==. call:toStr "%%i"
echo REJECT >>result.txt
goto:eof

:toStr
set "str=%str%%~1"
echo %~1 | findstr ".*}" 1>nul || goto:eof
:next
set /a tok+=1
for /f "tokens=%tok% delims=:,}" %%i in ("%str%") do (
    echo %%i | findstr "@" | findstr /v "local" 1>nul && echo %%i        OK >>result.txt
    if not .%%i==. goto:next
)
set tok=
set str=
Автор: cluster
Дата сообщения: 11.01.2008 22:52
Ребят, как переименовать файл, приписав к нему день недели создания файла?
Не важно, в каком виде день недели будет - Пн, Вт.. Mo, Tu.. или 1, 2..

Нашёл такой скрипт в шапке, но вот не хватает дня недели.

Код: @Echo Off
For %%a In (*.qqq) Do @Call :Rena %%a %%~ta
GoTo :EOF

:Rena
Set f_Name=%1
Set f_Date=%2
Set f_Time=%3
Set f_Day=%f_Date:~0,2%
Set f_Month=%f_Date:~3,2%
Set f_Year=%f_Date:~6,4%
Set f_Hour=%f_Time:~0,2%
Set f_Min=%f_Time:~3,2%
Ren %F_Name% %f_Year%-%f_Month%-%f_Day%-%f_Hour%-%f_Min%.qqq
GoTo :EOF
Автор: 01MDM
Дата сообщения: 11.01.2008 23:25
cluster
Силами только cmd определить день недели по дате в прошлом достаточно проблематично. В версии для печати на запрос weekday можно найти разные варианты (cmd, cmd+vbs)
Автор: cluster
Дата сообщения: 12.01.2008 00:19
01MDM
Тип скрипта тоже не важен. Я почти уже добил эту задачу на CMD. Отпишусь.

Добавлено:
АА, я уже не соображаю среди ночи..
Вот что удалось наработать:

Код: @echo off & setlocal ENABLEEXTENSIONS
call :GetDate y m d
call :DateToDOW %y% %m% %d% dow
call :DayName %dow% day
echo/Today is %day%
goto :EOF

rem Функция получения системного времени
:GetDate
setlocal ENABLEEXTENSIONS
set t=2&if "%date%z" LSS "A" set t=1
for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('echo/^|date') do (
for /f "tokens=%t%-4 delims=.-/ " %%d in ('date/t') do (
set %%a=%%d&set %%b=%%e&set %%c=%%f))
endlocal&set %1=%гг%&set %2=%мм%&set %3=%дд%&goto :EOF

rem Функция получения дня недели цифрой даты, полученной из предыдущей функции
:DateToDOW
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2
set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1
endlocal&set %4=%dow%&goto :EOF

rem Функция преобразования дня недели из цифры в буквенный вид.
:DayName
setlocal ENABLEEXTENSIONS
for /f "tokens=%1" %%a in ('echo/Monday Tuesday Wednesday Thursday Friday^
Saturday Sunday') do endlocal&set %2=%%a&goto :EOF
Автор: JohnRD
Дата сообщения: 12.01.2008 09:54
king_stiven

N.N.Kagarlitskaya@1234domain.ru OK
Fadeev-VV@1234domain.ru OK
N.A.Kormina@1234domain.ru OK
Kormina-NA@1234domain. OK < - строка где в конце точка
строка где в конце точка
pupkin@1234domain.ru OK
Pupkin-VV@1234domain.ru OK
Test-User@1234domain.ru OK
a.v.patsianskiy@1234domain.ru OK
D.V.Fedorov@1234domain.ru OK
Fedorov-DV@1234domain. OK <---
D.A.Kharakhorin@1234domain.ru OK
sapadm1@1234domain.ru OK
Shevchenko-SV@1234domain.ru OK
v.a.bulanov@1234domain.ru OK
Bulanov-VA@1234domain. OK <---
REJECT

в конце каждой строки возможен любой символ . , : } - _ @ как только строка достигнет 111 символов будет перевод строки


01MDM

Ваш почему то выдал только
REJECT
Автор: king_stiven
Дата сообщения: 12.01.2008 10:12
JohnRD

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

Добавлено:
и пустую строку после 'echo REJECT>> result.txt' удали
Автор: 01MDM
Дата сообщения: 12.01.2008 10:14
JohnRD


Цитата:
почему то выдал только
REJECT

Ну если его правильно скопировать, убрать все конечные пробелы, то все будет в порядке.
Автор: JohnRD
Дата сообщения: 12.01.2008 10:32
king_stiven

да так и было, теперь все отлично
спасибо огромное

01MDM

а Ваш по прежнему REJECT отдает вот на этом приближенном к реальному примере

Код:
EmailAddresses : {smtp:N.N.Kagarlitskaya@1234domain.ru, smtp:Kagarlitskaya-NN@1234domain.local, SMTP:Kagarlitsk
aya-NN@1234domain.ru}

EmailAddresses : {smtp:Fadeev-VV@1234domain.local, SMTP:Fadeev-VV@1234domain.ru}

EmailAddresses : {smtp:N.A.Kormina@1234domain.ru, smtp:Kormina-NA@1234domain.local, SMTP:Kormina-NA@1234domain.
ru}

EmailAddresses : {smtp:pupkin@1234domain.ru, smtp:Pupkin-VV@1234domain.local, SMTP:Pupkin-VV@1234domain.ru, smt
p:pupkin@1234domain.local}

EmailAddresses : {smtp:Test-User@1234domain.local, SMTP:Test-User@1234domain.ru}

EmailAddresses : {smtp:a.v.patsianskiy@1234domain.ru, smtp:Patsianskiy-AV@1234domain.local, SMTP:Patsianskiy-AV
@1234domain.ru}

EmailAddresses : {smtp:D.V.Fedorov@1234domain.ru, smtp:Fedorov-DV@1234domain.local, SMTP:Fedorov-DV@1234domain.
ru}

EmailAddresses : {smtp:D.A.Kharakhorin@1234domain.ru, smtp:Kharakhorin-DA@1234domain.local, SMTP:Kharakhorin-DA
@1234domain.ru}

EmailAddresses : {smtp:sapadm1@1234domain.local, SMTP:sapadm1@1234domain.ru}

EmailAddresses : {smtp:Shevchenko-SV@1234domain.local, SMTP:Shevchenko-SV@1234domain.ru}

EmailAddresses : {smtp:v.a.bulanov@1234domain.ru, smtp:Bulanov-VA@1234domain.local, SMTP:Bulanov-VA@1234domain.
ru}
Автор: 01MDM
Дата сообщения: 12.01.2008 10:40
JohnRD
Только что попробовал "приближенный" вариант вот вывод в файл:

Код:
N.N.Kagarlitskaya@1234domain.ru OK
Kagarlitskaya-NN@1234domain.ru OK
Fadeev-VV@1234domain.ru OK
N.A.Kormina@1234domain.ru OK
Kormina-NA@1234domain.ru OK
pupkin@1234domain.ru OK
Pupkin-VV@1234domain.ru OK
Test-User@1234domain.ru OK
a.v.patsianskiy@1234domain.ru OK
Patsianskiy-AV@1234domain.ru OK
D.V.Fedorov@1234domain.ru OK
Fedorov-DV@1234domain.ru OK
D.A.Kharakhorin@1234domain.ru OK
Kharakhorin-DA@1234domain.ru OK
sapadm1@1234domain.ru OK
Shevchenko-SV@1234domain.ru OK
v.a.bulanov@1234domain.ru OK
Bulanov-VA@1234domain.ru OK
REJECT
Автор: JohnRD
Дата сообщения: 12.01.2008 11:06
01MDM

беру свои слова назад, все действительно работает, просто еще раз скопировал Ваш код и убрал лишние пробелы..

спасибо всем
я в трансе от ваших решений
Автор: ddna
Дата сообщения: 12.01.2008 11:29
Здравствуйте нужна ваша помощь в батах ноль, а надо помогите чем можите

нужны два батника один для выполнения переноса всех файлов каталога на уровень выше
другой командный файл, должен удалять из файла list1.txt строки, которые есть в файле list2.txt и выводить количество строк в полученном и исходных файлах.

заранее спасибо
Автор: king_stiven
Дата сообщения: 12.01.2008 12:31
ddna

@echo off
cd ..
for %%e in ("%~dp0\*") do move "%%e" "%cd%"


батник для поиска совпадающих строчек ищи в этом топике

Добавлено:
01MDM

В сиысле, как это писать в фаре? То есть там есть что-то другое, чем текстовой редактор?
Автор: cluster
Дата сообщения: 12.01.2008 12:46
Ребят, а мне поможете?
http://forum.ru-board.com/topic.cgi?forum=62&topic=11825&start=1320#21
Автор: king_stiven
Дата сообщения: 12.01.2008 12:58
cluster
только к гуру
Автор: vu1tur
Дата сообщения: 12.01.2008 13:27
cluster
я бы не морочил себе одно место, и сделал как-то так:

for /F "tokens=6,11 delims= " %a in ('ls -al --full-time *.txt') do @ren %b %~nb_%a.txt
Автор: Elroir
Дата сообщения: 12.01.2008 14:13
cluster
Или так (не используя юниксовские утилиты):

Код:
@echo off
setlocal
for %%A in (*.txt) do (
call :get_date "%%~tA"
call :ren_file "%%A"
)
goto :EOF
:get_date
echo wscript.echo WeekDayName^(WeekDay^(DateValue^("%~1"^)^)^)>tmp.vbs
for /f %%a in ('cscript tmp.vbs //Nologo') do set "fdate=%%a")
goto :EOF
:ren_file
ren "%~1" "%~n1_%fdate%%~x1"

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

Предыдущая тема: Доступ к реестру через RegEdit?


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