Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd)

Автор: timka85
Дата сообщения: 05.05.2009 16:30
Товарисчи, что же, никто не знает как отсрочить команду переименования файла на момент закрытия всех процессов, использующих его?
Автор: romrub
Дата сообщения: 05.05.2009 22:02

Цитата:
Код:
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\
Автор: timka85
Дата сообщения: 06.05.2009 02:21
Что-то все мои задачи оказываются никому не по зубам... Может такой вариант будет полегче?...
Нужен батник , который будет:
1. (сначала) считывать собственное название (без .bat)
2. изымать папку с идентичным названием из C:\Archive\ и помещать ее рядом с собой
3. ...
4. ...
.
.
100. (по окончанию) Будет отправлять эту папку обратно в C:\Archive\

Спасибо.
Автор: Maza_Faka
Дата сообщения: 06.05.2009 06:47
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%
Автор: Cosmogor
Дата сообщения: 06.05.2009 07:40
Привет форумчанам.

Может кто подскажет, как написать в одну строку
(одной командой) COPY, с перезаписью файлов

Пример кода:

echo Y|COPY "sleep.exe" "%systemroot%\sleep.exe"
echo Y|COPY "Rar.exe" "%systemroot%\Rar.exe"

У мня что-то не получается, только в 2
команды получается.

Спс.
Автор: 01MDM
Дата сообщения: 06.05.2009 08:07
Cosmogor
Ну так copy /?

Код:
copy /y "sleep.exe" "%systemroot%\sleep.exe"
Автор: Cosmogor
Дата сообщения: 06.05.2009 09:15
01MDM

Да нет же!
Надо чтоб получилось вот так:

Код:

echo Y|COPY "sleep.exe" "Rar.exe" "%systemroot%\sleep.exe" "%systemroot%\Rar.exe"

Что-то в этом роде. (но это неправильный код)
Одной командой COPY , можно было скопировать файлы

Спс.
Автор: romrub
Дата сообщения: 06.05.2009 10:21

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

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%\
Автор: docent_balamut
Дата сообщения: 06.05.2009 11:45
Здравствуйте уважаемые.
Есть задача, которую я не могу решить посредством *.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_\ так как обьем директории значительный и в силу какой-либо ошибки файлы могут скопироваться не все.
Автор: bredonosec
Дата сообщения: 06.05.2009 12:15
вопрос:
есть аутглюк. Туда (мне в мыло) автоматически приходят сообщения от программы. Сообщения стандартные, (тема идентична, текст идентичен за исключением части, какой специалист и кому сделал.)
Мне надо это добро пересылать данным специалистам. Можно конечно же, создать правиль для каждого - мол, если в тексте такое-то имя, то пересылать по такому-то адресу.
Но спецов много, соответственно, правил будет тоже.
- нельзя ли более изящное решение придумать? Как-то скриптом задать выбор имени, и его выбирать из адресной книжки, чтоб отсылать туда.
Автор: romrub
Дата сообщения: 06.05.2009 12:32

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

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

а в остальном что именно не получается ?
или нужен готовый батник ?
Автор: timka85
Дата сообщения: 06.05.2009 15:55
Maza_Faka
Благодарю! Батник делает свое дело!
А теперь другая подзадача - более сложная Ее я уже пытался объяснить тут, поэтому сформулирую подругому. Есть файл(Commander.exe), ранее запущенный с батника. Есть другой процесс (неизвестный), который НЕ зависит от первого процесса, но пользуется им, и поэтому блокирует все попытки изменить его имя. Да, ситуация типичная, но нужно придумать батник, который постарается переименовать первый файл по следующему принципу:
1. Определение использующего его процесса
2. Ожидание завершения этого процесса
3. И наконец - переименование.
Ответ на этот вопрос избавит беня от других возможных подзадач. Благодарю.
Автор: Fannat
Дата сообщения: 06.05.2009 17:15
Есть задача: удалить каталог, известно его размещение (например c:\temp\), а из имени первые три буквы, следующие три буквы - произвольные цифры (пример: qqq1, qqq32, qqq482)
Надо удалить этот каталог со всем содержимым.

"copy" работает с символами "*" и "?", а вот "rd" не воспринимает. Как побороть данное ограничение?
Автор: Elroir
Дата сообщения: 06.05.2009 17:49
Fannat
Попробуй так:

Код:
@echo off
for /d %%a in (c:\temp\qqq*) do rd /s /q "%%a"
Автор: Maza_Faka
Дата сообщения: 07.05.2009 07:27
timka85

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

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

Код:
@Echo Off

:_RenProc
Ping -n 3 localhost>Nul
Ren Commander.exe MyProg.exe>Nul || GoTo :_RenProc

::Здесь ваш код
Автор: Fannat
Дата сообщения: 07.05.2009 08:55
Elroir
Работает как надо!
Автор: timka85
Дата сообщения: 07.05.2009 08:58
Maza_Faka
я хотел спросить об этом, но подумал, что это лишняя нагрузка на проц. Все равно спасибо за вариант.

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

Камрады, есть такая полезная прикладная задача. Как известно, существует база "плохих" 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 - только тогда начинал скачивать. Дескать, чтобы зря не качать.

И тут я застрял - не могу найти строчную утилиту получения размера с удалённого сервера, да и с определением размера в локальной папке тоже загвоздка. И дело не в коде, а в поиске соответствующих утилит.

Кто-то может помочь?
Автор: igor_andreev
Дата сообщения: 08.05.2009 06:13
gjf
Мануал по wget-у читай, он все это умеет. В твоем случае -r и -O не нужны, нужно -N или -m
Автор: Mikhaluch
Дата сообщения: 08.05.2009 11:57
как можно в операторе сравнения задать несколько значений, допустим:

Код: if /i "%computername%"=="miha" (ping yandex.ru) else (ping google.ru)
Автор: basstard
Дата сообщения: 08.05.2009 12:19
Mikhaluch

Код: for %%j in (miha,petya,vasya) do (
    if /i {%computername%}=={%%j} (ping yandex.ru) else (ping google.ru)
)
Автор: gjf
Дата сообщения: 08.05.2009 12:44
igor_andreev
Да, действительно, всё упрощается до:
@echo off
wget.exe -N -r --tries=3 http://emulepawcio.sourceforge.net/nieuwe_site/Ipfilter_fakes/ipfilter.dat -O ipfilter.dat
copy /Y ipfilter.dat "%userprofile%\Application Data\uTorrent\ipfilter.dat"


Спасибо за совет!
Автор: vmcho
Дата сообщения: 08.05.2009 14:21
Народ!
Подскажите, как решить проблему:
1. в нерабочее время с помощью wget закачивается файл .exe
2. надо в автоматическом режиме проверить, запускается он или битый
3. если запускается, заменить им существующий
Проблема по п. 2, пробовал
start хххххх.ехе - не возвращает ощибку, если файл corrupted
Подскажите, может кто знает команду или утилиту командной строки для проверки ехешников на "запускаемость".
Автор: mp3exchanger
Дата сообщения: 08.05.2009 15:09
Буду благодарен тому, кто поможет создать такой батник...

Имею:
prog.exe и test.txt в одном каталоге. В батнике запускается prog.exe, параметром является первая строка файла test.txt, после обработки prog.exe добавляет результат (либо ERROR, либо OK) в отдельный текстовый файл. Это уже есть и работает красиво.

Необходимо:
После каждой обработки (и вывода результата) необходимо удалить первую строку в test.txt, чтобы при очередном запуске prog.exe параметром для неё стала уже вторая строка. Всё это надо зациклить, пока не закончатся параметры (т.е. строки) в test.txt

Очень надеюсь, что это возможно сделать, поскольку сейчас мне приходиться довольствоваться макросом в Far для этих действий.
Автор: vmcho
Дата сообщения: 08.05.2009 15:44

Цитата:
Необходимо:
После каждой обработки (и вывода результата) необходимо удалить первую строку в test.txt, чтобы при очередном запуске prog.exe параметром для неё стала уже вторая строка. Всё это надо зациклить, пока не закончатся параметры (т.е. строки) в test.txt

А зачам удалять строки?
Пишешь цикл обрабоки тхт файла аля:
FOR /F "tokens=*" %%i in (твой.txt) do (START prog.exe %%i)

Автор: mp3exchanger
Дата сообщения: 08.05.2009 15:58
Удалять надо, поскольку prog.exe ВСЕГДА автоматом цепляет первую строку в качестве параметра и никакой батник ей не указ
Автор: vmcho
Дата сообщения: 08.05.2009 16:46

Цитата:
Удалять надо, поскольку prog.exe ВСЕГДА автоматом цепляет первую строку в качестве параметра и никакой батник ей не указ

Ну тогда может быть тем же циклом for читать во временный файл твой.TXT, начиная со второй строки, а затем заменять его на временный и т.д. по циклу

Добавлено:

Цитата:
Удалять надо, поскольку prog.exe ВСЕГДА автоматом цепляет первую строку в качестве параметра и никакой батник ей не указ

Или по циклу динамически создавать твой.txt файл из одной строки шаблона
Автор: mp3exchanger
Дата сообщения: 08.05.2009 16:56
Не подходит, т.к. test.txt довольно "тяжёлый" и плодить временные файлы на его основе - издевательство над хардом... хотя, если предложишь готовое решение - готов попробовать
шаблон тоже не подходит, так как каждый параметр уникален.
Автор: 01MDM
Дата сообщения: 08.05.2009 16:57
mp3exchanger
Добавь в свой батник:

Код:
more +1 test.txt 1>test.tmp
move test.tmp test.txt
Автор: mp3exchanger
Дата сообщения: 08.05.2009 17:01
01MDM, да, вот это, похоже, то что нужно. Отпишусь чуть позже.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: SAS.Планета (часть 2)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.