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

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

Модерирует : KLASS, IFkO

vu1tur (14-11-2006 16:59): http://forum.ru-board.com/topic.cgi?forum=62&topic=9040  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задачи на bat-файлах
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Набор GNU утилит для win32
· Встроенный справочник по командам: hh ntcmds.chm
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
 
Готовые решения и частые вопросы:
· Создание листинга директорий на примере создания плейлиста
· Разименовывание переменных
· Переименовывание файлов по дате создания
· Запуск сетевого подключения
· Запуск bat файлов как сервис
· Пример выполнения команд по результату команды ping
· Использование даты на день раньше чем сегодня
 
Невозможности — что нельзя сделать с помощью командных файлов:
· изменть конфигурацию IP на удаленной машине (без помощи rcmd.exe) [добавил ALEF]
 
 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Старая версия первого сообщения

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 22:58 18-11-2005 | Исправлено: Elroir, 05:50 11-11-2006
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2 abz
 2 ViSiToR
 
Спасибо за подсказ.
Получилось.
 

Код:
 
@ECHO OFF
 
for /f %%I in ('cd') do (
    dir /b *.mp3 >> %%~nI.lst
    dir /b *.mp3 >> %%~nI.m3u
)    
 

 
Странно почему не надо использовать useback.
 
ЗЫ.
На *.lst в FAR'е повесил mpg123.exe, чтоб играл в фоне.  
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 01:33 11-08-2006
01MDM



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

Код:
 
 for /f "delims=\" %%I in ('cd') do ...
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:07 11-08-2006
tim87

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет!
Задача следующая.
 
Есть две программы, test.exe и server.exe. Я хочу запустить их в конвейере и проверить код возврата КАЖДОЙ из них. Вариант ниже не проходит, как быть?
 
(test.exe || echo test.exe failed) | server.exe || echo server.exe failed

Всего записей: 2 | Зарегистр. 11-08-2006 | Отправлено: 12:18 11-08-2006 | Исправлено: tim87, 12:46 11-08-2006
sonic2



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так никто не скажет как из переменной  
откинуть последние 10 символов и передать в другой батник ?

Всего записей: 17 | Зарегистр. 28-07-2006 | Отправлено: 20:50 11-08-2006
Kirillhome



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
sonic2
Например, так:
 
set my_do=%1%
SET my_posle=%my_do:~0,-10%
 
 
т.е. переменной my_do присваиваем первый параметр, а потом берем оттуда всё, кроме последних 10 символов...

Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 21:01 11-08-2006 | Исправлено: Kirillhome, 21:02 11-08-2006
hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть файл (например, text.txt).
Надо заменить в этом файле все подстроки TEST на ****
Как реализовать?

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 22:38 12-08-2006
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Народ, может кто-то плиз помочь:
 
Нужно сравнить дату изминения файла в сети (по сссыкле), с указанной датой, и если дата изминения файла, является ранней чем указанная, то что-то должно делаться, если дата является поздней чем указанная (т.е файл был изменён позже чем указанная дата), то должно делаться что-то другое ... можно такое реализовать на батнике? если да, то как?

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 23:35 12-08-2006
GarEx

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
Подскажите, плз, как сделать, чтобы созданная вручную и запущенная служба постоянно возвращала параметр (0 или 1). У меня ко такой:
 
wnld  
timeout /T 2 /nobreak
set T=1
pslist | find "F1Download" > NUL  
if %errorlevel%==1 goto Dwnld
if %errorlevel%==0 set T=0
 
Но не работает. Мне надо, чтобы когда служба работает, она постоянно выдывала значение 0 или 1. В зависимости от того запущен процесс или нет. Нужно его считывать непосредственно в windows. Т.е. служба работает, а я в ком. строке отслеживаю значение Т и в зависимости от него решается, запускать ли следующий процесс или нет.

Всего записей: 16 | Зарегистр. 03-08-2006 | Отправлено: 15:57 13-08-2006
KapralBel



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

Код:
@Echo Off
SC Queryex Alerter |Find /i "state    " >Temp.srv
Find "4" Temp.Srv  
If ErrorLevel 1 GoTo  :NotRun
If ErrorLevel 0 GoTo  :Run
 

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

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

Всего записей: 16 | Зарегистр. 03-08-2006 | Отправлено: 11:05 14-08-2006
hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А на счет замены строк в файле ни кто не знает?

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 11:38 14-08-2006
ALEF



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
hacsoft
munge.exe (по-моему она из Resource Kit)

Всего записей: 1002 | Зарегистр. 03-11-2003 | Отправлено: 15:27 14-08-2006 | Исправлено: ALEF, 15:47 14-08-2006
Refugee

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hacsoft
%windir%\Application Compatibility Scripts\acsr.exe
http://support.microsoft.com/kb/187627/en-us

Всего записей: 513 | Зарегистр. 31-03-2004 | Отправлено: 20:46 14-08-2006
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
hacsoft
МАЛЕНЬКИЙ ликбез по обработке строк и текстовых файлов, а то что-то много вопросов
На сначала ПРЕДУПРЕЖДЕНИЕ:

Командный процессор имеет весьма ограниченные возможности по обработке содержимого текстовых файлов. Все его средства ореентированы в первую очередь на обработку различных системных текстовых файлов (например логов) с чёткой и простой структурой строк. На ПРОИЗВОЛЬНЫХ текстовых файлах, содержащих специальные символы (те же кавычки, например) процессор легко обламается. Могут возникнуть проблемы и с национальными кодовыми таблицами.
И это всё только для линейки NT - NT4, 2000, XP, 2003... (NT4 с ограничениями). Командный процессор для Windows9x/ME не имеет даже этих возможностей.

1. Основная команда для обработки текстовых файлов: for /f
Напрмер:

Код:
 
for /f "delims=" %%s in (aaa.txt) do call :sss "%%s"
goto:eof
:sss
:: Сдесь обрабатывается строка из файла
echo %~1
 

Пояснения:
- delims нужен, что бы команда не обрабатывала разделители токенов в строке.
- обработка осуществляется в подпрограмме, начинающейся с метки sss, ей передаётся один параметр в кавычках (строка).
- Параметры в подпрограмму передаются, как в батник. В самой подпрограмме они также нумеруются %1, %2 и т.д. %0 - имя подпрограммы. Для параметров работает и команда shift.
- Вместо вызова подпрограммы через call, можно объеденить несколько команд круглыми скобками.
Настоятельно рекомендую почитать help. Как ntcmds.chm, так и то, что выдают команды с ключём /?
Команда FOR имеет достаточно много параметров, описание которых не входит в мою задачу. Читайте хелп.
 
2. Для выделения части строки, записаной в переменную, используются конструкция вида

Код:
 
%var:~n,m%
%var:~n,-m%
%var:~n%
 

Данная конструкция выделяет m символов строки из переменной var, начиная с символа n. Нумерация символов начинается с нуля. Если m отрицательная, отбрасывается соответсвующее количество символов с конца строки. Если m отсутствует, выделяется строка, начиная с символа n до конца строки. Если n+m больше, чем есть символов, также выделяется строка, начиная с символа n до конца строки.
Примеры:

Код:
 
set b=1234567890
echo [%b:~0,5%]
echo [%b:~0,-2%]
echo [%b:~2%]
echo [%b:~4,20%]
 

 
3. Для замены в строке используюется конструкция

Код:
 
%var:str1=str2%
%var:str=%
 

Данная конструкция производит замену всех последовательностей str1 на str2 в переменной var, либо производит удаление последовательности символов, если str2 не задана.
Примеры:

Код:
 
set a=aaasssdddfffaaasssdddfff
echo [%a:aaa=--%]
echo [%a:sss=%]
 

 
4. Для проверки, содержит ли переменная какую-либо последовательность символов, предлагаю, на вскидку, два способа.
4.1. Используем конструкцию замены (удаления). Пример:

Код:
 
if "%a:uiop=%" == "%a%" echo Строка не содержит uiop
if not "%a:asdf=%" == "%a%" echo Строка содержит asdf
 

4.2. Используем штатную команду find как фильтр. Примеры:

Код:
 
echo %a% | find /i "asdf" > nul && echo Строка содержит asdf
echo %a% | find /i "uiop" > nul || echo Строка не содержит uiop
 


Всего записей: 3177 | Зарегистр. 09-02-2003 | Отправлено: 00:36 15-08-2006 | Исправлено: Smitis, 20:23 20-08-2006
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Smitis
А теперь можешь пожалуйста привести пример батника, который будет в файле, например test.txt, заменять состав определённой строчки на что-то другое.
Т.е, вот к примеру состав файла test.txt:
 

  • я строка с неважным текстом...
  • а я другая строка, тоже с неважным текстом...
  • а я строка, с очень важным текстом... замените меня пожалуйста на что-то инное (например, на «я изменённая строка»)

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

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 01:34 15-08-2006 | Исправлено: ViSiToR, 01:39 15-08-2006
vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ViSiToR
А критично это делать средствами _только_ станартных команд? Есть замечательные утилитки sed, grep и пр.

----------
I am free of all prejudice. I hate everyone equally.

Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 01:52 15-08-2006
ViSiToR



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

Цитата:
А критично это делать средствами _только_ станартных команд?

 
Это не критично, просто хочю научится делать это именно средствами одного лишь бтника.. я могу реализовать это и совсем инными средствами, но хочю именно батниками
 
Добавлено:
Может кто знает, как делать поиск опредллённого слова в файле, но само слово поиска, должно быть кириллицей...
Например, вот такая команда, найдёт строчку содержащую слова «Hello world», в файле test.tmp:
 

Код:
find /i /c "Hello World" "test.tmp" | find /c "": 0"" > f.tmp
for /f %%i in (f.tmp) do if %%i==0 echo ok > ok.tmp
del /q f.tmp & exit

 
И если слова были найдены, то создастся файл ok.tmp, а если нет, то, ничего не произойдёт...
Так вот, я хотел бы точно также, но чтобы поиск осуществлялся по словам кириллицы. Я пробовал этим же способом подставив кирилличиские символы, но в том файле, в котором мне нужно осуществить поиск, это не действует

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 01:59 15-08-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ViSiToR
Если тебе надо кириллицу
Либо создавай батничек в кодировке 866, а не 1251
Либо в начале батничка давай команду CHCP 1251

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 10:22 15-08-2006
xlebopezka

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Создаю CMD файл, в нем одна команда shutdown -s -f.
Если запускаю файл, в консоли получается примерно следующее
 
c:\...>shutdown -s -f
c:\...>shutdown -s -f
c:\...>shutdown -s -f
.....
 
и так добавляется непрерывно, хотя если эту же команду написать в консоли все корректно работает.

Всего записей: 93 | Зарегистр. 06-07-2005 | Отправлено: 11:50 15-08-2006
Ruslan FM

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

Цитата:
Создаю CMD файл, в нем одна команда shutdown -s -f.
Если запускаю файл, в консоли получается примерно следующее
 
c:\...>shutdown -s -f
c:\...>shutdown -s -f
c:\...>shutdown -s -f
 

назови его иначе не  shutdown
или запускай shutdown.bat  или shutdown.cmd
замени shutdown -s -f на shutdown.exe -s -f

Всего записей: 69 | Зарегистр. 10-11-2005 | Отправлено: 13:32 15-08-2006 | Исправлено: Ruslan FM, 13:38 15-08-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

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах
vu1tur (14-11-2006 16:59): http://forum.ru-board.com/topic.cgi?forum=62&topic=9040


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru