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

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

Автор: BVV63
Дата сообщения: 29.06.2010 08:03
res2001
У, здорово! Использовал второй способ. Опробовал в своём батнике, с которым боролся, действительно всё заработало.

Добавлено:
Почему-то в описании команды Call нет "Call Set".
Автор: res2001
Дата сообщения: 29.06.2010 08:30
BVV63
Нет, но работает.

Добавлено:
Можно с call использовать большинство внутренних команд. Разве что goto, наверное, нельзя.
Автор: mugil_cephalus
Дата сообщения: 29.06.2010 11:05
res2001

Цитата:
С rar примерно так можно:

Код:1>ok.log 2>err.log rar.exe t file.rar
for %%f in (err.log) do if "%%~zf" neq "0" echo Ошибка архива

http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=1940#16
и след. пост


хотя нет, ремарка снята, с neq и такая конструкция пройдет
Автор: res2001
Дата сообщения: 29.06.2010 11:18
mugil_cephalus
ты прав, спс., исправляюсь:

bugsbot

Код: 1>ok.log 2>err.log rar.exe t file.rar
for %%f in (err.log) do if %%~zf neq 0 echo Ошибка архива
Автор: mugil_cephalus
Дата сообщения: 29.06.2010 11:33
res2001

Цитата:
ты прав, спс., исправляюсь:

я думаю прокатит и первый вариант со строковым сравнением, т.к. любой символ "не ноль" дает логическое true по несхожести строк ( вот если бы вычислялось "больше" , "меньше" , etc - тогда да.... )
p.s.
обжегшись на молоке - на воду дую...
Автор: res2001
Дата сообщения: 29.06.2010 11:50
mugil_cephalus
да, в этом примере с "не равно" прокатит и в текстовом виде. Просто я тут челу ссылку дал в параллельном топике на этот пост, а у него как раз надо на "больше" проверять. Потому и поправился.
Автор: mugil_cephalus
Дата сообщения: 29.06.2010 11:54
BVV63

Цитата:
Опробовал в своём батнике, с которым боролся,

как дон кихот

Цитата:
Занятный батник, но я не понял, какой смысл из него должен извлечь.

смысл в проверочных командах ( написаны в верхнем регистре ) - а то может цикловый итератор подставляет в оператор не ту переменную, которую задумывалось при написаниии скрипта
типа

Код: echo.%date%
rem day cutting
set "var=%date:~0,3%"
echo._%var%_
pause
Автор: BVV63
Дата сообщения: 29.06.2010 12:06
mugil_cephalus
OK. Приму к сведению. Буду использовать, если возникнут затруднения. Хотя батник-отладчик тоже попробую для себя накатать. Тот ведь тоже сможет после каждой строки выводить текущие значения переменных, ErrorLevel и т. п.

Добавлено:

Цитата:
закоментируй и посмотри результат

А вот это бы никак не сказалось . У меня англоязычная система и в батнике я предварительно слово "настройка" заменил на "Configuration" .
Автор: Altus
Дата сообщения: 29.06.2010 12:21
res2001

Цитата:
Что ты хочешь дальше с этой датой делать?

Переименовывать логи, которые за собой оставляет некая софтинка. Логи она кладёт всегда в одно место и всегда с одним именем. И никаких настроек логов в ней нет. Кто писал неизвестно, исходников нет. Планета шелезяка короче говоря.
Эти логи, иногда и полугодовалой давности, надо просматривать.
Сейчас они именуются по порядку от нуля. Хочется находить логи по дате, а не тыкать наугад.
Можно конечно на фридос какойнито поменять, и там это всё решить, но с совместимостью экспериментировать надо.
Автор: res2001
Дата сообщения: 29.06.2010 12:28
BVV63

Цитата:
Хотя батник-отладчик тоже попробую для себя накатать.

Как ты в батнике-отладчике собираешься, например, циклы отлаживать, или как ты собираешься извлекать из отлаживаемого батника имена переменных?
Видимо надо будет отлаживаемый батник преобразовывать в другой, в который добавлять команды для отладки, типа печати значений локальных переменных, печати текущей выполняемой строки, и паузу, для реализации пошаговой трассировки . И уже его выполнять.
Реально, но какой смысл. У тебя будет куча информации выдаваться, которую потом придется анализировать. Проще в отлаживаемый батник руками вставить в нужное место команды отладки, как предлагает mugil_cephalus.
Автор: mugil_cephalus
Дата сообщения: 29.06.2010 12:33
BVV63
res2001

Цитата:
или как ты собираешься извлекать из отлаживаемого батника имена переменных?

а если там будет setlocal - он их вообще не вытащит
p.s.
и %errorlevel% должна стоять сразу за нужной командой
Автор: wolf0425
Дата сообщения: 29.06.2010 12:39

Цитата:
Переименовывать логи, которые за собой оставляет некая софтинка. Логи она кладёт всегда в одно место и всегда с одним именем. И никаких настроек логов в ней нет. Кто писал неизвестно, исходников нет. Планета шелезяка короче говоря.
а нафига же всё это под ДОСом то переименовывать?
ты эти логи все равно же по сети смотришь - вот и запусти переименовывание на какой-то XP/2k3/...
в смысле - приложи туда .cmd который при нужде переименует все нумерованные логи в нормальные имена в соответствии с датой модификации файлов.
Автор: mugil_cephalus
Дата сообщения: 29.06.2010 12:41
BVV63
а если батник-отладчик сам буде с багами , как понять где ошибка ; имхо, ты усложняешь себе жизнь...
Автор: res2001
Дата сообщения: 29.06.2010 12:44
Altus
Как вариант - упаковывать этот лог в архив содержащий в названии дату.
arj это умеет.
arj u -h# 20
Потом можно распаковать архив в каталог с именем архива.
Автор: Engraf
Дата сообщения: 29.06.2010 13:02
Скажите, как задать символ " (двойные ковычки) в качестве разделителя строки в параметре delims= в цикле for /F ?
Варианты:
for /F "delims=^" tokens=1-3" %%A in (file.txt) do ...
и
for /F "delims=/" tokens=1-3" %%A in (file.txt) do ...
не сработали.
Говорит "Непредвиденное появление: tokens."
Автор: us0r
Дата сообщения: 29.06.2010 13:13
jek1976
Дефолтный профиль юзера весит 1мб...
Ну а батнег удаляющий всё при загрузке (delall.bat):

Код: @echo off
cls
cd %userprofile%
del /f /q *.*
Автор: res2001
Дата сообщения: 29.06.2010 14:02
Engraf

Цитата:
Скажите, как задать символ " (двойные ковычки) в качестве разделителя строки в параметре delims= в цикле for /F ?

Как это сделать не знаю, но вот так можно обойти:

Код: @echo off
setlocal enabledelayedexpansion
for /F "tokens=*" %%a in (file.txt) do (
    set aa=%%a
    set aa=!aa:"=@!
  for /F "delims=@ tokens=1,2" %%b in ("!aa!") do echo %%b %%c
)
Автор: Altus
Дата сообщения: 29.06.2010 14:03
wolf0425
Этот кусок копролита не подключен к сетке. Логи смотрят на нём же. Там и венды нет. Когда необходимо, подходит насяльника, быстро нажимает магическую комбинацию клавиш - и о чудо - рабочий процесс пошёл. Вокруг слышны непонятные голоса, то ли "аллах акбар", то ли "шайтан аднака". По окончании, тот же волшебник жмёт альтикс, программа завершается, батник переименовывает лог работы линии и задержек на ней, а голоса идут кушать свои национальные лепёшки до следующего аврала.
res2001
Спасибо. Про архиваторы то я и забыл. Потыкаюсь сегодня-завтра.
Автор: Engraf
Дата сообщения: 29.06.2010 14:06
res2001
Пойдет, спасибо!
Автор: wolf0425
Дата сообщения: 29.06.2010 15:13

Цитата:
Спасибо. Про архиваторы то я и забыл. Потыкаюсь сегодня-завтра.
мне все равно кажется, что создать или организовать создание мелкой утилитки,
которая печатает команду нужного формата,
перенаправить её вывод в файл и вызвать сгенеренный батник - будет сильно меньше возни, чем извращаться с подобным прикручиванием архиватора.
но может я чего не понимаю в задаче...
например не понимаю чем не нравятся просто имена по номеру - все равно же видны даты файлов в волковкоммандере. Или кому-то в ДОСе с голой космтроки нравится работать?
Автор: res2001
Дата сообщения: 29.06.2010 17:18
Вот у меня возникла задачка.
Пользуюсь The Bat для получения почты.
Возникла необходимость обработать вложенные файлы от определенных получателей, после обработки отправить письмо отправителю о результате обработки.
Сортировщик бата настроил, файл выгружаю, батник запускаю.
Все бы ничего, но как батнику узнать адрес отправителя и имя полученного файла?
В сортировщике есть возможность отправить письмо на STDIN запускаемого приложения.
Не соображу как в батнике обработать STDIN, хотя бы записать его в файл.
Автор: jek1976
Дата сообщения: 29.06.2010 17:50
us0r
Спасибо, но так мы поудаляем все!
А если в профиле есть юзеровские данные, которые еще не были синхронизированы? Они же тупо удалятся.
Вот мне бы надо вопрос с синхронизацией данных разрешить... Какие есть идеи?
Автор: us0r
Дата сообщения: 29.06.2010 17:58

Т.е. получается тебе надо сначала скинуть файлы на сервер а уже потом их килять?
Автор: jek1976
Дата сообщения: 29.06.2010 18:05

Цитата:
Т.е. получается тебе надо сначала скинуть файлы на сервер а уже потом их килять

Да нет, никаких серверов! Все должно происходить на локальной машине, причем даже если нет связи с сервером. По сути все должно быть ПРОЩЕ, и скрипт просто удаляет те профили, которые уже были синхронизированы. Я догадываюсь, что в папке с профилем должен быть некий признак, по которому можно определить, был он синхронизирован или нет...

Добавлено:

Цитата:
Т.е. получается тебе надо сначала скинуть файлы на сервер а уже потом их килять

Да нет, никаких серверов! Все должно происходить на локальной машине, причем даже если нет связи с сервером. По сути все должно быть ПРОЩЕ, и скрипт просто удаляет те профили, которые уже были синхронизированы. Я догадываюсь, что в папке с профилем должен быть некий признак, по которому можно определить, был он синхронизирован или нет...
Автор: us0r
Дата сообщения: 29.06.2010 18:10
Обрати внимение на mobsync.exe

Добавлено:
Так... Перечитал всё ещё раз...
ТЗ такое:
1) Проверяем сервак на доступность
2) Проверяем папку на предмет R/W
3) Узнаём какое файло на серваке не свежее
4) Обновляем его
5) Киляем профиль
PROFIT!!!
Правильно?
Автор: jek1976
Дата сообщения: 29.06.2010 19:15

Цитата:
1) Проверяем сервак на доступность

Первый вопрос - зачем? Мы же не должны полагаться на сервер.
Допустим, юзер вышел из системы вчера и профиль не синхронизировался (не было сети или доступа к домену). На следующий день домен стал доступным и юзер вновь вошел в свой профиль, но(!) ведь синхронизация произойдет только после завершения сеанса работы. А подчистку профилей лучше делать при загрузке Win, поэтому профили удалятся.
Автор: wolf0425
Дата сообщения: 29.06.2010 20:15
jek1976 а что в профиле синхронизируется то? в смысле - какие файлы/папки?
может тупо потереть остальные?
Автор: jek1976
Дата сообщения: 29.06.2010 22:00
Если я не ошибаюсь, то Applications Data, Desktop, My Documents, пользовательский куст и проч. Сверяется дата создания объектов и более новые из них - оставляются. Данные в Local Setings - остаются на лок. машине.

wolf0425
Если профиль потереть частично, то что будет?

Автор: BVV63
Дата сообщения: 30.06.2010 07:46
Приветствую всех. Подскажите, пожалуйста, существует ли способ настроить стандартный вывод так, чтобы игнорировались (отбрасывались) пустые строки? Фильтр "Find", насколько я понимаю, здесь не помошник.

Добавлено:
Ещё такой вопрос. В конструкции For /F... In (...) Do... ненужные строки сверху (если их число заведомо известно) нетрудно обрезать через "Skip". Если обрабатываемая строка одна, а за ней несколько ненужных, то избавиться от них можно через GoTo на метку за циклом (как мне здесь когда-то подсказали). А существует ли приём обработать несколько строк и проигнорировать оставшиеся? Ну, к примеру, 2 первые строки отбрасываются, 2 обрабатываются и 2 оставшиеся также отбрасываются (без применения "Find" - допустим, содержание строк неизвестно).
Автор: mugil_cephalus
Дата сообщения: 30.06.2010 08:01
BVV63

Цитата:
Ну, к примеру, 2 первые строки отбрасываются, 2 обрабатываются и 2 оставшиеся также отбрасываются (без применения "Find" - допустим, содержание строк неизвестно).

счетчик поставить

Код: set "cnt=0"
set /a cnt+=1

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


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