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

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

Автор: andymrrc
Дата сообщения: 08.10.2010 15:35
добрый день.
кто подскажет как реализовать следующее....

есть каталог в который, в случае ошибки в программе выкладываются файлы с расширением err например такой AL_DC_0000000003_10_Р0.err

необходимо периодически (планировщик) просматривая этот каталог обнаружив файл с ошибкой отослать его содержимое по почте нужному клиенту
клиент зашифрован в первых 2 буквах (в данном случае AL) клиентов всего 5 .
как правильно сделать анализ имени файла , чтоб определить какие первые 2 символа в имени файла и выполнить нужное действие, например почту отправить клиенту ?
Автор: wolf0425
Дата сообщения: 08.10.2010 18:44
andymrrc
ну на 5 вариантов - загоняешь имя в переменную (через for) и делаешь 5 последовательных сравнений первых 2 букв с нужными вариантами
Автор: res2001
Дата сообщения: 09.10.2010 15:44
andymrrc
Так извлекай первые 2 символа:

Код: @echo off
setlocal ENABLEDELAYEDEXPANSION
for %%i in (*.*) do (
    set "v=%%~ni"
    set "v=!v:~,2!"
    echo.!v!
)
Автор: smirnvlad
Дата сообщения: 09.10.2010 18:31
wolf0425
res2001
с миру по нитке :)

andymrrc
надо использовать blat из полезных утилит в шапке темы для отправки почты
[more]
Код: [no]
@echo off

:: перебираем файлы начинающиеся на 2 буквы с подчеркиванием и расширением err
for %%a in (??_*.err) do set "fn=%%a" && call:guesswho & call:sendmail
goto:eof

:guesswho
:: выбираем адресата по двум буквам
set "eMail="
if /i "%fn:~0,2%" == "AL" set "eMail=a@example.com"
if /i "%fn:~0,2%" == "BL" set "eMail=b@example.com"
if /i "%fn:~0,2%" == "CL" set "eMail=c@example.com"
if /i "%fn:~0,2%" == "DL" set "eMail=d@example.com"
if /i "%fn:~0,2%" == "EL" set "eMail=e@example.com"
goto:eof

:sendmail
:: если адресат не выбран то и отправлять ничего не будем
if not defined eMail ( echo Error: unknown prefix "%fn:~0,2%" & goto:eof)

:: текст письма
set body=-body "mail body: file with error"
:: тема письма
set subj=-s "Error file %fn%"
:: smtp сервер
set server=-server smtp.localhost
:: имя пользователя
set user=-u username@server.com
:: пароль
set pass=-pw password

:: из следующей строки надо убрать echo вначале
echo blat - %body% -to %eMail% %subj% %server% %user% %pass% -attach %fn%

goto:eof
[/no]
Автор: Bercut
Дата сообщения: 09.10.2010 20:15
Доброго вечера, тут есть небольшая задачка "Скрипт для бэкапа на фтп", но я сначала не нашел эту тему, да и вопрос не столько к батнику, сколько по программе фтп, поэтому создал отдельную тему. Если кто может знает в чем дело, напишете, пожалуйста.
Автор: bomzzz
Дата сообщения: 09.10.2010 20:46
ну и зря ты тему создавал отдельную. сто раз уже про этот фтп пейсали
Автор: PbIXTOP
Дата сообщения: 10.10.2010 09:47
Есть такая задача
Существует список файлов в директории
Существует тестовый файл со строками для переименования файлов (самих названий файлов в нем нету)
Необходимо переименовать первые согласно второму
И те и другие упорядочены только по времени
Как сделать параллельный цикл до меня так и недоперло
Автор: smirnvlad
Дата сообщения: 10.10.2010 10:11
PbIXTOP

[more]
Код: [no]
@echo off

:: папка с файлами
set "directory=c:\temp"

:: файл с новыми именами
set "filenames=c:\123.txt"

set "line=0"

:: убрать - перед D для сортировки файлов в обратном порядке
for /f "tokens=*" %%a in ('dir "%directory%" /B /O:-D') do set "fn=%%a" && call:newname & set /a "line=%line%+1"
goto:eof

:newname
for /f "tokens=*" %%a in ('more +%line% "%filenames%"') do set "nfn=%%a" && call:rename & exit /b
goto:eof

:rename
:: убрать echo чтобы файлы переименовывались
echo ren "%directory%\%fn%" "%nfn%"

[/no]
Автор: 01MDM
Дата сообщения: 10.10.2010 11:01
PbIXTOP

Цитата:
Как сделать параллельный цикл до меня так и недоперло



Код:
@echo off
setlocal

set s=0

:1
for /f "tokens=*" %%i in ('more +%s% 1.txt') do (
for /f "tokens=*" %%j in ('more +%s% 2.txt') do (

    echo %%i %%j
    set /a s+=1
    goto:1

))
Автор: ADGJMPTW009
Дата сообщения: 10.10.2010 19:24
Нужен скрипт чтоб из папки удалялись файлы по имени pcw*.dem старше 7 дней
Автор: res2001
Дата сообщения: 10.10.2010 19:55
ADGJMPTW009
Тут фактически на прошлой странице обсуждался подобный вопрос.
Автор: ComradG
Дата сообщения: 10.10.2010 23:26
ADGJMPTW009
Смотри тут. Пост специально для тебя.
res2001, тебя еще интересуют штампы времени? Могу подкинуть код консольной тулзы (аналог touch), которую можно юзать из батников.
Автор: andymrrc
Дата сообщения: 11.10.2010 08:50
Спасибо большое.
Автор: res2001
Дата сообщения: 11.10.2010 08:55
ComradG

Цитата:
тебя еще интересуют штампы времени?

Меня они вроде не особо интересуют, постольку поскольку пытаюсь отвечать на вопросы.
Кстати, на счет штампов времени, накропал батничег, навеянный вопросами от Maximus777, который переводит дату/время в секунды от начала эпохи а-ля *никсы, щаз пытаюсь сделать обратный. Как доделаю выложу тут, может кому сгодится.
Автор: Maximus777
Дата сообщения: 11.10.2010 16:34
res2001
ой-йо, мне точно сгодится. Ибо делаю и там и там. В лине красивее получаецца. С секундами очень просто. Заранее большая спасиба.
Автор: SANIOK_AV
Дата сообщения: 11.10.2010 17:32
Доброго времени суток!
Хочу автоматизировать процес:
В ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318} проверить все подразделы этой ветки на наличие в их подразделе "Connection" переменной "Name", значение которой равно известному нам заранее значению (к примеру "Подключение по локальной сети"), и если такая переменная есть берём в качестве результата название этого подраздела.
Я пока застрял на первом этапе....(((
Делаю так:

Код: reg query HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318} /v Name /s /f "Подключение по локальной сети" /d /c /e
Автор: 01MDM
Дата сообщения: 11.10.2010 19:11
SANIOK_AV

Код:
@echo off
setlocal
1>nul chcp 1251

set "regroot=HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}"

for /f "tokens=3*" %%i in ('reg query "%regroot%" /s ^| findstr "Name"') do echo %%i %%j

1>nul chcp 866
Автор: king_stiven
Дата сообщения: 11.10.2010 20:20
Никто ролики с youtube wget ом не скачивает?
Автор: bomzzz
Дата сообщения: 12.10.2010 00:31
ссылку прямую получи и качай
Автор: king_stiven
Дата сообщения: 12.10.2010 07:24
чем получаешь ссылку?
Автор: Maximus777
Дата сообщения: 12.10.2010 09:36
Сочинил следующий батник:

Код: @echo off
for /r %%i in (.) do (
@echo %%i
for %%j in (%%i\*.*) do (
@echo %%~nj%%~xj
))
Автор: Iacoyn
Дата сообщения: 12.10.2010 09:55
Народ, как с помощью bat файла менять строку известной длины в xml файле?
Нужно для двух задач:
1 Всем известный Kerio winroute.cfg
нужно менять например
TW311-GQ49Y на что-нибудь такое же. Значение может быть разным, но той же структуры.
<config>
<table name="License">
<variable name="TrialId">TW311-GQ49Y</variable>
</table>
2 Skype
нужно менять/создавать в папке настроек пользователя в файле shared.xml
следующее
<Connection>
<DisablePort80>1</DisablePort80>
<DisableUPnP>1</DisableUPnP>
<ListeningPort>8888</ListeningPort>
<Port>8888</Port>
</Connection>
причём между этими параметрами могут быть любые строки, а значение портов в данном файле Skype у каждого по умолчанию Random.
Для меня задача слишком тяжёлая
Автор: king_stiven
Дата сообщения: 12.10.2010 10:10
Maximus777

Код: mode con codepage select=1251 > nul
:begin
set /a sum+=1
if /i "%~d0\" neq "%cd%" (
cd ..
goto begin
)
setlocal enabledelayedexpansion
set blok=!sum!
setlocal DISABLEDELAYEDEXPANSION
for /f "usebackq tokens=*" %%d in (`dir "%~dp0"/o /s /b /a:d`) do (
for /f "tokens=%blok%* delims=\" %%e in ("%%d") do echo %%f
)
Автор: res2001
Дата сообщения: 12.10.2010 10:21
Maximus777

Цитата:
а хотелось бы так:


Код: @echo off
set p=%~dp0
call:ownerdir %p:~,-1%
echo %ownerdir%\%~n0%~x0
exit

:ownerdir
set ownerdir=%~n1%~x1
exit /b
Автор: Maximus777
Дата сообщения: 12.10.2010 10:25
king_stiven
спасибо. Работает. Блин, но мудрёно ...
Автор: king_stiven
Дата сообщения: 12.10.2010 10:32
Maximus777
упрощай, я выдрал свой пример из своей конкретной задачи
Автор: GORA2
Дата сообщения: 12.10.2010 12:08

Цитата:
но мудрёно ...


Код: @echo off
SetLocal enabledelayedexpansion
for %%i in (%CD%) do Set msc=%%~dpi
for /R %%i in (*.*) do (
    Set ti=%%i
    echo !ti:%msc%=!
)
Pause
Автор: Maximus777
Дата сообщения: 12.10.2010 12:29
GORA2
вот так уже красивее. Спасибо.
Автор: wolf0425
Дата сообщения: 12.10.2010 15:23
Iacoyn

Цитата:
нужно менять/создавать в папке настроек пользователя в файле shared.xml
следующее
<Connection>
<DisablePort80>1</DisablePort80>
<DisableUPnP>1</DisableUPnP>
<ListeningPort>8888</ListeningPort>
<Port>8888</Port>
</Connection>
для замены одного параметра:

Код: sed -r -i "/<Connection>/,/<\/Connection>/ s;(<DisablePort80>)[^<]*(</DisablePort80>);\11\2;gi" shared.xml
Автор: 01MDM
Дата сообщения: 12.10.2010 15:24
GORA2
Вариант не совсем надежен, не будет корректно работать если в названии будет "!"

Тоже вариант, но тоже не кошерный:

Код:
@echo off
setLocal

for %%i in ("%cd%") do set "curdir=%%~nxi"
subst z: "."
pushd z:
for /r %%i in (*) do echo %curdir%%%~pnxi
popd
subst z: /d

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Windows 7 Starter


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