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

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



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GOODmen
Мда, выливаем воду из чайника...
Чтобы удалить один, не надо считать сколько оставить. Просто отсортировать в другом направлении и первый удалить. В твоём случае можно ограничиться вот таким кодом:

Код:
 
 for /F %%a in ('dir /B /A-D /OD %1') do ( del %%a & goto end )
:end
 

 
Добавлено:
CYBORG1980
Что-то вроде

Код:
 
for /F "tokens=1,2*" %%i in (`net view`) do ( copy c:\file.txt %%i\C$\folder )
 

Разумеется выполнять нужно из-под пользователя с правами локального админа на каждом компьютере. Либо делать шару.
 
Добавлено:
net view в последней строке выдаёт лишний мусор, но в данном случае это не критично, если конечно на компьютере нет папки "The".

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

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



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В общем показательный пример - сам спросил - сам ответил.. вот мое решение..  
 
set copyfile=c:\bin\LGInvoice.xlt
 
net use S: /delete /y
@net view|@for /F "tokens=1" %%c in ('@find "\\"') do (
net use S: %%c\c$\bin
Copy %copyfile% S:\ /y
net use S: /delete /y
)
 
 
 
evle:
Спасибо за твой способ

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



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопросик: А можно консольный FTP перевести в пассивный режим?, если можно то как?

Всего записей: 2 | Зарегистр. 15-06-2006 | Отправлено: 10:18 15-06-2006
VladimirKvach

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

Цитата:
Вопросик: А можно консольный FTP перевести в пассивный режим?, если можно то как?

 
Юзай curl (http://curl.haxx.se/download.html) Умеет и скачивать и закачивать, по умолчанию работает именно в пассивном режиме. Попробовал с его помощью закачивать на ftp провайдера через adsl, скорость получилась в 2 раза больше в сравнении с фаром.
 
ИМХО: для решения интернетовских задач лучше использовать утилиты портированные их юникса.

Всего записей: 23 | Зарегистр. 03-04-2006 | Отправлено: 10:33 15-06-2006
GOODmen



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Спасибо evle!
Вот что у меня вышло. Задача: на первом серваке каждую ночь делается бэкап базы, второй сервак берет самый свежий бэкап, архивирует и кладет себе в папку. если места на диске меньше чем 1 гиг, сперва удаляется самый старый архив и снова пробует архивировать.
Как будто работает, с понедельника запущу в работу...
 

Код:
 
@echo off
:CHEK
set from_dir=d:\temp\
set to_dir=d:\temp\test\
set get_rar=c:\gate\back_olimp\Rar.exe
set a=
cd /d %from_dir%
freedisk /d %to_dir% 1gb
if %errorlevel%==1 (
for /F %%a in ('dir /B /A-D /OD %to_dir%olimp*.rar') do ( del %to_dir%%%a
echo not allow space-%errorlevel% = deleted %%a > %date%_NotAllowSpace_log.txt
goto :CHEK )
)
if %errorlevel%==0 (  
for /f %%a in ('dir /b /A-D /o:d %from_dir%olimp*.bak') do (echo allow space-%errorlevel% = copyet %%a > %date%_succesful_log.txt
%get_rar% a -s -m5 -ep -o- %to_dir%%%~na %from_dir%%%a & goto :END)
)
:END
pause
 

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



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

Цитата:
freedisk

А это что за программа? Разве нельзя средствами Windows узнать количество свободного места?

Всего записей: 14975 | Зарегистр. 04-11-2002 | Отправлено: 12:47 15-06-2006
GOODmen



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
эта программа проверяет соответсвие свободного места на диске заданному, работает в пакетниках - и это главное!

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



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GOODmen
Хм. Я бы всё таки количество бэкапов задавал более явно, а то можно что-нибудь случайно убить.
abz

Цитата:
Разве нельзя средствами Windows узнать количество свободного места?

А разве можно? Ну, можно из последней строки команды dir. но выковыривать его оттуда не очень удобно.

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

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



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
evle
Действительно, чистит всю папку... я надеялся после первого цикла for он выйдет по метке, таким образом успеет удалить токо один файл... придется опять голову поломать
А нет, вру! он будет чистить папку по одному файлу пока условие по свобоному месту не выполнится

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