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

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

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jagstang
for /f "tokens=*" %%i in ('echo value') do set T=%%i
трубу можно использовать использовать только между процессами, а set - встроенная команда.
topic
net use /?

Всего записей: 513 | Зарегистр. 31-03-2004 | Отправлено: 23:17 28-09-2006
Kirillhome



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

Цитата:
Такая задача:
 
Нужно узнать общий размер (в байтах) всех файлов с расширением *.adr (в одном определённом каталоге), и выйти из батника с кодом ровняющимуся результату.
Возможно такое на батнике?

Решение от KapralBel

Цитата:

Код:
@Echo Off
Set Size=0
For /R "C:\Program Files\far\" %%a in (*.txt) Do Call :Label1 %%~za
Echo size=%Size%
GoTo :EOF
 
:Label1
Set /A Size=%Size%+%1
GoTo :EOF

видел, но у меня с ним возникли проблемы, если в расширении - более 3 символов (и такое бывает )
 
Соответственно, чуть переписал

Код:
 
@echo off
echo Please wait...
set /a all_razm=0
set my_rash=.TXT
for /r %%d in (.) do (
    cd %%d
    for %%f in (*%my_rash%) do (
    IF /I %%~xf==%my_rash% (SET /A all_razm+=%%~zf))
)
echo Все файлы весят %all_razm% байт
 

У меня, правда, считает и в подкаталогах....

Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 23:58 28-09-2006
Korshikov_Andrey

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для некоторой папки необходимо раздать следующие разрешения:
 
Обзор папок / Выполнение файлов (Traverse Folder / Execute File)
Содержание папки / Чтение данных (List Folder / Read Data)
Чтение атрибутов (Read Attributes)
Чтение дополнительных атрибутов (Read Extended Attributes)
Создание файлов / Запись данных (Create Files / Write Data)
Создание папок / Дозапись данных (Create Folders / Append Data)
Запись атрибутов (Write Attributes)
Запись дополнительных атрибутов (Write Extended Attributes)
Удаление подпапок и файлов (Delete Subfolders and Files)
Чтение разрешений (Read Permissions)
 
(короче говоря, это то, что называется "Изменить", но без "Удаления", зато с "Удалением подпапок и файлов).
 
Разрешения эти нужно применять "Только для подпапок и файлов" и, кроме того, "Заменить разрешения всех дочерних объектов...".
 
Можно ли раздавать такие хитрые права через батник? Что использовать? Курил хелп на xcacls - не понял, как заставить его раздавать право "Удаление подпапок и файлов" и область действия "(OI)(CI)(IO)".
 
Может быть можно это сделать с помощью WSH? Какими классами и методами пользоваться?

Всего записей: 30 | Зарегистр. 24-08-2004 | Отправлено: 06:42 29-09-2006
GRiMka



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите написать бат, который бы открывал определенный текстовый файл и удалял строки с ключем "FW: DROP:" а остальные не трогал (в строке присутствуют и знаки табуляции и пробелы, заканчивается строка всегда энтером)
Полученный файл сохранял бы под другим именем..
 
Заранее благодарен автору ответа!

Всего записей: 27 | Зарегистр. 16-06-2005 | Отправлено: 07:16 29-09-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Kirillhome
Если тебе нужен подсчет только в папке (исключая подпапки) - то команда for
FOR %%a in (*.txt) ...
 
GRiMka
find /i /v "FW: DROP:" File_In.txt >File_Out.txt

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 10:57 29-09-2006
ViSiToR



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

Код:
for %%a in (*.txt) do ren *.txt *_1%%~xa

 
Но к именам файлов просто добовляется _1.txt вместо того чтобы заменять. А также если в имени файл есть символ _ то всё что идёт после него удаляется, и подставляется 1.txt
 
Пробую ещё так:
 

Код:
set all=*.txt
ren *.txt %all:.txt=_1.txt%

 
Таже история.
Как исправить  

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

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 19:16 29-09-2006 | Исправлено: ViSiToR, 19:18 29-09-2006
evle



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

Цитата:
for %%a in (*.txt) do ren *.txt *_1%%~xa

на каждом шаге переименовывать все файлы? Оригинально.
Тогда уж что-то типа

Код:
for %%a in (*.txt) do ren %%a %%~na_1%%~xa

(Проверять нет времени, но что-то в этом духе).


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

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 19:43 29-09-2006
Shish_kebab



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Опять я. Как то я просил создать батник для выборки и копирования из кучи файлов одного с сегодняшней датой. Мне помогли сенкс.
  вот
Но вот возникла проблема на винде 2000 проф.
там set T_Date=%DATE% получается в формате  = день недели дата (пт 29.09.2006), незнаю как исправить

Всего записей: 372 | Зарегистр. 14-07-2005 | Отправлено: 20:25 29-09-2006 | Исправлено: Shish_kebab, 20:49 29-09-2006
Kirillhome



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Shish_kebab
 
вообще, смотрим SET /?
 
в частности, для WIn2000
 

Код:
 
@Echo Off
Set PATH_POISK="D:\Temp\tekst3\"
 
set T_Date1=%DATE%
set T_Date=%T_Date1:3,10%
 
rem Для поиска в каталоге, указанном в PATH_POISK
rem и во всех его подкаталогах - FOR /R
FOR /R %PATH_POISK% %%a IN (*.*) DO @Call :MY_DEL "%%a" %%~ta
 
rem Для поиска в каталоге, указанном в PATH_POISK
rem НЕ ищя в его подкаталогах - FOR  
rem FOR %%a IN (%PATH_POISK%\*.*) DO @Call :MY_DEL "%%a" %%~ta
GoTo :EOF
 
:MY_DEL
SET F_DATE=%2
if %F_DATE%==%T_Date% (copy %1 c:\)
 
GoTo :EOF
 

Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 20:45 29-09-2006 | Исправлено: Kirillhome, 20:46 29-09-2006
ViSiToR



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

Цитата:
Тогда уж что-то типа

То что нужно было! спасибо.
 


 
А можно ли улучшить этот пример так, чтобы если такие же файлы уже существуют, то чтобы вместо _1 прописывалось _2  и т.д?

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

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 21:18 29-09-2006
Refugee

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Korshikov_Andrey
посмотри setacl
setacl -on C:\folder  -ot file -actn clear -clr dacl,sacl -actn ace -ace "n:GroupName;p:traverse,list_dir,read_attr,read_ea,add_file,add_subdir,write_attr,write_ea,del_child,read_dacl;i:so,sc,io" -rec cont_obj

Всего записей: 513 | Зарегистр. 31-03-2004 | Отправлено: 23:28 29-09-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ViSiToR
for %%a in (*.txt) do ren *.txt %%~na_1.txt

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 11:43 30-09-2006
Sunix



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

Код:
@echo off
if "%1"=="" (
echo usage: rar.cmd archivename.rar rarparameters;
exit)
 
set /A TEMPTIME1 = %TIME:~0,2%*3600 + %TIME:~3,2%*60 + %TIME:~6,2%
rar.exe %2 -s %3 %4 %5 %6 %7 %8 %9
set TEMPTIME2=%TIME%
set /A RARTIME = %TEMPTIME2:~0,2%*3600 + %TEMPTIME2:~3,2%*60 + %TEMPTIME2:~6,2% - %TEMPTIME1%
echo -============================================>%TMP%\comment.ans
echo -=+ This archive was created by Sunix //TGN. >>%TMP%\comment.ans
echo -=+=========================================== >>%TMP%\comment.ans
echo -=  RAR processing time: %RARTIME% sec (p3-733)>>%TMP%\comment.ans
echo -=+ Last modification: %DATE% %TIME% GMT+3>>%TMP%\comment.ans
echo ------------------------------------------------- >>%TMP%\comment.ans
echo -=+ try) to find me on icq#9306122 if you have question >>%TMP%\comment.ans
if exist %1 (
rar.exe c %1 -z%TMP%\comment.ans -k
) else (  
if exist "%~n1.part1.rar" rar.exe c "%~n1.part1.rar" -z%TMP%\comment.ans -k
)

вот такое у меня добавляет комментарии к архивам (из-под ФАРа, наверное можно и из ТС)

Всего записей: 5 | Зарегистр. 02-02-2006 | Отправлено: 13:45 30-09-2006
Profi_the_same

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
шрифт "Lucida Console".
Autoexec.nt и реестр менял.  
 
Содержимое батника:
 
@echo off
echo     Запуск ob6ego dostupa k Internetu...
net start "Общий доступ к подключению Интернета"
echo     Proverte internet na drugom kompitere!
pause
 
Вместо русских букв передаёт кракозябры.  
Решение было на какой-то странице, но найти не могу.

Всего записей: 20 | Зарегистр. 03-04-2005 | Отправлено: 17:37 30-09-2006
RussianNeuroMancer



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Profi_the_same
Перекодируй в DOS-кодировку.

----------
Kubuntu - официальный сайт, форум, русскоязычный сайт.

Всего записей: 9403 | Зарегистр. 30-04-2005 | Отправлено: 17:39 30-09-2006
nightlight

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Profi_the_same
Кодировка по ходу выполнения cmd файла меняется командой СHCP.
Команда без параметров выводит текущую кодировку (866).
Windows кодировка устанавливается командой CHCP 1251
DOS кодировка - CHCP 866
 
Добавлено:
Shish_kebab
Первые три символа можно отрезать:
%date:~3%

Всего записей: 112 | Зарегистр. 17-03-2004 | Отправлено: 17:57 30-09-2006
Den_Klimov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята. Помогите пожалуйста. Очень необходимо написать два bat-ника.
--------------------
Условие:
Существует два каталога - каталог "a" и каталог "b".
В обоих каталогах (и в каталоге "a" и в каталоге "b") может как быть масса файлов и каталогов с подкаталогами и файлами, так и не быть вообще ничего (пустой каталог без файлов с пустыми подкаталогами или без них)!
Существует также - гарантированно пустой каталог "c".
Где распологается каждый из трёх данных каталогов не суть важно, известно только, что путь к любому из каталогов может включать в себя и пробелы и переменные вроде %USERPROFILE%, %SystemRoot% и других.
Пути к каталогам и файлам в bat-нике желательно задать в виде переменных %1 %2 %3.
Даже если какую-либо из команд невозможно выполнить по каким-либо причинам (например невозможно удалить файл, который в данный момент используется другой программой), всё равно искомый батник должен нормально отработать до конца.
 
Среда выполения искомого bat-cmd-файла - WindowsXP, но всё же желательно, чтобы bat-ник был универсальным (работал и в Win2000 и в Win2003).
И крайне желательно описание (в виде rem), что делает каждая командная строка.
 
Кстати работать все батники будут через известную hidcon.exe, которая полностью скрывает консоль во время выполнения пакетного файла. Впрочем, работа bat-ника через hidcon.exe вроде бы ни на что не влияет.
Подобные пакеты командных строк можно было бы использовать в очень многих различных сложных bat-никах для весьма разнообразных задач. В том числе для создания простых инсталляционных пакетов на основе обычных самораспаковывающихся архивов. Естественно с использованием утилиты полного 100% скрытия работы cmd-файла - hidcon.exe (кстати, если кому нужен hidcon.exe могу выложить).
--------------------
Задача первого пакетного файла - действия и с файлами и с папками в каталогах "a" и "b".
 
1. @Найти@ в [корне каталога "a"] =все файлы и папки которые там расположены (конечно, если там вообще расположены какие-либо файлы и папки)= и @вывести эти файлы и папки в файл-список (к примеру list-a.txt)@.
 
2. @Скопировать@ из [корня каталога "b"]  в [гарантированно пустой каталог "c"] те =файлы и папки (если какие-либо файлы и папки там вообще имеются), которые совпадают с перечисленными в "файл-списке" (конечно если в файл-списке вообще перечислены какие-либо файлы и папки)=.
3. @Снять все атрибуты@ в [корне каталога "b"] с тех =файлов и папок (если какие-либо файлы и папки там вообще имеются), которые совпадают с перечисленными в "файл-списке" (конечно если в файл-списке вообще перечислены какие-либо файлы и папки)=.
4. @Удалить@ в [корне каталога "b"] те =файлы и папки (если какие-либо файлы и папки там вообще имеются), которые совпадают с перечисленными в "файл-списке" (конечно если в файл-списке вообще перечислены какие-либо файлы и папки)=.
 
5. @Скопировать@ из  [корня каталога "a"] в [каталог "b"] все =имеющиеся в каталоге "a" файлы и папки=. (что-то вроде xcopy %1\* %2 /c /v /s /e /k /h /y)
--------------------
Задача второго пакетного файла - действия с файлами с сохранением структуры подкаталогов в каталогах "a" и "b".
 
1. @Найти@ в [каталоге "a" и его подкаталогах] все =файлы которые там расположены (конечно, если там вообще расположены какие-либо файлы)= и @вывести эти файлы с сохранением структуры папок в файл-список (к примеру list-a.txt)@.
 
2. @Скопировать, с сохранением структуры каталогов@, из [каталога "b" и его подкаталогов] в [гарантированно пустой каталог "c"] те =файлы (если какие-либо файлы там вообще имеются) которые совпадают с перечисленными в "файл-списке", причём не только по названию но и расположены в таких же подкаталогах (конечно если в файл-списке вообще перечислены какие-либо файлы)=.
3. @Снять все атрибуты@ в [каталоге "b" и его подкаталогах] с тех =файлов (если какие-либо файлы там вообще имеются), которые совпадают с перечисленными в "файл-списке", причём не только по названию но и расположены в таких же подкаталогах (конечно если в файл-списке вообще перечислены какие-либо файлы)=.
4. @Удалить@ в [каталоге "b" и его подкаталогах] те =файлы (если какие-либо файлы там вообще имеются), которые совпадают с перечисленными в "файл-списке", причём не только по названию но и расположены в таких же подкаталогах (конечно если в файл-списке вообще перечислены какие-либо файлы)=.
 
5. @Скопировать, с сохранением структуры каталогов@, из [каталога "a" и его подкаталогов] в [каталог "b" и его подкаталоги] все =имеющиеся в каталоге "a" файлы=.
--------------------
 
Кстати отличие второго искомого батника от первого именно в том и заключается.
1. Что в файл-список в первом случае выводится содержимое только лишь КОРНЯ каталога "а" (независимо будут то файлы или папки). И таким образом дальнейшие действия с возможно существующими объектами в каталоге "b" производятся только к тем ФАЙЛАМ и ПАПКАМ, которые распологаясь в КОРНЕ каталога "b" полностью совпадают по имени.расширению, с аналогичными файлами и папками в корне каталоге "а".
 
2. А во втором выводится ПОЛНАЯ СТРУКТУРА файлов, включая файлы находящиеся в подкаталогах (с сохранением структуры их расположения в подкаталогах каталога "а"). И таким образом дальнейшие действия с возможно существующими объектами в каталоге "b" производятся только к тем ФАЙЛАМ, которые полностью совпадают и по имени.расширению и по своему относительному расположению в структуре подкаталогов в каталоге "b" с аналогичными файлами в каталоге "а".
 
PS.
Как видите хотя задачи искомых первого и второго bat-файлов похожи, но всё-таки имеют определённые серьёзные отличия.
К сожалению моих знаний явно не хватает чтобы самостоятельно написать такие bat-файлы. Потому очень надеюсь на вашу помощь.
Помогите пожалуйста. Я в свою очередь в долгу не останусь. Даю слово!

Всего записей: 317 | Зарегистр. 27-02-2006 | Отправлено: 21:01 30-09-2006 | Исправлено: Den_Klimov, 19:47 01-10-2006
DocBeen



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

Цитата:
Добавлено:  DocBeen  RasDial "доступ в Internet"

это и нужно,
прочитав rasdial не понял как до конца все осуществить
 
Вызов :
rasdial элемент [пользователь [пароль!**]] [/DOMfl I N:домен] [/PHONE:номер Телефона] [/CALLBACK:ответныйНомер ] [/PHONEBOOK:ФайлАдреснойКниги] E/PREFIXSUPPIX]
гаsdial [элемент] /DISCONNECT
гasdial
Команда    успешно    завершена.
 
в помощи так и написано, каждый раз натыкаетс на 623 ошибку - в том что системе не удалось найти файл телефонной книги для данного соединения
идея и смысл в том что имею VPN соединение с интернетом в наличии логин, пароль и ip, сервера с которым я соединяюсь....
вот и не могу реализовать в батнике чтоб автоматом подключалось соединение при старте системы...

Всего записей: 147 | Зарегистр. 15-07-2005 | Отправлено: 00:34 01-10-2006
Kirillhome



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Den_Klimov
По поводу 1-го батника - правильно ли я понимаю, что если в каталоге "б" есть файл
test.txt
и подкаталог
test
с файлом
test.txt
(файл test.txt есть в списке), то в каталог "с" будет переписан сначала один, а потом второй файл???
 
И (очень похоже, но - возможно и ошибаюсь) - п. 2-4 можно заменить одним - не копировать, потом снимать атрибуты, потом удалять, а просто переместить???

Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 01:53 01-10-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DocBeen
Пуск\Сетевые подключения
смотришь как называется подключение к интернету - пусть Супер-Пупер Интернет
так и запускаешь
RASDial "Супер-Пупер Интернет"

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 10:44 01-10-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