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

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

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

Widok (10-03-2009 12:39): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108

   

Widok



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

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

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:08 19-11-2007 | Исправлено: Dmitriy05, 22:49 13-04-2008
igor_andreev

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

Код:

bkren "(.*)\.part(.*)" "\1\2"

bkren тут http://www.boolean.ca/renamer/
 
Добавлено:
Ой, не заметил, что расширение тоже сменить надо

Код:

bkren "(.*)\.part(.*)\.rar" "\1\2.db"

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 19:31 23-04-2008 | Исправлено: igor_andreev, 19:36 23-04-2008
Doc_Evil



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

Всего записей: 234 | Зарегистр. 09-07-2004 | Отправлено: 19:46 23-04-2008
igor_andreev

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

Код:

bkren "(.*)\.part([0-9]*)\.rar" "\1\2.db"

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 19:46 23-04-2008
Doc_Evil



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Забыл спросить, а как "отмотать" всё назад?
Спасибо.

Всего записей: 234 | Зарегистр. 09-07-2004 | Отправлено: 20:00 23-04-2008
vmix



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возвращаюсь к теме удаления старых файлов.
 
Рекомендуемый везде forfiles работает только с датой модификации файла, а при копировании файла изменяются только время доступа и создания, следовательно, к папкам обмена forfiles не применишь. Может быть есть у кого скрипт (батник) или утилита для удаления файлов/папок с датой (мод/созд/дост) старше указанной?
 
Спасибо.

Всего записей: 163 | Зарегистр. 22-10-2002 | Отправлено: 20:40 23-04-2008
nesty

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем доброго времени суток...залпом прочитала 20 страниц этой темы-оч интересно...
стала писать...вот только тут не понятно...не мог бы кто-нибудь пояснить этот кусочек когда-то приведенного тут кода...прям по частям по буковкам если можно...
 
rem удаление из папки всех файлов кроме файлов на текущую дату
for /f "tokens=*" %%i in ('dir /b /s /a c:\1') do (echo %%~ti | findstr /v %date% 1>nul && del /q "%%i")
pause
 
Всем заранее огромное спасибо...

Всего записей: 1 | Зарегистр. 23-04-2008 | Отправлено: 23:27 23-04-2008
Tipulatoid



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

Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 03:48 24-04-2008 | Исправлено: Tipulatoid, 03:54 24-04-2008
igor_andreev

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

Цитата:
Забыл спросить, а как "отмотать" всё назад?  

Обратно переименовать

Код:

bkren "([a-z]*)([0-9]*)\.db" "\1.part\2.rar"

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 12:14 24-04-2008
01MDM



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

Цитата:
Может быть есть у кого скрипт (батник) или утилита для удаления файлов/папок с датой (мод/созд/дост) старше указанной?

 
Попробуй DelOld, gui и command-line интерфейс.
 
Много примеров для работы с датой в 4 части задач на батфайлах

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:40 24-04-2008
Elroir



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

Цитата:
не мог бы кто-нибудь пояснить этот кусочек когда-то приведенного тут кода...прям по частям по буковкам если можно...  
 
rem удаление из папки всех файлов кроме файлов на текущую дату  
for /f "tokens=*" %%i in ('dir /b /s /a c:\1') do (echo %%~ti | findstr /v %date% 1>nul && del /q "%%i")  

 
Для начала - посмотри справку по командам for, dir, findstr и del.
Очень сложно связно объяснить, что делает каждый символ в этой строке.
Я сейчас 20 минут пытался сформулировать внятное объяснение - ничего так и не получилось.

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 23:07 24-04-2008
Tipulatoid



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

Цитата:
не мог бы кто-нибудь пояснить этот кусочек когда-то приведенного тут кода...прям по частям по буковкам если можно...  

Действительно, связно объяснить сложно. Надеюсь, объясню кое-что:
 
for /f "tokens=*" %%i in ('dir /b /s /a c:\1') do (echo %%~ti | findstr /v %date% 1>nul && del /q "%%i")
 
For (цикл) - конструкция, позволяющая выполнять команды (они идут после DO) для каждого из элементов выбранного множества  
 
Какое именно множество будет обрабатываться циклом - указываем в первых скобках после IN В нашем случае множество это - вывод команды dir /b /s /a c:\1 Набери ее в консоли без кавычек и посмотри результат. Разберем ее:
 
dir - выводит список файлов и папок
c:\1 - целевая папка, чье содержимое надо отобразить
/b - ключ, указывающий выводить только имена файлов и папок, без прочей информации
/s - показать содержимое не только целевой папки, но и ее подпапок
/a:-d - из всего содержимого выводить все НЕпапки, т.е. файлы
 
Поиграй с командой dir , добавляя/удаляя ключи и посмотри результаты
 
итак, в целом dir /b /s /a c:\1 выводит только имена файлов в целевой папке и ее подпапках.  Эти имена мы и обрабатываем командами, идущими после DO
 
Дальше разберем for  
"delims=?" (в данном примере нет за ненадобностью) нужно для того, что разбить обрабатываемый элемент множества на части. Например, пусть  разбираемый элемент у нас - фраза "в пруду рыба" Если у нас стоит "delims=р" мы разобьем ее на 3 части: "в п" ; "уду " ; "ыба" и можем по отдельности подставлять их в команды после DO
Если бы было в нашем рассматриваемом примере "delims=.", например, то мы бы разбили каждый элемент множества (т.е. имена файлов) на части - собственно имя и расширение и могли бы работать с ними по отдельности.
Если "delims=" не указан прямо (как в нашем случае), то разделителем считается знак пробела
"tokens=?" нужно для того, чтобы указать какие части элемента множества нам нужно взять для обработки в командах после DO. В примере с фразой "в пруду рыба" "delims=p tokens=1,3" означает, что мы выбираем для обработки 2 части элемента множества - "в п" и "ыба" ; "delims=p tokens=1-3" - означает, что берем части с 1-ой по 3-ью.
в нашем случае "tokens=*" без всякого delims - говорит что для обработки мы будем брать элемент множества целиком, не разбивая его на части.
 
%%i - это как мы будем обозначать первую часть каждого элемента множества для подстановки его в командах, идущих после DO В нашем случае мы берем весь элемент множества (имя файла) целиком, и потому 2-ой, 3-ей и т.д. части нет. Если бы они были, мы бы обозначали в командах после DO 2-ую часть - %%j 3-ью -%%k и т.д., т.е. по алфавиту.
 
Далее, команды, идущие после DO, т.е. собственно, что нужно сделать с каждым элементом множества
 
echo %%~ti | findstr /v %date% 1>nul && del /q "%%i"
 
echo %%~ti  
%%~t? - этот модификатор сообщает дату последней модификации файла. Поскольку в %%i у нас забито имя обрабатываемого файла, то модификатор выведет дату последнего его изменения.
 
| - приказывает передать вывод предыдущей команды (т.е. дату модификации файла) для обработки следующей.
 
findstr /v %date% 1>nul
%date% - системная переменная, в которой содержится текущая дата. Набери echo %date% в консоли.
findstr - поиск строки-образца (в нашем случае текущей даты) в выводе предущей команды.  
findstr /v - вывод всех строк, что НЕ совпадают с образцом
1>nul не выводить на экран сообщения об ошибке в случае, если выводить нечего.
 
В целом вся команда - отфильтровать вывод от echo %%~ti , пропустить далее только то, что не содержит текущую дату, сообщения об ошибках не выводить.
 
&& - в случае успеха предыдущей команды (т.е. если через фильтр findstr прошло что-либо)
 
del /q "%%i" - удалить файл без запроса подтверждения.

Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 07:57 25-04-2008 | Исправлено: Tipulatoid, 14:55 25-04-2008
Kilich



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

----------
Честь превыше всего!
Верность превыше чести!

Всего записей: 267 | Зарегистр. 18-09-2006 | Отправлено: 09:07 25-04-2008
Tipulatoid



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

Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 10:36 25-04-2008
JI063uk



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите как при помоще бат файла запустить службу на компах которые прописаны в текстовом файле "Служба сообщений C:\WINDOWS\system32\svchost.exe -k netsvcs"
Пробывал через start не получяеться может есть другие варианты
 

Всего записей: 55 | Зарегистр. 24-01-2008 | Отправлено: 17:19 25-04-2008 | Исправлено: JI063uk, 17:21 25-04-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JI063uk
 
sc \\CompName start Messenger
sc /?  

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:04 25-04-2008
Elroir



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

Цитата:
1>nul не выводить на экран сообщения об ошибке в случае, если выводить нечего.

Чуть-чуть поправлю:
1>nul - не выводить на экран вывод предыдущей команды, а не ошибки.

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 20:51 25-04-2008
gryu



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги, помогите решить проблемку.  
Идея.
По телефонному звонку "блондинка" делает 2 клика на иконке батника и тот.  
1. Запускает программу проверки на необходимость обновления (сделано)
2. Пакует результат проверки в архив (сделано)
3. Выкладывает по FTP полученный файл на FTP сервер. (от тут то я и завяз)
Итак, как батником отправить по FTP файл на FTP сервер с логином и паролём на доступ (НЕ анонимус) и не стандартным портом (не 21)
 
Добавлено:
!!. Средствами виндовс. Т.е. вариант с установкой FTP клиента рассматривается, но не желателен.

Всего записей: 13035 | Зарегистр. 15-03-2006 | Отправлено: 22:04 25-04-2008
mozers



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gryu
curl -v -# -T filename.ext ftp://login:password@199.188.277.18:9621/dir/subdir/
или
ftp (но я так и не смог ее заставить работать в пассивном режиме. Только - актив).

Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 11:07 26-04-2008
Fantom 14



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

Всего записей: 322 | Зарегистр. 23-10-2004 | Отправлено: 21:07 26-04-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fantom 14
 
start /min test.cmd
 
Если это тот вопрос

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:09 26-04-2008
   

Страницы: 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 102 103 104 105 106 107 108

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd) 2
Widok (10-03-2009 12:39): Лимит страниц. Продолжаем здесь.


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru