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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Модерирует : gyra, Maz

Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1) (часть 2)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 5
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Курс лекций для начинающих. Полезно и просто описано
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
· Уильям Станек - Командная строка Microsoft Windows (вплоть до w2k3)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)
· Переход из 32-битной версии cmd.exe в 64-битную

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:38 10-03-2009 | Исправлено: TechnicsKuzya, 13:54 27-12-2009
timka85

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

Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 17:30 05-05-2009
romrub

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

Цитата:
Код:
FOR /R "C:\new\" %%i IN (*.*) DO (  
FOR /R "C:\old\" %%b IN (*.*) DO if "%%~nxb"=="%%~nxi" xcopy "%%~fi" "%%~fb" /Y /D  
)
 
 
работает, но не всегда. Часть файлов в одну папку сортирует, а в остальные нет. Имена файлов везде одинакового вида - PIC_7296.JPG  
Имя папки, в которую сортирует, никакими другими символами не отличается от других папок, также как и все содержит цифры, пробел и русские буквы.
 
Кто подскажет свой вариант или где ошибка?

 
может так, без батника ?
 

Код:
xcopy /S /U /D /Y C:\new\*.* C:\old\


Всего записей: 25 | Зарегистр. 18-03-2009 | Отправлено: 23:02 05-05-2009 | Исправлено: romrub, 23:02 05-05-2009
timka85

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что-то все мои задачи оказываются никому не по зубам... Может такой вариант будет полегче?...
Нужен батник , который будет:
1. (сначала) считывать собственное название (без .bat)
2. изымать папку с идентичным названием из C:\Archive\ и помещать ее рядом с собой
3. ...
4. ...
.
.
100. (по окончанию) Будет отправлять эту папку обратно в C:\Archive\
 
Спасибо.

Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 03:21 06-05-2009
Maza_Faka



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

Цитата:
Что-то все мои задачи оказываются никому не по зубам...

А всё потому батенька, что вы выкладываете целиком всю свою задачу, и разбираться в ней ни у кого нет желания/времени. Советую впредь разбивать всю задачу на мелкие подзадачи и выкладывать их здесь, а затем самому собирать всю задачу из решённых подзадач
 

Цитата:
Нужен батник

Пример:

Код:
 
@Echo Off
 
SetLocal
 
Set ArcDir=C:\Archive
Set DirName=%~n0
 
Xcopy %ArcDir%\%DirName% %~dp0\%DirName% /E /S /Y /I
 
Xcopy %~dp0\%DirName% %ArcDir%\%DirName% /E /S /Y /I
 
RD /S /Q %~dp0\%DirName%
 

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:47 06-05-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет форумчанам.
 
Может кто подскажет, как написать в одну строку
(одной командой) COPY, с перезаписью файлов
 
Пример кода:
 
echo Y|COPY "sleep.exe" "%systemroot%\sleep.exe"
echo Y|COPY "Rar.exe" "%systemroot%\Rar.exe"
 
У мня что-то не получается, только в 2  
команды получается.
 
Спс.

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 08:40 06-05-2009
01MDM



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

Код:
 
copy /y "sleep.exe" "%systemroot%\sleep.exe"  
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:07 06-05-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
 
Да нет же!
Надо чтоб получилось вот так:
 
Код:
 
echo Y|COPY "sleep.exe" "Rar.exe" "%systemroot%\sleep.exe" "%systemroot%\Rar.exe"
 
Что-то в этом роде. (но это неправильный код)
Одной командой COPY , можно было скопировать файлы
 
Спс.

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 10:15 06-05-2009
romrub

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

Цитата:
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 
01MDM  
 
Да нет же!  
Надо чтоб получилось вот так:  
 
Код:  
 
echo Y|COPY "sleep.exe" "Rar.exe" "%systemroot%\sleep.exe" "%systemroot%\Rar.exe"
Что-то в этом роде. (но это неправильный код)  
Одной командой COPY , можно было скопировать файлы  
 
Спс.

 

Код:
echo Y | COPY "sleep.exe" ) %systemroot%\ & echo Y | COPY "Rar.exe" %systemroot%\

или, что более гибче

Код:
for %%i in (sleep.exe Rar.exe) do copy %%i %systemroot%\

Всего записей: 25 | Зарегистр. 18-03-2009 | Отправлено: 11:21 06-05-2009
docent_balamut

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте уважаемые.
Есть задача, которую я не могу решить посредством *.bat - файла ввиду очень слабого знания предмета. Но чувствую что задача эта решаема именно этими средствами проще всего поскольку задача довольно нестандартная. В связи с этим прошу ногами не бить а указать где копать. На форуме уже перелопатил кучу страниц - воедино собрать не могу. Формулирую задачу:
 
Компьютер WIN_XP_PRO используется как сервер видеонаблюдения - записи камер сохраняются на диск в директорию _видеонаблюдение_ в виде
D:\_видеонаблюдение_\_день1_месяц_год\_камера1_\файл1
D:\_видеонаблюдение_\_день1_месяц_год\_камера1_\файл2
....
D:\_видеонаблюдение_\_день1_месяц_год\_камера2_\файл1
...
D:\_видеонаблюдение_\_день2_месяц_год\_камера1_\файл1
... и т.д.
файлы хранятся до заполнения всего диска, когда свободное место исчерпано - удаляются самые старые записи и на их место идет новая запись. Все это реализовано средствами программы видеонаблюдения.
 
Записи одной из камер надо хранить дольше чем то позволяет свободное место на диске. Необходимо все файлы из директории D:\_видеонаблюдение_\_день_месяц_год\_камераN_\
скопировать в shared_folder подключенную как сетевой диск в директорию \_день_месяц_год\_камераN_\  до момента удаления.
Комп_1 - Видеонаблюдения работает постоянно, а вот комп_2 - на котором находится shared_folder нет, поэтому возможно проще и правильней решать эту задачу с компа_2.
Неплохо было-бы установить проверку на наличие свободного места на диске с shared_folder компа_2 или ограничить количество папок  в директории shared_folder, что в даном случае равнозначно дням сколько хранятся записи. А также проверку что фсе файлы из директории D:\_видеонаблюдение_\_день_месяц_год\_камераN_\ скопированы в shared_folder\_день_месяц_год\_камераN_\    так как обьем директории значительный и в силу какой-либо ошибки файлы могут скопироваться не все.

Всего записей: 10 | Зарегистр. 31-05-2007 | Отправлено: 12:45 06-05-2009 | Исправлено: docent_balamut, 13:09 06-05-2009
bredonosec



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вопрос:  
есть аутглюк. Туда (мне в мыло) автоматически приходят сообщения от программы. Сообщения стандартные, (тема идентична, текст идентичен за исключением части, какой специалист и кому сделал.)
Мне надо это добро пересылать данным специалистам. Можно конечно же, создать правиль для каждого - мол, если в тексте такое-то имя, то пересылать по такому-то адресу.
Но спецов много, соответственно, правил будет тоже.  
 - нельзя ли более изящное решение придумать? Как-то скриптом задать выбор имени, и его выбирать из адресной книжки, чтоб отсылать туда.

----------
Вопрос: 'Что человек курит?' как правило возникает не когда ты слышишь, как он дышит, а когда видишь, что он пишет
Пропеллер играет роль вентилятора, он останавливается -пилот потеет
Аськи нету.

Всего записей: 16257 | Зарегистр. 13-02-2003 | Отправлено: 13:15 06-05-2009
romrub

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

Цитата:
Неплохо было-бы установить проверку на наличие свободного места на диске  

в WinXP есть родная утилитка freedisk.exe, очень удобная для пакетной работы.
 
а в остальном что именно не получается ?
или нужен готовый батник ?

Всего записей: 25 | Зарегистр. 18-03-2009 | Отправлено: 13:32 06-05-2009
timka85

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maza_Faka
Благодарю! Батник делает свое дело!
А теперь другая подзадача - более сложная Ее я уже пытался объяснить тут, поэтому сформулирую подругому. Есть файл(Commander.exe), ранее запущенный с батника. Есть другой процесс (неизвестный), который НЕ зависит от первого процесса, но пользуется им, и поэтому блокирует все попытки изменить его имя. Да, ситуация типичная, но нужно придумать батник, который постарается переименовать первый файл по следующему принципу:
1. Определение использующего его процесса
2. Ожидание завершения этого процесса
3. И наконец - переименование.
Ответ на этот вопрос избавит беня от других возможных подзадач. Благодарю.

Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 16:55 06-05-2009
Fannat



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть задача: удалить каталог, известно его размещение (например c:\temp\), а из имени первые три буквы, следующие три буквы - произвольные цифры (пример: qqq1, qqq32, qqq482)
Надо удалить этот каталог со всем содержимым.
 
"copy" работает с символами "*" и "?", а вот "rd" не воспринимает. Как побороть данное ограничение?

Всего записей: 269 | Зарегистр. 25-11-2005 | Отправлено: 18:15 06-05-2009 | Исправлено: Fannat, 10:42 07-05-2009
Elroir



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

Код:
 
@echo off
for /d %%a in (c:\temp\qqq*) do rd /s /q "%%a"
 


----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:49 06-05-2009
Maza_Faka



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

Цитата:
1. Определение использующего его процесса  
2. Ожидание завершения этого процесса  
3. И наконец - переименование.

А, если сделать проще:

Код:
 
@Echo Off
 
:_RenProc
Ping -n 3 localhost>Nul
Ren Commander.exe MyProg.exe>Nul || GoTo :_RenProc
 
::Здесь ваш код
 

То есть, код, тупо будет пытаться переименовать файл с паузой 3 сек., до тех пор пока файл не "освободится", а при успешном переименовании продолжит свою работу.

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:27 07-05-2009
Fannat



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

Всего записей: 269 | Зарегистр. 25-11-2005 | Отправлено: 09:55 07-05-2009
timka85

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

Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 09:58 07-05-2009 | Исправлено: timka85, 11:49 07-05-2009
gjf



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем.
 
Камрады, есть такая полезная прикладная задача. Как известно, существует база "плохих" ip, которых можно смело банить в utorrent и других p2p. дык вот эта база пополняется.
Создал я такой вот батничек, который через scheduler запускал раз в неделю, что обновляло эту самую базу:
@echo off
if exist ipfilter.dat copy ipfilter.dat ipfilter.bak > nul
if exist ipfilter.dat del ipfilter.dat
wget.exe -r --tries=3 http://emulepawcio.sourceforge.net/nieuwe_site/Ipfilter_fakes/ipfilter.dat -O ipfilter.dat
move /Y ipfilter.dat "%userprofile%\Application Data\uTorrent\ipfilter.dat"

 
Но прогресс движется дальше - и созрела идея, чтобы скрипт проверял размер файла на http://emulepawcio.sourceforge.net/nieuwe_site/Ipfilter_fakes/ipfilter.dat и в случае несовпадения с таковым в %userprofile%\Application Data\uTorrent\ipfilter.dat - только тогда начинал скачивать. Дескать, чтобы зря не качать.
 
И тут я застрял - не могу найти строчную утилиту получения размера с удалённого сервера, да и с определением размера в локальной папке тоже загвоздка. И дело не в коде, а в поиске соответствующих утилит.
 
Кто-то может помочь?

----------
Тут могла бы быть Ваша реклама... или эпитафия

Всего записей: 11401 | Зарегистр. 14-03-2007 | Отправлено: 06:19 08-05-2009 | Исправлено: gjf, 06:19 08-05-2009
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gjf
Мануал по wget-у читай, он все это умеет. В твоем случае -r и -O не нужны, нужно -N или -m

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 07:13 08-05-2009
Mikhaluch

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как можно в операторе сравнения задать несколько значений, допустим:

Код:
if /i "%computername%"=="miha" (ping yandex.ru) else (ping google.ru)

а нужно сравнит имя компьютера по шаблону, например miha* , либо по с несколькими значениями miha,petya,vasya  
???

Всего записей: 54 | Зарегистр. 23-12-2008 | Отправлено: 12:57 08-05-2009
   

Страницы: 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 » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru