Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Модерирует : gyra, Maz

Widok (19-11-2007 12:08): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

   

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 4
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
 
 
Старая версия первого сообщения

Всего записей: 11425 | Зарегистр. 12-10-2001 | Отправлено: 04:28 24-09-2002 | Исправлено: Elroir, 19:35 11-09-2007
Karlo Daddy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите, почему не работает вывод из файла count.txt, считывается 0 всегда, независимо
какое число там.
 
set  VARCOUNT=0
 set /a VARCOUNT < count.txt
  echo %VARCOUNT%
   set /a VARCOUNT=VARCOUNT + 1
    echo %VARCOUNT% > count.txt
 
 
пробывал в кавычки помещать  
set VARCOUNT "<count.txt"  
а если так  
set %VARCOUNT% <count.txt  
 
то много чего происходит непонятного.  
была нужда счетчик в файл записывать, до 300
 
 
 
 
Добавлено:
Da_Neil  
 Нужно перезагрузить ADSL-модем из командной строки. У него это делает через телнет. Соответственно, как автоматизировать заход через телнет и выдачу ему reboot?  
 ------------------------------------------------------------------------------------------------
   у каждого модема свои команды могут быть, в хелпе всегда можно найти команды.
reconnect
универсальная.
 
можно испрользовать команду windows
 
rasdial /d
rasdial названиеинетсоединения логин пароль
 
вначале disconnect, затем заново соединится.
 
если adsl роутер, то по другому, обращаясь к роутеру непосредственно.
 
 

Всего записей: 698 | Зарегистр. 13-12-2006 | Отправлено: 02:51 13-12-2006 | Исправлено: Karlo Daddy, 03:27 13-12-2006
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Karlo Daddy

Цитата:
set /a VARCOUNT < count.txt

set /p VARCOUNT=<count.txt

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 08:14 13-12-2006 | Исправлено: igor_andreev, 08:25 13-12-2006
d24pWorld

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Accessor и Elroir - премного вам благодарен... все работает отично! ))
 
если не против я подкину еще 1 проблемку:
- выполняются 2 командных файла вертят свое, но каждый из них при определенных условиях записывает в один и тот же файл свою строку...
- 1й пишет например: "xxx дата, время"
- 2й пишет "yyyy дата, время"
- при этом: 1й делает запись в том случае, если последняя запись xxx дата, время была сделана более 3 мин назад  
- аналогично для второго
 
... посильна данная роблемка?

Всего записей: 20 | Зарегистр. 23-11-2006 | Отправлено: 08:50 13-12-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
d24pWorld
А смысл писать в один файл?
 
Теоретически можно - но вот скорость выполнения батничков - будет такова, что оба начнут мешать друг другу
 
Может быть сбрасывать в разные
А потом раз в день анализировать оба файла и делать общий?

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 10:37 13-12-2006
Karlo Daddy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev, спасибо.
 
подскажите что такое токен?  
хотел научиться из даты имя файла делать, через цикл получается только.

Всего записей: 698 | Зарегистр. 13-12-2006 | Отправлено: 14:27 13-12-2006
Accessor



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Karlo Daddy
вот отрывок из хелпа по команде for

Всего записей: 2863 | Зарегистр. 31-10-2003 | Отправлено: 15:18 13-12-2006
d24pWorld

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel

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

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

Всего записей: 20 | Зарегистр. 23-11-2006 | Отправлено: 15:59 13-12-2006 | Исправлено: d24pWorld, 16:00 13-12-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
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

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:05 13-12-2006
Karlo Daddy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Accessor

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

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

Всего записей: 698 | Зарегистр. 13-12-2006 | Отправлено: 17:11 13-12-2006
Accessor



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Karlo Daddy

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

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

Всего записей: 2863 | Зарегистр. 31-10-2003 | Отправлено: 19:47 13-12-2006
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Karlo Daddy

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

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 22:42 13-12-2006
Karlo Daddy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Accessor и Elroir  спасибо, вникаю. Так бы хелп писали
 
и вот темное место,  

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

так же и в хелпе описано. Нельзя ли так же на картошке объяснить?
Я понял, что весь остаток, как есть и пойдет, ведь осаток он и есть остаток.
А если мы не применяем * ? Например, tokens=1,3 ?
то дополнительная переменная %%C не будет создана и мы будем иметь только
%%A  и  %%B а остаток ни куда не будет записываться или стремиться это сделать?
 
 
и второе, в хелпе указано, что
 
Цитата:
  Ключ tokens= позволяет извлечь  из одной строки файла до 26 подстрок,
 
правильно ли я понял, что  в вышеприведенном примере мы извлекаем 3 подстроки,
а 26 это tokens=1,3,5-7, 27,33  ... и так 26 номеров по колличеству ?
Должен ли я указывать перевод строки ? ИЛи этот оператор только одну строку считывает, какой бы длины она не была?
 
Еще раз спасибо, пойду напишу чего. Опробую полученые знания.

Всего записей: 698 | Зарегистр. 13-12-2006 | Отправлено: 00:53 14-12-2006
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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 возьмет строку не до конца, а до точки с запятой.  
 

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 01:24 14-12-2006 | Исправлено: Elroir, 01:26 14-12-2006
Karlo Daddy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir,спасибо.
 
А вот мне насчет алфавита стало стыдно.

Всего записей: 698 | Зарегистр. 13-12-2006 | Отправлено: 02:26 14-12-2006
d24pWorld

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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_дата_время" удаляются и заменяются на текущие
 
... не слишком намудрил?

Всего записей: 20 | Зарегистр. 23-11-2006 | Отправлено: 09:12 14-12-2006 | Исправлено: d24pWorld, 09:53 14-12-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
d24pWorld
Если файлик большой (2-3 мб и более) то лучше написать программу на С, Паскале и т.д.
которой передаешь, типа
Logger.exe Log.txt xxx %Date% %Time%  
 
Ибо перебор строк в батничке идет достаточно медленно и в указанные 3 минуты не будет укладываться
 
Есть еще вариант - создавать файлы-логи вида
XXX_dd.mm.yyyy_hh_mm_ss.txt и отдельным потоком (через планировщик) добавлять их в основной лог

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 09:55 14-12-2006
d24pWorld

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
 
файл большим не будет ( в иделе 2-4 строки в день - проверка нужна именно для этого и именно по такому принципу
 
поможешь?

Всего записей: 20 | Зарегистр. 23-11-2006 | Отправлено: 10:16 14-12-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
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
)
 

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

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 13:11 14-12-2006
Solovey99

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди!! памагите написать батник!! я совсем не програмер(
Задача такая:
нужно написать батник чтобы он запускал WINRAR и архивировал определённую папку на диске. И чтоб в имени архива стояла дата создания.

Всего записей: 2 | Зарегистр. 14-12-2006 | Отправлено: 17:47 14-12-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Solovey99

Код:
@Echo Off
rar a Archive_CD -r -ag_YYYY-DD-MM F:\Work\Install\CD\

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:59 14-12-2006
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (19-11-2007 12:08): лимит страниц. продолжаем здесь


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru