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

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



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть bat-файл:

Код:
 
chcp 1251
set conf_file=conf.conf
for /F "tokens=1,2 delims=;" %%i in (%conf_file%) do (
if %%i==folder (  
    if not exist "%%j" md "%%j"  
    cd "%%j"  
    )
if %%i==/folder cd ..
if %%i==file copy "%%j" "%%~nxj"
)
 

К нему конфиг:

Код:
 
folder;etc
folder;tc
file;c:\Total\Profiles\Prof\main.ini
file;c:\Total\Profiles\Prof\ftp.ini
/folder
folder;reget
file;%USERPROFILE%\Мои документы\default.wjr
/folder
/folder
 

По задумке он должен собирать все конфигурационные файлы в одном месте. Вроде как в основном работает. Но вот переменные окружения вроде %USERPROFILE% не раскрываются. Есть ли способ раскрыть переменные окружения чем-нибудь консольным?
eubulos
Нужно сделать только штатными средствами или сторонние подойдут? Такое очень просто делается через nnBackup (консольный).

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 19:17 12-07-2006
Refugee

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle
Можно так
echo set MY=%%j > temp.cmd
сall temp.cmd
md !MY!
или так
for /F "tokens=*" %%o in ('cscript.exe ees.vbs //nologo "%%j"') do set MY=%%o
md !MY!
где ees.vbs
WScript.Echo  CreateObject("WScript.Shell").ExpandEnvironmentStrings(Wscript.Arguments(0))
 
очень грустно, что cmd нужны подобные костыли

Всего записей: 512 | Зарегистр. 31-03-2004 | Отправлено: 00:04 13-07-2006
SergejFk



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хочу предложить задачу на скрипт или ссылку готовой проги. Задача в следующем.:-\
 На диск, каталоги, подкаталоги, все файлы надо сделать контроль на пермишшен. Т.е. что бы система по расписанию делала лог на изменение безопасности доступа ( запись в лог с контролем времени, кем были сделаны - это желательно )
Лог подробный по директориям, поддиректориям, файлам - это главное.
В сети подняты PDC, BDC, AD, FileServer W2000Server Sp4. Контроль надо делать на FileServer. Права админа ес-но имеются.

Всего записей: 231 | Зарегистр. 26-06-2004 | Отправлено: 13:38 13-07-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
SergejFk
По моему такое проще сделать аудитом (встроенным в систему)

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И опять про ДАТУ
Перечитал все 51 предыдущие страницы, но так и не нашел конкретного решения
ДАТА-1 решено, без вопросов, а вот дата -7 дней как? кое-какие варианты были, но при дате 01.01.2006 они сразу отпадают, день получается с минусом
На всякий случай ниже приведу пример ДАТА -1 на который я ориентируюсь:
 
@Set dt=%Date%
@set dtDay=%dt:~-10%
@set dtDay=%dtDay:~0,2%
@set dtMonth=%dt:~-7%
@set dtMonth=%dtMonth:~0,2%
@set dtYear=%dt:~-4%
 
@If "%dtDay:~0,1%" == "0" Set dtDay=%dtDay:~1,1%
@If "%dtMonth:~0,1%" == "0" Set dtMonth=%dtMonth:~1,1%
 
@Set /A dtDay=%dtDay%-1
 
@If %dtDay%==0 (Set /A dtMonth=%dtMonth%-1)
@If %dtMonth%==0 (Set /A dtYear=%dtYear%-1) & (Set dtMonth=12)
@If %dtDay%==0 (
  If %dtMonth%==01 (Set dtDay=31)
  If %dtMonth%==03 (Set dtDay=31)
  If %dtMonth%==05 (Set dtDay=31)
  If %dtMonth%==07 (Set dtDay=31)
  If %dtMonth%==08 (Set dtDay=31)
  If %dtMonth%==10 (Set dtDay=31)
  If %dtMonth%==12 (Set dtDay=31)
  If %dtMonth%==02 (Set dtDay=28)
  If %dtMonth%==04 (Set dtDay=30)
  If %dtMonth%==06 (Set dtDay=30)
  If %dtMonth%==09 (Set dtDay=30)
  If %dtMonth%==11 (Set dtDay=30)
)
 
Set dtDay=0%dtDay%
Set dtDay=%dtDay:~-2%
Set dtMonth=10%dtMonth%
Set dtMonth=%dtMonth:~-2%
Set dtYear=10%dtYear%
Set dtYear=%dtYear:~-4%
@REM Set dt
 
@ECHO Сегодняшняя дата: %dt%
@ECHO Вчерашняя дата: %dtDay%.%dtMonth%.%dtYear%

Всего записей: 7 | Зарегистр. 30-06-2006 | Отправлено: 15:18 13-07-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
LeshiyAlex
Проверяй если день отрицательный - то прибавляй количество дней в предыдущем месяце и отпимай от месяца 1

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 16:20 13-07-2006
Daeron

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос по идее не сложный, но что-то сообразить не могу:
Есть каталог с подкаталогами, в которых находятся файлы *.sql
нужно переименовать эти файлы в имя_каталога_имя_файла.sql  
скопировать полученный файл в другой каталог, и все имена файлов содержащих строку INSTALL поместить в отдельный файл.

Всего записей: 76 | Зарегистр. 10-06-2005 | Отправлено: 21:47 13-07-2006
saym101



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

Код:
 md C:\$_ARC\Day_%1
 
del C:\$_ARC\Day_%1\*.rar
 
rar u -r -pruboard  C:\$_ARC\Day_%1\_1C_Data         C:\1C\lilyabase   -x*.cdx -x*.exe -x*.zip -xNEW_STRU\*.* -x*.rar
 
rar u -r -pruboard  C:\$_ARC\Day_%1\_UniScan          C:\UniScan
 
 
Exit  

Всего записей: 210 | Зарегистр. 16-04-2002 | Отправлено: 11:06 14-07-2006
zh3ntos

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
А реально ли в цикле FOR, не выходя из него, сделать счетчик?
В таком виде счетчик не работает, даже %random% выдаёт одно и то же число. А нужно для каждого файла exe в папке делать своё число.
 
А ещё лучше, в этом же цикле. Если найденный файл *.exe существует в другой папке (например c:\1), то закинуть его туда, переименов его в *_1.exe и тд. Осуществить как впринципе знаю, но вот только счетчик не работает... :/
Например:
 

Код:
 
set /A count=0
FOR /F "tokens=3,4* delims=\" %%i IN ('DIR /B *.exe') DO (
    set /A count=%count%+1
    echo %count%
    echo %random%
)
 

 

Всего записей: 4 | Зарегистр. 14-07-2006 | Отправлено: 11:12 14-07-2006 | Исправлено: zh3ntos, 11:19 14-07-2006
uZver



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
saym101
rar u -r -pruboard  C:\$_ARC\Day_%1\_1C_Data >arc.log
 
 
Добавлено:
zh3ntos
было уже .... (я сам и наступал на эти грабли)
 
echo off
setlocal ENABLEDELAYEDEXPANSION
 FOR /F "tokens=3,4* delims=\" %%i IN ('DIR /B *.exe') DO (
    set /A count=!count!+1
    echo !count!
    echo !random!
 
вообщем использовать ENABLEDELAYEDEXPANSION и "!" вместо "%"

Всего записей: 195 | Зарегистр. 10-10-2003 | Отправлено: 11:28 14-07-2006 | Исправлено: uZver, 11:33 14-07-2006
zh3ntos

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

Всего записей: 4 | Зарегистр. 14-07-2006 | Отправлено: 12:07 14-07-2006
drewha



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть ли возможность в .bat файлах обрабатывать строки?
Мне нужно проанализировать параметры командной строки, которые выглядят в виде  
"-key=value" и присвоить значения value соответствующим переменным

Всего записей: 143 | Зарегистр. 15-01-2003 | Отправлено: 17:38 14-07-2006 | Исправлено: drewha, 12:06 17-07-2006
zh3ntos

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
drewha
Если ты запустишь свой батник с параметрами -key=value, то %1 у тебя будет -key, а %2 - как раз value.

Всего записей: 4 | Зарегистр. 14-07-2006 | Отправлено: 21:57 14-07-2006
drewha



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zh3ntos
У меня не один параметр, а несколько (от 0 до 7). Причем один из них выглядит не как  
'-key=value' а просто 'value', причем порядок их произвольный.
 
Кстати, а почему знак '=' воспринимается как разделитель? Можно ли это как-то изменить?

Всего записей: 143 | Зарегистр. 15-01-2003 | Отправлено: 12:05 17-07-2006
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пососветуйте, как решить такую задачу:
Перетащенные на плейлист файлы и папки с mp3,  
Разбить каждый из файлов на заданное число байт,
засунуть порезанные куски каждого из файлов в отдельную папку с автоматически образованными именами папок типа : 001, 002, 003...
чтобы порядок воспроизведения не нарушался
У меня получилось только одна папка, и там все файлы, причём конец и начало разных произведений встречаются в одном файле.
 
Файл cmd
 
del /q C:\1\01\*.*
find ".mp3" < C:\1\02\2.m3u > C:\1\02\1.txt
find ".MP3" < C:\1\02\2.m3u > C:\1\02\1.txt
find ".Mp3" < C:\1\02\2.m3u > C:\1\02\1.txt
"C:\Program Files\WinRAR\WinRAR.exe" a -m0 -inul -v6000k C:\1\01\ @C:\1\02\1.txt
cd C:\1\01\
for %%f in (*.*) do ren %%f %%f.mp3
exit
                2.m3u-плейлист
1 строчка чистит каталог от старых записей
2-4 выбирает только mp3 в  1.txt
5 режет все файлы подряд в виде многотомного архива
7 переименование в mp3
 
только не смейтесь, знаком с командной строкой недавно

Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 15:15 17-07-2006 | Исправлено: king_stiven, 21:53 17-07-2006
Ruslan FM

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужно найти XLS один файл с каталоге который был отредактирован последним  
сделал  
dir /b /a-d/o-d/tw %dirProg%*.xls -это сортировка в обратном порядке по дате
а как прочитать результат ??
попробовал  
set dirf=dir /b /a-d/o-d/tw %dirProg%*.xls
FOR /F "tokens=1" %%i in (%dirf%) do @echo %%i
выдает  
"Не удается найти файл `dir."
куда копать есть идеи ??

Всего записей: 62 | Зарегистр. 10-11-2005 | Отправлено: 16:23 17-07-2006
zh3ntos

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
drewha
По поводу "=" нужно обращаться к местным гуру.
 
А поконкретнее, приведи пример запуска с параметрами.
 
 
Ruslan FM
А так пробовал?  
FOR /F "tokens=1" %%i in ('dir /b /a-d /o-d /tw %dirProg%\*.xls') do @echo %%i

Всего записей: 4 | Зарегистр. 14-07-2006 | Отправлено: 16:59 17-07-2006 | Исправлено: zh3ntos, 17:05 17-07-2006
drewha



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

Цитата:
А поконкретнее, приведи пример запуска с параметрами

run.bat data1.xml -server=localhost1 -iterations=10
run.bat -iterations=1 data2.xml -server=localhost2
run.bat data3.xml
run.bat -server=localhost3
...

Всего записей: 143 | Зарегистр. 15-01-2003 | Отправлено: 17:07 17-07-2006
Kirillhome



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А вот еще "задачка".
 
"В общем" - вывести список подкаталогов и файлов (для файлов - еще и дату создания, размер) для данного каталога. Но - (и вот здесь начинаются "частности") - разделителем в строке выходного файла должен быть символ табуляции.
Структура выходного файла такова
/файл01{Табуляция}размер01{Табуляция}Дата_Время01
/файл02{Табуляция}размер02{Табуляция}Дата_Время02
/Подкаталог01
/Подкаталог01/файл03{Табуляция}размер03{Табуляция}Дата_Время03
 
Ну, и т.д.
 
Всё, в общем понятно, кроме того как табуляцию вставить?
 
Сам спросил - сам ответил
Разделить в Echo выводимые части не пробелом, а табуляцией!

Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 19:20 17-07-2006 | Исправлено: Kirillhome, 19:35 17-07-2006
SergejFk



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

Цитата:
По моему такое проще сделать аудитом (встроенным в систему)

Аудитом могу посмотреть, кстати открывая каждое событие вместе с кучей ненужной инфы, лишь факт доступа по установленному разрешению, какое-либо изменение юзером ну и т.д. Мне надо список юзеров из оснастки пользователи и компоты, имеющие разрешения на несколько сотен файлов в различных директориях, причем именно разрешения, а не одно право на доступ. Разрешения безопасности также различные. Каюсь, не точно задал вопрос, чем и смутил. Скрипт должен отрабатывать не сам факт изменения, а сами эти установленые возможности.
Например, мы знаем от наших благодетелей Руссиновича и Когсвелла утилу  AccessEnum works on Windows NT/2000/XP/2003  . Но это улучшенный вариант Cacls.exe из ResKit на контроль или лог доступа, но никак не пермишена, чего как-раз мне и надо.

Всего записей: 231 | Зарегистр. 26-06-2004 | Отправлено: 21:12 17-07-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.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru