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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev

Цитата:
Не понимает IF EXIST подстановочных символов(*?).  

Лучше всё-таки проверять, прежде чем писать.
Подробнее...
Конструкция "if exist *.*" Не срабатывает, скорее всего, из-за того, что в папке всегда существует ссылка на себя (".") и на родительскую папку (".."). Как красиво определить, есть ли в ней и другие файлы, пока не знаю.
А вот конструкция  

Код:
 
DIR /B Folder\*.* | FIND /I ".rar"
 

не очень надёжна. Может натолкнуться на файл "Some.rare.file.doc", да и нет никакой необходимости отказываться от IF EXIST в этом случае.
 
Добавлено:
Нашёл способ более надёжно проверять пустоту папки (хоть и не очень красиво, но работает)

Код:
 
@echo off
for %%i in (%1\*.*) do ( if %%i NEQ . if %%i NEQ .. goto notempty )
goto :end
 
:notempty
echo Folder %1 is not empty
 
:end
 


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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
How can a batch script test if a folder is empty, or contains folders, files, or both folders and files?
http://www.jsifaq.com/SUBM/tip6400/rh6415.htm

Всего записей: 112 | Зарегистр. 17-03-2004 | Отправлено: 16:25 09-06-2006 | Исправлено: nightlight, 17:03 09-06-2006
igor_andreev

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

Цитата:
Лучше всё-таки проверять, прежде чем писать.  

Я ими пользоваться умею Загляни например вовнутрь моего батника из этого поста http://forum.ru-board.com/topic.cgi?forum=62&bm=1&topic=3573&start=1540#8
И проверь на работоспособность заодно, пожалуйста, если есть кучка непереименованных хотфиксов. Я его, когда писал, исходил из того, что Майкрософт более-менее определилась с названиями своих KB. Но там я подстановочные знаки использую вкупе с командой FOR

Цитата:
А вот конструкция    
DIR /B Folder\*.* | FIND /I ".rar"  
не очень надёжна.

Согласен. Поэтому я и написал перед конструкцией слово "вроде"
 

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 16:41 09-06-2006 | Исправлено: igor_andreev, 16:54 09-06-2006
eubulos

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dir *.avi /B >> dir.txt
    dir *.mpg /B >> dir.txt
    dir *.mkv /B >> dir.txt
    dir *.ogm /B >> dir.txt
    dir *.wmv /B >> dir.txt
    for /f "delims==" %%A in (dir.txt) do encode -n 50 "%%A"  
    del dir.txt
 
вопрос такой, а как сделать похитрее? т.е. получаем список файлов по расширению и передаем в цикл, в цикле же программе передается имя файлы и параметр собственно, получаются в цикле файлы. как после каждого прохода создавать директорию с именем исходного файла и после каждого прохода цикла переносить результат в директорию, скажем по маске? ?

Всего записей: 26 | Зарегистр. 22-04-2006 | Отправлено: 02:10 10-06-2006
Labean_Hesv

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть папка  
D:\Documents and Settings\Roman\Cookies\
 
В ней надо удалять все Cookies, за исключением нужных:
 
Допустим:
roman@forum.ru-board[1].txt
roman@forum.ru-board[2].txt
roman@forum.ru-board[3].txt
roman@forum.ru-board[4].txt
и т.д.
 
roman@forum.warezzz[2]
roman@forums.overclockers[1]
roman@philka[1]
и.т.д.
 
Написать батничек, в него как-то загнать список нужных файлов, создать на него ярлычек на Рабочем столе и в любое время чистить. Это мои мысли. С программированием не знаком, если кто-нибудь создаст такую штуку, буду очень признателен.

Всего записей: 2793 | Зарегистр. 21-11-2004 | Отправлено: 18:12 10-06-2006
scup



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Labean_Hesv так и пиши: del D:\Documents and Settings\Roman\Cookies\roman@*.* это в батнике, дальше создай на столе на него ярлык.... Вроде все просто. Или я че-то не понял? кстати, нужные перед удалением можешь куда-то копировать.

Всего записей: 556 | Зарегистр. 04-04-2003 | Отправлено: 23:23 10-06-2006
Labean_Hesv

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

Цитата:
Вроде все просто. Или я че-то не понял?
Сделать хочу, чтобы это все заранее готово было и потом быстро лишние убрать одним щелчком, а оставить только нужные. Например, Рапида свой кук создала, чтобы его убрать надо лезть в папку, а забудешь убрать потом она "припоинит" при случае и т.д.. А по предложенному пути я сейчас и хожу - отсортировал, перенес, остаток удалил, скопировал назад... тягомотина!  
  А можно сделать так: дописать в этот батничек, чтобы после удаления всех, скопировать мой резерв нужных Cookies из папки D:\CookRes  все файлы в папку D:\Documents and Settings\Roman\Cookies\.  Тогда, в принципе, задача была бы решена нормально. Я бы нужные резервировал, накапливал в папке CookRes, а потом загонял бы их на место.
 
Добавлено:
А где бы почитать, как писать бат-файлы, хотя бы самые основы, чтобы немного разбираться что к чему, и куда запрягать коня!

Всего записей: 2793 | Зарегистр. 21-11-2004 | Отправлено: 03:10 11-06-2006 | Исправлено: Labean_Hesv, 04:35 11-06-2006
igor_andreev

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

Цитата:
D:\Documents and Settings\Roman\Cookies\  
 
В ней надо удалять все Cookies, за исключением нужных:

Можно нужным печенькам временно присвоить атрибут "Только чтение", потом дать команду на удаление всех файлов *.txt, кроме имеющих атрибут "Только чтение",  и после удаления опять убрать с оставшихся(стало быть нужных) атрибут read-only.

Код:

@ECHO OFF
 
CD /D "%USERPROFILE%\Cookies"
 
REM Тут вписывай ATTRIB +R *нужная кука*.txt
 
ATTRIB +R *forum.ru-board*.txt > NUL
ATTRIB +R *wapbbs*.txt         > NUL
ATTRIB +R *imho*.txt           > NUL
ATTRIB +R *nge*.txt            > NUL  
ATTRIB +R *softkey*.txt        > NUL
ATTRIB +R *filepost*.txt       > NUL  
ATTRIB +R *avaxhome*.txt       > NUL  
 
DEL /Q /A:-R *.TXT
 
ATTRIB -R *.TXT > NUL

 
В командной строке набери ATTRIB /? и потом DEL /? , тебе сразу понятней станет.
 
P.S. У меня такая задача есть, только ее nnCron делает при отсоединении от интернета с ROBOCOPY (есть такая дивная утилита у Майкрософт).
 
ROBOCOPY.EXE E:\EMPTY "%USERPROFILE%\Cookies" *.txt /PURGE /R:1 /XF *forum.ru-board*.txt *nge*.txt и т.д.
 
Папка E:\EMPTY у меня есть всегда для моих надобностей и она всегда пустая.  
А я как раз тогда ключи ROBOCOPY изучал, так и осталась у nnCrona эта задача. Раааботает себе уже третий год

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 10:23 11-06-2006 | Исправлено: igor_andreev, 10:26 11-06-2006
Labean_Hesv

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

Цитата:
ROBOCOPY (есть такая дивная утилита у Майкрософт).
А где бы ее скачать? Искал по поиску, но везде только ссылки на доку по ней. Если немного весит, может подбросишь мне на мыло villy_gabeshСОБАКАland.ru Буду очень признателен.  

Всего записей: 2793 | Зарегистр. 21-11-2004 | Отправлено: 11:26 11-06-2006
popalka



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть вопрос по команде RENAME
 
Как можно переименовать файлы вида filename.txt в code.filename.txt пакетно
Другими словами, как вставить перед старым названимем файлов в директории (1000 файлов) какое-нибудь слово?
И еще вопрос:
есть 1000 файлов вида filename.doc.pdf как можно их пакетно переименовать в filename.txt.pdf ?
что-то игрался с Using wildcards with rename  

Цитата:
 
You can use wildcards (* and ?) in either file name parameter. If you use wildcards in filename2, the characters represented by the wildcards will be identical to the corresponding characters in filename1.

Но ни к чему ни пришел.
 
 
------------
Стер старое сообщение, так с большей частью вопросов разобрался

Всего записей: 70 | Зарегистр. 25-06-2004 | Отправлено: 09:33 12-06-2006 | Исправлено: popalka, 23:59 12-06-2006
eubulos

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
for /f "delims==" %%A in ('dir *.avi, *.mpg, *.mkv, *.ogm /b') do encode -n 15 "%%A" - однако, одна строка. А вот как после do впихнуть еще mkdir %%A и перенос результатов в папку %%A?

Всего записей: 26 | Зарегистр. 22-04-2006 | Отправлено: 08:31 13-06-2006
vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
eubulos
... do (
mkdir %%A
encode -n 15 "%%A"
...
)

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

Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 10:00 13-06-2006
eubulos

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vu1tur
Огромное спасибо! Просто не знал, что так можно.
 
В итоге имеем:
for /f "delims==" %%A in ('dir *.avi, *.mpg, *.mkv, *.ogm /b') do (
encode -n 15 "%%A"  
mkdir d:\1\"%%A"  
copy *.avs d:\1\"%%A"
del *.avs)
 
Мало ли, вдруг пригодится кому-то. Пути задаем сами, куда удобнее. Расширения тоже могут меняться произвольно, по потребностям.

Всего записей: 26 | Зарегистр. 22-04-2006 | Отправлено: 20:51 13-06-2006
Relogin

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Стоит такая задачка:
написать cmd,  который будет сканировать одну директорию. Если в директории больше одного файла - удалить все, кроме самого свежего по дате создания. Если один файл - ничего не делать
help me плз

Всего записей: 13 | Зарегистр. 14-06-2006 | Отправлено: 09:11 14-06-2006
vu1tur



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

Код:
@echo off
set keep_files=1
for /F %%a in ('dir /B /A-D /O-D %1') do call :purge "%%a"
goto :eof
 
:purge
if %keep_files% == 0 (
    del /Q %1
) else (
    echo keeping %1
    set /a keep_files-=1
)
 
:eof

Запускаем так:
purge.bat <directory>
 
keep_files — количество файлов, которые нужно оставить
если надо удалять и директории, то убрать /A-D из dir и поправить соответствующим образом команду del.

Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 17:21 14-06-2006 | Исправлено: vu1tur, 17:21 14-06-2006
Relogin

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извините, може я че недопонял - а где в вышеприведенном скрипте
проверка дат?
Смысл в том, что ВСЕГДА надо оставить ТОЛЬКО один и только самый СВЕЖИЙ по дате.Все остальные надо уничтожить. НО ОДИН самый свежий - должен быть неприкосновенен.
Это архивы , бэкапы, и надо чтобы они самочистились

Всего записей: 13 | Зарегистр. 14-06-2006 | Отправлено: 17:24 14-06-2006
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Relogin
Смысл в том, что список файлов сортирутся командой dir по дате, соответственно в начале списка будут самые новые файлы. Первый файл из списка пропускается, остальные удаляются.

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

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



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Отцы, ткните где посмотреть как скопировать 1 файлик на все компы в сети. Изначально экспорт компов будет делаться через net view >comps.txt или через dsquery * forestroot -scope subtree -filter objectcategory=computer -attr name -l >comps.txt
 
Заранее благодарен
 

Всего записей: 77 | Зарегистр. 27-05-2004 | Отправлено: 04:08 15-06-2006 | Исправлено: CYBORG1980, 09:15 15-06-2006
GOODmen



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vu1tur
Цитата:
keep_files — количество файлов, которые нужно оставить

 
Уважаемый vu1tur, а если заранее неизвестно сколько файлов нужно оставить? То есть - удалить надо один самый старый файл, вне зависимости сколько их всего в папке, как посчитать их и подставить это значение в keep_files?

Всего записей: 366 | Зарегистр. 15-01-2004 | Отправлено: 08:12 15-06-2006
Relogin

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


Цитата:
Смысл в том, что список файлов сортирутся командой dir по дате, соответственно в начале списка будут самые новые файлы. Первый файл из списка пропускается, остальные удаляются

 
Благодарю, лекарство помогло.  
Теперь разбираюсь немного

Всего записей: 13 | Зарегистр. 14-06-2006 | Отправлено: 08:14 15-06-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