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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
0Vovan0
Вот блин, чушь!
Если из форума через буфер обмена копировать, то в конце каждой строки получается пробел Удали эти пробелы вручную в Блокноте. В итоге файл должен весить 453 байта. Тогда все работает.
 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать не правильно!!!

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 20:48 20-11-2005 | Исправлено: hacsoft, 21:08 20-11-2005
0Vovan0



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ура, зааботало!
 
А можно сделать так, чтобы оно не только общий плейлист выдавало, но и для каждой папки отдельно тоже! Плиз! Если не сложно!
И еще одно мааленькое плиз!
Можно не вводить имя файла вручную, а использовать для общего плейлиста "vol_all.m3u". а для каждой папки "vol_номерпапки.m3u"
 
Даже если не сделаешь, все равно спасибо!

Всего записей: 2374 | Зарегистр. 15-07-2005 | Отправлено: 00:28 21-11-2005 | Исправлено: 0Vovan0, 00:31 21-11-2005
hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот решение (создает во всех папках файл "All.m3u" - плейлист по данной папке, без подпапок):

Код:
rem mp3list.bat (c) HACSoft, 2005.
@echo off
echo Please wait...
mode con codepage select=1251 > nul
for /r %%d in (.) do (
    cd %%d
    if exist All.m3u del All.m3u
    for %%f in (*.mp3) do echo %%f >> All.m3u
)
mode con codepage select=866 > nul

Что касается других пожеланий: ни могу не предоставить Вам возможность реализовать это самим. Если возникнут вопросы по командам bat-файлов, введите в командной строке: "%windir%\help\ntcmds.chm" - там есть ответы на все вопросы.

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 20:07 21-11-2005 | Исправлено: hacsoft, 20:11 21-11-2005
0Vovan0



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

Цитата:
Вот решение (создает во всех папках файл "All.m3u" - плейлист по данной папке, без подпапок):

Сенкс
 

Цитата:
Что касается других пожеланий: ни могу не предоставить Вам возможность реализовать это самим. Если возникнут вопросы по командам bat-файлов, введите в командной строке: "%windir%\help\ntcmds.chm" - там есть ответы на все вопросы.

Кхм, спасибо!
Не подскажете пожалуйста что-нибудь поинтересней по командам - винда у меня англицкая,  и описание многих команд не очень понятно.

Всего записей: 2374 | Зарегистр. 15-07-2005 | Отправлено: 00:47 22-11-2005
ipmanyak



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

Всего записей: 12272 | Зарегистр. 10-12-2003 | Отправлено: 06:47 22-11-2005
hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
0Vovan0
Если справка "hh ntcmds.chm" у тебя англоязычная, то файлик "ntcmds.chm" на русском языке можно скачать в инете, он там точно есть, я его где-то видел...
Ага, вот, нашел:
http://e-sementsov.narod.ru/download.htm
Качай файл "ParamComString.chm".

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 08:50 22-11-2005
0Vovan0



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Большое спасибки!
И за справочник, и за сайтик интересный.

Всего записей: 2374 | Зарегистр. 15-07-2005 | Отправлено: 13:21 22-11-2005
DeADMoHAX



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
hacsoft
имел в виду, что если так создать m3u плейлист, все работать будет.

----------
dmlabs.ru || hackconnect.ru
Выгодно России – значит, хорошо. Не выгодно России – пошёл на хер.

Всего записей: 1367 | Зарегистр. 03-02-2005 | Отправлено: 10:16 25-11-2005
hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DeADMoHAX
Да, уже все сделано. С этой задачей разобрались.
Давайте еще задачи!

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

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hacsoft
Возможно ли с помощью батника создать ярлык к файлу?

Всего записей: 3972 | Зарегистр. 24-10-2002 | Отправлено: 09:49 28-11-2005
hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Death_INN
Да, возможно, ведь ярлык - это обычный файл *.lnk. Главное, правильно его сформировать.

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



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
hacsoft
Без сторонних утилит (при помощи исключительнно возможностей command.com/cmd.exe) - невозможно
Можно для этого использовать Visual Basic Script/Java Script

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:37 28-11-2005
hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
Вроде как нет, cmd больше ориентирован на текстовые файлы, но можно по help'у поискать, может и можно как-то направить в файл произвольный байт. Если нет, то можно воспользоваться утилитой debug.exe, которая до сих пор поставляется вместе с виндой
P.S. Попробую написать батник, создающий бинарный файл длинной 256 байт и содержащий значения 0x00, 0x01, ..., 0xff. Если удастся, значит можно и ярлык будет сделать

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

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

Цитата:
Если нет, то можно воспользоваться утилитой debug.exe

В повседневной жизни это обычно не нужно. Очень подозреваю, что Death_INN спрашивал не про теорию, а про обычное решение, типа:  
createlink /файл /место_для_ярлыка
Тут действительно легче и удобней *.vbs. Или какой-нибудь консольной утилитой пользоваться, которая умеет создавать ярлыки из комстроки. Nircmdc например.
http://www.nirsoft.net/utils/nircmd.html

Цитата:
Если удастся, значит можно и ярлык будет сделать

Подробнее...

Всего записей: 1710 | Зарегистр. 08-12-2004 | Отправлено: 21:18 29-11-2005 | Исправлено: igor_andreev, 22:10 01-12-2005
almadvav



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Такую задачку можно решить?
 
есть файл по определенному пути, скажем c:\temp\файл.txt
его нужно переименовать в c:\temp\файл_MMYY.txt
где MM - текущий месяц,
YY - текущий год.
либо в формате c:\temp\файл_MMYYYY.txt
не принципиально.
 
и как усложнение задачи переименовать в вид c:\temp\файл_MMYY.txt
где MM - текущий месяц-1, т.е. предыдущий месяц.

Всего записей: 16 | Зарегистр. 31-01-2004 | Отправлено: 04:08 02-12-2005
Alan Mon

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

Код:
ren %1 %~n1_%date~3,2%%date:~-2%%~x1

Усложненный вариант:

Код:
set /A month=%date:~3,2%-1
if month==0 set month=12
ren %1 %~n1_%month%%date:~-2%%~x1


----------
Ребята, давайте жить дружно. Кот Леопольд

Всего записей: 1116 | Зарегистр. 22-07-2004 | Отправлено: 10:30 02-12-2005
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alan Mon
При подобном использовании переменной %date% постерегает маленькая, но неприятная, заподлянка. Дело в том, что формат date зависит от региональных настроек. А они разные. Более того, даже русские настройки, задаваемые по умолчанию при установки системы, могут отличаться на разных системах. Например, в NT и 2000 они отличаются от XP и 2003 - у первых месяц будет буквами, у вторых цифрой. Не факт, что опять не будет по другому в Висте.
К сожалению, используя только возможности командного процессора, для получения по отдельности года, месяца, даты универсального решения нет. Я имею ввиду такое решение, которое ГАРАНТИРОВАНО будет работать на любой NT-подобной системе с любыми региональными настройками.
 
Я для подобных целей использую kixtart. В cmd-файле получается вызов, типа

Код:
 
call $GetDT datetime d-t
 

Переменной среды datetime в данном примере у меня присвоится значение вида YYYYMMDD-HHMMSS. Вид задаётся вторым параметром. Скрипт легко модифицируется под конкретные нужды. Если такое решение интересно, могу сдесь разместить.

Всего записей: 3773 | Зарегистр. 09-02-2003 | Отправлено: 14:37 02-12-2005
hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
Но это все понятно, про debug я написал. А вот как сделать только средствами cmd?
 
На счет задачи с датой.
Smitis, использовать внешние программы, которых нет в стандартной ОС не хорошо...
Для начала попробуем найти все возможные способы получания даты из батника:
1. Коданда date /t
2. Переменная %date% - судя по всему является зеркалом 1-го способа.
3. Создаем временный файл и получаем дату его создания командой dir.
4. Из приглашения командной строки, после выполнения команды prompt $d. Вот только как это значение от туда выдрать?
5. Возможно есть еще способы...
 
Для того, что бы установить нужный нам формат даты, можно использовать параметр country в файле Config.nt. Вот только как это связать с нашей задачей?
 
Еще можно попытаться определить формат данных вручную. Вот пример (не очень красиво, конечно):

Код:
@echo off
for /f %%d in ('date /t') do set dt=%%d
echo | date 13/12/2000 > nul
for /f %%d in ('date /t') do set newdt=%%d
date %dt% > nul
if not "%dt%"=="%newdt%" ...

За место "..." ставим код, приведенный Alan Mon, т.к. тут мы уверены в том, что формат даты верный.
Поясню, как это будет работать: первым делом запоминаем текущую дату в переменную %dt%. Теперь пытаемся установить новую дату: 13.12.2000 - 13 декабря 2000 года. Если первой цифрой должен идти месяц, а не число (а месяца с номером 13 не существует), то новая дата установлена не будет и сохранится старая. Полученную дату записываем в переменную %newdt% и возвращаем в систему прежднюю дату (ведь не хорошо, если после всего этого дата в системе окажется измененной). А теперь достаточно сравнить переменные %dt% и %newdt%. Если они различны, то это значит, что формат даты такой: ДД.ММ.ГГГГ или ДД.ММ.ГГ, не важно. И не важно, какой разделитель, точка или что другое, работать будет в любом случае.
Аналогично можно проверить другие возможные форматы, т.е. это и будет решением задачи для любых настроек. Осталось только все собрать вместе и реализовать

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 18:42 02-12-2005 | Исправлено: hacsoft, 18:48 02-12-2005
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Даю подсказку
Хотите универсальности с датами на всех NT-системах:
1. делайте экспорт куска реестра HKEY_CURRENT_USER\Control Panel\International в темп-файл (regedit /ea, reg.exe не пойдет, по умолчанию есть в XP/2003, в NT/2000 только в ресурс ките)  
2. Там ищите sShortDate
3. Смотрите версию ОС

Код:
 

VER|FIND "Windows NT">NUL
IF NOT ERRORLEVEL 1 GOTO WINNT
 
VER|FIND "Windows 2000">NUL
IF NOT ERRORLEVEL 1 GOTO WIN2K
 
VER|FIND "Windows XP">NUL
IF NOT ERRORLEVEL 1 GOTO WINXP
... и тд

 

и дальше по обстановке, в NT/2000 в %date% добавляется еще две-три буквы дня недели к sShortDate(Пт 02.12.2005, Fri 02/12/05), в XP/2003 нет.
3. Удаляете темп-файл
 
Ну или сначала узнать, какая ОС, потом или regedit /ea или reg.exe, не суть, возможны варианты.
 
Добавлено:
Забыл написать - разделитель даты там же в реестре sDate.
И заглянул сейчас в NT4.0 WS ENG - там echo %date% не работает, только date /t

Всего записей: 1710 | Зарегистр. 08-12-2004 | Отправлено: 19:43 02-12-2005 | Исправлено: igor_andreev, 23:50 02-12-2005
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тээкс..., проверка версии ОС отпадает. Несознательные сербы-греки и в XP вставляют буквы дня недели Попробовал сделать с проверкой первого знака того, что выдает date /t(если не 0-9, то значит день недели перед sShortDate).  
Smitis

Цитата:
К сожалению, используя только возможности командного процессора, для получения по отдельности года, месяца, даты универсального решения нет.

Подсоби немного, щас сделаем
Потестируйте (zip, 1Kb), самая что ни на есть первая альфа-версия, запросто что-то мог упустить. Бегло проверил языков по двадцать на XP ENG и 2000 RUS, вроде работает. На NT4 и 2003 только в понедельник смогу проверить.

Всего записей: 1710 | Зарегистр. 08-12-2004 | Отправлено: 05:31 03-12-2005 | Исправлено: igor_andreev, 05:39 03-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-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru