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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
morjov
С секундами не удалось
Сделал так - если уже такой файл при переименовывании есть - то в конце добавляется порядковый номер файла
2005_12_31_23_33-123.jpg
2005_12_31_23_33-124.jpg
2005_12_31_23_33-125.jpg

 

Код:
 
@Echo Off
Set f_Ext=jpg
Set f_Count=1
For %%a In (*.%f_Ext%) Do @Call :Rena %%a %%~ta
GoTo :EOF  
 
:Rena  
Set /a f_Count=%f_Count%+1
Set f_Name=%1
Set f_Date=%2
Set f_Time=%3
Set f_Day=%f_Date:~0,2%
Set f_Month=%f_Date:~3,2%
Set f_Year=%f_Date:~6,4%
Set f_Hour=%f_Time:~0,2%
Set f_Min=%f_Time:~3,2%
Set f_NewName=%f_Year%_%f_Month%_%f_Day%_%f_Hour%_%f_Min%
If Exist %f_NewName%.%f_Ext% Set f_NewName=%f_NewName%-%f_Count%
Ren %f_Name% %f_NewName%.%f_Ext%
GoTo :EOF  
 

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 20:36 10-12-2005
morjov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel, так тоже очень хорошо! СПАСИБО!
 
ПС. Ещё маленьки вопросик: Можно ли сделать в батнике какую-нибудь задержку (1-2 сек.), т.е. чтобы я мог запускать программы с задержкой.

Всего записей: 341 | Зарегистр. 05-01-2004 | Отправлено: 13:37 11-12-2005
hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
Странно, иногда бибикает через спикер, иногда через колонку. Не пойму от чего это зависит. Сделал так:

Код:
B8 07 0E CD 10 C3

Через прерываение 10h, тот же эффект...
 
morjov
Стандартного варианта задержки нет, был когда-то choice, с его помощью можно было задержку делать, но теперь его нет (а жал, чем он так не угодил).
Но можно делать так:

Код:
ping -n 11 -w 1000 127.0.0.1 > nul

Будет задержка на 10 сек. (за длительность отвечает число 11 - количество секунд задержки + 1).
Если на 2 сек., пиши так:

Код:
ping -n 3 -w 1000 127.0.0.1 > nul


Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 17:19 11-12-2005
Venchik

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Проветь, есть-ли пинг на айпи. Если есть, то скачать через NETBIOS 3 файла. Если копирование всех трех прошло успешно, то заменить ими 3 файла в папке Х, предварительно переместив заменяемые файлы в папку Y.
Все это надо сделать в свернутом окне...или лучше вообще без окна, если это возможно.
Это реальная задача по обновлению антивируса McAfee по сети из расшаренной папки. Очень удобно будет поставить такой батник в планировщик.

Всего записей: 808 | Зарегистр. 24-08-2005 | Отправлено: 17:39 11-12-2005
Smitis



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

Цитата:
был когда-то choice, с его помощью можно было задержку делать, но теперь его нет (а жал, чем он так не угодил).  

В вынь 2003 вернули  
А так он входил в reskit.
Только стал он 32-разрядным и сменил расширение на .exe

Всего записей: 3177 | Зарегистр. 09-02-2003 | Отправлено: 22:35 11-12-2005
igor_andreev

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

Цитата:
Странно, иногда бибикает через спикер, иногда через колонку.

Не знаю, сам не пользуюсь, у меня батники тихо, как мыши, работают. Это я привел слегка измененный пример из какого-то древнего досовского FAQ-а. Таких 16-битных полно на любом старом файлоотстойнике, их раньше, судя по всему пачками делали Вот еще один, тоже с файлом scr для debug, 1984 года выпуска _http://www.filegate.net/bfds/beep.zip (1Kb)

Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 22:57 11-12-2005 | Исправлено: igor_andreev, 23:09 11-12-2005
KapralBel



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

Код:
 
for /L %%b in (1,1,200) Do @Echo %%b >Nul
 

Вместо 200 поставь нужное значение

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну чего, в этом batch-языке есть for, if, goto, присваивания. Подключая сторонние программы, можно, так сказать, расширить язык, только зачем всё это нужно?

Всего записей: 75 | Зарегистр. 08-11-2005 | Отправлено: 16:35 12-12-2005
EZH



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

Цитата:
Ну чего, в этом batch-языке есть for, if, goto, присваивания. Подключая сторонние программы, можно, так сказать, расширить язык, только зачем всё это нужно?

Это риторический вопрос что ли? Всё это нужно как программируемое средство администрирования и автоматизации, которое всегда под рукой, когда нет готовых утилит, компиляторов и для тех кому кроме этого и не надо большего. Сейчас на смену BAT уже пришел WSH.

Всего записей: 1738 | Зарегистр. 02-09-2004 | Отправлено: 16:43 12-12-2005
seggah

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

Цитата:
Сейчас на смену BAT уже пришел WSH.
 
скорее Perl или Python )

Всего записей: 75 | Зарегистр. 08-11-2005 | Отправлено: 17:10 12-12-2005
EZH



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

Цитата:
скорее Perl или Python )  

Ну вот уж нет, мы говорим именно о  

Цитата:
программируемое средство администрирования и автоматизации, которое всегда под рукой, когда нет готовых утилит, компиляторов

Мы же не говорим о линухе, где perl и python могу быть в дистрибе, мы говорим о bat, о винде, где есть только то что с ней идет по умолчанию.  
 
А про то где больше возможностей и удобства предлагаю не распространяться, т.к. это будет бессмысленный флуд, при том на уровне религиозной веры.

Всего записей: 1738 | Зарегистр. 02-09-2004 | Отправлено: 17:29 12-12-2005
seggah

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так я тоже о виндах говорю. Тот же перл - если так нужно администрировать, скачал 10 мегов, и наслаждайся. Не в чистом же поле администрируешь. А обычному пользователю и так не сложно. В тех же никсах шел-языки появились только из-за того, что у них ничего кроме коммандной строки не было.
Просто сейчас учиться программировать в BAT'ах - каменный век, мое мнение, конечно.

Всего записей: 75 | Зарегистр. 08-11-2005 | Отправлено: 17:43 12-12-2005
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
EZH
Весьма согласен с этим суждением.
Но если смотреть по версиям виндовс - то там нет единого языка...
Ибо возможности command.com Win98 - и cmd.exe WinXP/2003 - весьма различаются, да и возможности wsh - очень различны для верий 98 и ХП (хотя можно обновить 98-й WSH версии 5.1 до версии 5.6).
В крайнем случае можно поставить .net с бесплатным С# от М$

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

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

Цитата:
только зачем всё это нужно?

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

Цитата:
сейчас учиться программировать в BAT'ах - каменный век

Во флейм с этим будь добр...

Цитата:
возможности command.com Win98 - и cmd.exe WinXP/2003 - весьма различаются

Я кстати тот батник, который определял переменные %DAY% %MONTH% %YEAR% исходя из региональных настроек - добил таки. Работает в NT/2000/XP/2003. Весит за семь килобайт, смотреть страшно. В общем, народ, не парьтесь с вычислениями дня-месяца-года, а делайте приблизительно так:

Код:
 

@ECHO OFF
 
:: убираем в переменной %date% точки(если 21.10.2005), слеши(если 21/10/2005)
:: дефисы(2005-10-21) и пробелы(если Fri 21.10.2005)
 
SET ARCHIVE_SUFFIX=%DATE%
 
SET ARCHIVE_SUFFIX=%ARCHIVE_SUFFIX:.=%
SET ARCHIVE_SUFFIX=%ARCHIVE_SUFFIX:/=%
SET ARCHIVE_SUFFIX=%ARCHIVE_SUFFIX:-=%
SET ARCHIVE_SUFFIX=%ARCHIVE_SUFFIX: =%
 
ARJ a MYARC_%ARCHIVE_SUFFIX%.ARJ *.*
ECHO. LA-LA-LA>MYTXT_%ARCHIVE_SUFFIX%.TXT

 

В большинстве случаев этого хватает за глаза

Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 20:38 12-12-2005 | Исправлено: igor_andreev, 21:16 12-12-2005
hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
seggah
bat есть по умолчанию, а Перла может не быть, кто знает, на какой машине придется работать. Но если уж говорить о том, что бы поставить что-то другое, то я бы точно Перл не выбрал, мое ИМХО, но это мертвый тупиковый язык с его нечитабельными конструкциями (просьба с bat не сравнивать, другая история).
Сорри за оффтоп, пора вернуться к теме!

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 20:54 12-12-2005
Death_INN

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Меня интересует батник, который будет подсчитывать время работы проги с точностью, как минимум, до секунд:
1. Запускаем счётчик
2. Запускаем прогу, например VirtualDubMod /r
3. Выводим время выполнения: часы:минуты:секунды.

Всего записей: 3013 | Зарегистр. 24-10-2002 | Отправлено: 23:05 12-12-2005
Ternik



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hacsoft
такая вот задача...
есть папка, в ней тыщща директорий, с разными именами, в каждой по сотне файлов, разных по именам.
задача:
создать строгую нумерическую иерархию папок и файлов. аля:
121321\bbb.txt
buka\ja.bmp
превратить в:
0001\0001.txt
0002\0002.bmp

Всего записей: 763 | Зарегистр. 25-09-2002 | Отправлено: 04:57 13-12-2005
hacsoft

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

Код:
rem (c) HACSoft, 2005.
:: ВНИМАНИЕ: скрипт переименовывает все файлы и папки в текущей папке и во всех ее подпапках!
@echo off
setlocal enabledelayedexpansion
cls
color 0c
echo All files will be renamed
pause
color
 
exit
 
:: Переименовываем папки:
set num=0
for /r %%d in (.) do (
    set folder!num!=%%d
    set /a num+=1
)
set /a num-=1
if %num% gtr 9 set prefix1=0
for /l %%i in (%num%,-1,1) do ren "!folder%%i!" %%i 2> nul
:: Переименовываем файлы:
:files
set num=0
for /f "tokens=*" %%f in ('dir /b /s') do (
    if not %%~nf==%~n0 (
        set /a num+=1
        echo %%f
        if not "%%~xf"=="" ren "%%f" !num!%%~xf 2> nul
    )
)

Для запуска удали команду exit.
В итоге каждая папка в качестве имени получит порядковый номер: 1, 2, ... И каждый файл тоже. Не советую экспериментировать со скриптом, т.к. если его исполнить, к примеру, в корне диска, то все файлы и папки на диске будут переименованы, восстановить все обратно крайне сложно...
 
Добавлено:
Death_INN
Собственно, описанная тобой схема - это уже есть алгоритм решения задачи. Вот только тут одна проблема, команда time /t выдает время с точностью до минут. Есть ли возможность считать время с точностью до секунд стандартными средствами cmd?
Если в задаче не критично использовать только стандартные средства cmd, то можно написать утилитку, которая будет выдавать время. Т.е. в месте с bat-файлом придется распространять и ее. Это допустимо в данной задаче?

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 20:47 13-12-2005
Ternik



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hacsoft
Рулишь чувак
спасибо за код, но вот сделай еще поправку на количество цифр в имени файлов плиз... чтобы было не 1,2,3 а 0001, 0002, 0003... 0777 и т.д.

Всего записей: 763 | Зарегистр. 25-09-2002 | Отправлено: 03:40 14-12-2005
Death_INN

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

Цитата:
Если в задаче не критично использовать только стандартные средства cmd, то можно написать утилитку, которая будет выдавать время. Т.е. в месте с bat-файлом придется распространять и ее. Это допустимо в данной задаче?

Допустимо. Главное, получить результат любым способом, если винда не позволяет это сделать стандартными средствами. Может через Avisynth-скрипты можно?
 
Ещё меня интересует задача сохранения из под винды таблицы разделов (MBR), загрузочной записи (BR) и настроек биоса. С первыми двумя задачами может справится debug, а вот чтобы считать данные из микросхемы нужно использовать порты.

Всего записей: 3013 | Зарегистр. 24-10-2002 | Отправлено: 08:45 14-12-2005
   

Страницы: 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