Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd)

Автор: KapralBel
Дата сообщения: 13.12.2006 09:37
d24pWorld
А смысл писать в один файл?

Теоретически можно - но вот скорость выполнения батничков - будет такова, что оба начнут мешать друг другу

Может быть сбрасывать в разные
А потом раз в день анализировать оба файла и делать общий?
Автор: Karlo Daddy
Дата сообщения: 13.12.2006 13:27
igor_andreev, спасибо.

подскажите что такое токен?
хотел научиться из даты имя файла делать, через цикл получается только.
Автор: Accessor
Дата сообщения: 13.12.2006 14:18
Karlo Daddy
вот [more=отрывок]
tokens=x,y,m-n - определение номеров подстрок, выделяемых из каждой
строки файла и передаваемых для выполнения в тело
цикла. При использовании этого ключа создаются
дополнительные переменные. Формат m-n представляет
собой диапазон подстрок с номерами от m по n. Если
последний символ в строке tokens= является
звездочкой, создается дополнительная переменная,
значением которой будет весь оставшийся текст в
строке после обработки последней подстроки.[/more] из хелпа по команде for
Автор: d24pWorld
Дата сообщения: 13.12.2006 14:59
KapralBel

Цитата:
А смысл писать в один файл?

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

.... помогите с проблемой 3мя постами выше
Автор: KapralBel
Дата сообщения: 13.12.2006 16:05
d24pWorld
Алгоритм
Батник 1
1. Что-то делаешь
2. При отсутствии файла bat2.tmp - Кидаешь в лог
3. Создаешь файлик bat1.tmp
4. ждешь три минуты (Sleep 180)
5. Удаляешь файлик bat1.tmp

Батник 2
1. Что-то делаешь
2. При отсутствии файла bat1.tmp - Кидаешь в лог
3. Создаешь файлик bat2.tmp
4. ждешь три минуты (Sleep 180)
5. Удаляешь файлик bat2.tmp
Автор: Karlo Daddy
Дата сообщения: 13.12.2006 16:11
Accessor

Цитата:
вот отрывок из хелпа по команде for


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

Автор: Accessor
Дата сообщения: 13.12.2006 18:47
Karlo Daddy

Цитата:
думал по значению слова токен поймаю верную мысль

ну, короче, токены - это части строки, которыми ты можешь оперировать, используя буквы, которые ты подставил в оператор токен, так ясно?
Автор: Elroir
Дата сообщения: 13.12.2006 21:42
Karlo Daddy

Цитата:
подскажите что такое токен?

Рассмотрим на примере:
У нас есть некая длинная строчка, предположим "хотел научиться из даты имя файла делать". Чтобы разложить ее на токены(части), надо дать определение разделителя (delimiter) - то есть какой символ или символы будут отделять один токен от другого. По умолчанию, разделителем является символ пробела, так что нашими токенами будут:хотел,научиться,из,даты,имя,файла,делать. Если мы возьмем в качестве разделителя букву "т", то токены будут следующими:хо,ел научи,ься из да,ы имя файла дела,ь. Можно определить сразу несколько разделителей и тогда строка будет делится на части при любом определенном символе.
Перейдем к батнику:
for /f "tokens=1,3* delims=, " %%A in ("я строка, которую надо разделить") do echo %%a %%b %%c
здесь, разделителями являются запятая и пробел - "delims=, "
tokens=1,3* - мы хотим взять первый токен, третий и все, что идет за ним до конца строки (символ *). То есть в переменной %%А будет слово "я", в переменной %%B будет слово "которую", а в переменной %%C будет "надо разделить". Обрати внимание, что при использовании символа "*", в последнюю переменную подставляется остаток строки как есть - вместе с разделителями.
Автор: Karlo Daddy
Дата сообщения: 13.12.2006 23:53
Accessor и Elroir спасибо, вникаю. Так бы хелп писали

и вот темное место,

Цитата:
Обрати внимание, что при использовании символа "*", в последнюю переменную подставляется остаток строки как есть - вместе с разделителями.

так же и в хелпе описано. Нельзя ли так же на картошке объяснить?
Я понял, что весь остаток, как есть и пойдет, ведь осаток он и есть остаток.
А если мы не применяем * ? Например, tokens=1,3 ?
то дополнительная переменная %%C не будет создана и мы будем иметь только
%%A и %%B а остаток ни куда не будет записываться или стремиться это сделать?


и второе, в хелпе указано, что

Цитата:
Ключ tokens= позволяет извлечь из одной строки файла до 26 подстрок,

правильно ли я понял, что в вышеприведенном примере мы извлекаем 3 подстроки,
а 26 это tokens=1,3,5-7, 27,33 ... и так 26 номеров по колличеству ?
Должен ли я указывать перевод строки ? ИЛи этот оператор только одну строку считывает, какой бы длины она не была?

Еще раз спасибо, пойду напишу чего. Опробую полученые знания.
Автор: Elroir
Дата сообщения: 14.12.2006 00:24
Karlo Daddy

Цитата:
А если мы не применяем * ? Например, tokens=1,3 ?
то дополнительная переменная %%C не будет создана и мы будем иметь только
%%A и %%B а остаток ни куда не будет записываться или стремиться это сделать?

Именно так. Не будет записываться.

Цитата:
правильно ли я понял, что в вышеприведенном примере мы извлекаем 3 подстроки,
а 26 это tokens=1,3,5-7, 27,33 ... и так 26 номеров по колличеству ?

Да. Число 26 - это просто количество букв в английском алфавите. Ты же определяешь переменные с помощью букв: %%а, %%b, ... %%y, %%z.

Цитата:
Должен ли я указывать перевод строки ? ИЛи этот оператор только одну строку считывает, какой бы длины она не была?

Не должен - for считывает одну строку за раз до конца. Ты можешь добавить дополнительный символ(ы) конца строки, с помощью команды eol=что-то. То есть, если установлено eol=; и в строке есть этото символ, то for возьмет строку не до конца, а до точки с запятой.

Автор: Karlo Daddy
Дата сообщения: 14.12.2006 01:26
Elroir,спасибо.

А вот мне насчет алфавита стало стыдно.
Автор: d24pWorld
Дата сообщения: 14.12.2006 08:12
Accessor, KapralBel
... возможно ли реализовать такое?
- необходимо записать в файл (log.txt) 2 строки, одна ниже другой..
1я "xxx_дата_время" (дата и время текущие системные, а xxx и yyy некоторые строки)
2я "yyy_дата_время"
- получается файл типа:
xxx_01.01.2006_18:07
yyy_01.01.2006_18:08
. . .
xxx_03.01.2006_10:07
yyy_03.01.2006_10:07
xxx_03.01.2006_10:15
yyy_03.01.2006_10:16
при этом при записи происходит проверка между записывамой строкой "xxx_дата_время" и последней анологичной записью в файле (по идее это всегда будет предпоследняя строка файле), если разница между ними составляет менее 3х мин то последние 2 записи "xxx_дата_время" и "yyy_дата_время" удаляются и заменяются на текущие

... не слишком намудрил?
Автор: KapralBel
Дата сообщения: 14.12.2006 08:55
d24pWorld
Если файлик большой (2-3 мб и более) то лучше написать программу на С, Паскале и т.д.
которой передаешь, типа
Logger.exe Log.txt xxx %Date% %Time%

Ибо перебор строк в батничке идет достаточно медленно и в указанные 3 минуты не будет укладываться

Есть еще вариант - создавать файлы-логи вида
XXX_dd.mm.yyyy_hh_mm_ss.txt и отдельным потоком (через планировщик) добавлять их в основной лог
Автор: d24pWorld
Дата сообщения: 14.12.2006 09:16
KapralBel

файл большим не будет ( в иделе 2-4 строки в день - проверка нужна именно для этого и именно по такому принципу

поможешь?
Автор: KapralBel
Дата сообщения: 14.12.2006 12:11
d24pWorld

Код: @Echo Off
Set dtTimeNow=%Time%
Set dtTimeNow=%dtTimeNow:~0,8%
Set dtDateNow=%Date%
Set dtTimeLast=%dtTimeNow%

For /F "tokens=1-3 delims=_" %%a In (Log.txt) Do Set dtTimeLast=%%c
Set dth=%dtTimeLast:~0,2%
Set dtm=%dtTimeLast:~3,2%
Set dts=%dtTimeLast:~6,2%
If %dtm%==08 Set dtm=8
If %dtm%==09 Set dtm=9
If %dth%==08 Set dtm=8
If %dth%==09 Set dtm=9
Set /A dtm=%dtm%+3
If /i %dtm% GEQ 60 (
Set /A dtm=%dtm%-60
Set /A dth=%dth%+1
)
Set dtm=0%dtm%
set dtm=%dtm:~-2%
Set dth=0%dth%
set dth=%dth:~-2%
Set dtTimeNew=%dth%:%dtm%:%dts%
If %dtTimeNew% GEQ %dtTimeNow% (
Echo Delete
) Else (
Echo 111_%dtDateNow%_%dtTimeNow% >>Log.txt
)
Автор: Solovey99
Дата сообщения: 14.12.2006 16:47
Люди!! памагите написать батник!! я совсем не програмер(
Задача такая:
нужно написать батник чтобы он запускал WINRAR и архивировал определённую папку на диске. И чтоб в имени архива стояла дата создания.
Автор: KapralBel
Дата сообщения: 14.12.2006 16:59
Solovey99

Код: @Echo Off
rar a Archive_CD -r -ag_YYYY-DD-MM F:\Work\Install\CD\
Автор: Solovey99
Дата сообщения: 14.12.2006 17:17
спасибо огромное!
Автор: d24pWorld
Дата сообщения: 15.12.2006 07:04
Простите за глупый вопрос:
- переменной a присвоить значение из файла a.txt
Автор: KapralBel
Дата сообщения: 15.12.2006 08:47
d24pWorld
Set /p a= <a.txt
Автор: TAILORD
Дата сообщения: 16.12.2006 19:54
Сделал батник для пакетной установки обновлении и там есть строки описания каждого обновления. Типа:
ECHO KB898461 27.06.2005 устанавливает постоянную копию установщика пакетов
start /wait .\WindowsXP-KB898461-x86-RUS.exe /Q /O /N /Z
Так из описания русские буквы не коректно отображаются в командной строке. Как это исправить? Спасибо большое заранее.
Автор: Elroir
Дата сообщения: 16.12.2006 20:44
TAILORD
В начале батника, напиши:

Код:
chcp 1251>nul
Автор: mich76
Дата сообщения: 19.12.2006 11:22
простите за глупый вопрос, но как работать с результатом команды ?
Например в батнике я запустил compname -d которая вывела имя нетбиос компа. теперь мне нужно это имя сравнить на легитивность со строковой переменной.
Автор: KapralBel
Дата сообщения: 19.12.2006 11:31
mich76
В данном конкретном случае все гораздо проще
есть встроенная переменная %ComputerName% - которая и принимает значение имени компа
Автор: mich76
Дата сообщения: 19.12.2006 11:38
точно, этоу меня ум за разум зашел ))))
Сибки огромное!!!
Автор: F0rward
Дата сообщения: 22.12.2006 10:09
господа нужно поставить на сутки пинг некого ip и собрать в файлик статистику ответов - сходу все просто пишем ping 127.0.0.1 > 1.txt но проблема в том что команда не выводит время пинга, а надо знать когда были задержки или пропадания пингов.
Есть идеи?
Автор: Accessor
Дата сообщения: 22.12.2006 10:25
F0rward
в своем батнике перед пингом добавь строку
echo %time% >> 1.txt
и будет тебе щясьте
да, кстати, в пинге ты должен писать не один > а два >>, иначе каждый раз твой текстовик будет перезаписываться новым.
Автор: art569
Дата сообщения: 22.12.2006 14:38
F0rward

Код: @echo off
set ip=192.168.200.1
:start
ping %ip%
if errorlevel 1 echo %time% -- %ip% недоступен >>error
goto start
Автор: stalker0
Дата сообщения: 25.12.2006 04:11
Вопрос простой: подскажите или направьте куда :

Как ссылкой, бат-файлом (чем-угодно, лишь бы одним движением)

запустить процедуру выключения компьютера (ту самую: Пуск/Выключение/Выключение) ?
Автор: tolyn77
Дата сообщения: 25.12.2006 09:39
stalker0
делай батник с содержимым

Код:
@echo выключение
C:\WINDOWS\RUNDLL.EXE user.exe,exitwindows

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879

Предыдущая тема: Problemi s zagruzkoy XP!


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