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

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



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

Код:
for /f %%D in ('dir /ad/b/s ^|sort /r') do rd %%D

 
Грамотно ли это

Всего записей: 2588 | Зарегистр. 15-04-2003 | Отправлено: 15:04 12-05-2009
romrub

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

Цитата:
Хочу сделать проверку, что бы имя файла было не больше 8 символов, а расширение не больше 3 + в файле не должно быть кириллических символов  
Нашел, что %~x3 %~n3 - дают имя файла и расширение отдельно  
Но как в bat-нике определить длину полученной строки?  

насчет подсчета длины строки буквально несколько постов назад 01MDM уже подсказал решение ..
 
Но может быть в данном случае и не обязательно считать длину ?
если имя больше 8 символов его короткое имя будет не совпадать с длинным, этим и воспользуемся
 
пусть %%i - переменная for-цикла
if "%%~ni"=="%%~sni" значит имя файла <=8 символов else имя файла >8 символов или содержит кириллицу.
Аналогично и для расширения: if "%%~xi"=="%%~sxi"
 
будет работать при условии, что на файловой системе включена поддержка формирования коротких 8.3-имен.
 
 
 
Добавлено:
rosalin

Цитата:
Код:for /f %%D in ('dir /ad/b/s ^|sort /r') do rd %%D  
 
 
Грамотно ли это  

 
если все эти временные каталоги предварительно формировать в специальном выделенном каталоге %tempDir%, который создавать каждый раз перед запуском основного батника, то проще видимо будет выполнить команду:
RD /s %tempDir%
или молча
RD /s /q %tempDir%
 
исчезнет все дерево подкаталов, включая и файлы
 
или я упустил что-то важное в задаче и в этих каталогах должно что-нибудь оставаться ?
 

Всего записей: 25 | Зарегистр. 18-03-2009 | Отправлено: 15:50 12-05-2009 | Исправлено: romrub, 16:05 12-05-2009
rosalin



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

Цитата:
если все эти временные каталоги предварительно формировать в специальном выделенном каталоге %tempDir%, который создавать каждый раз перед запуском основного батника, то проще видимо будет выполнить команду:  
RD /s %tempDir%  
или молча  
RD /s /q %tempDir%  

 
Все это делаю для решения следующей задачи
есть батник  
после его отработки остаються пустые каталоги  

Всего записей: 2588 | Зарегистр. 15-04-2003 | Отправлено: 16:06 12-05-2009
timka85

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
ваш код наконец заработал у меня! Была некая неточность в путях, но я ее исправил. За батник спасибо, но мне, если честно, нужен был не совсем батник... Я планировал создать, как минимум 5 батников и потом конвертировать их в .ехе Стартеры через bat2exe, чтобы не видно было окно, да и нажатий мышкой так меньше. Получается, увидел нужную папку для перемещения, тогда и запускай по порядковому названию Стартер. Понимаете?

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
По чьему-то совету из интернета сделала такой батник для бэкапа:
 
echo off
net use x: /delete /Y
net use x: \\voxco2\d$
 
C:\WINDOWS\system32\ntbackup.exe backup "@C:\Documents and Settings\Dinara.VOXCO1\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data\Voxco1_Backup.bks" /a /d "Набор создан 09.05.2009 в 22:26" /v:yes /r:no /rs:no /hc:off /m normal /j "Voxco1_Backup" /l:s /f "\\voxco2\d$\Backup Files\voxco1_Backup.bkf"
 
erase "x:\Backup Files\voxco1_Backup14.bkf" /Q
move "x:\Backup Files\voxco1_Backup13.bkf" "x:\Backup Files\voxco1_Backup14.bkf"
move "x:\Backup Files\voxco1_Backup12.bkf" "x:\Backup Files\voxco1_Backup13.bkf"
move "x:\Backup Files\voxco1_Backup11.bkf" "x:\Backup Files\voxco1_Backup12.bkf"
move "x:\Backup Files\voxco1_Backup10.bkf" "x:\Backup Files\voxco1_Backup11.bkf"
move "x:\Backup Files\voxco1_Backup09.bkf" "x:\Backup Files\voxco1_Backup10.bkf"
move "x:\Backup Files\voxco1_Backup08.bkf" "x:\Backup Files\voxco1_Backup09.bkf"
move "x:\Backup Files\voxco1_Backup07.bkf" "x:\Backup Files\voxco1_Backup08.bkf"
move "x:\Backup Files\voxco1_Backup06.bkf" "x:\Backup Files\voxco1_Backup07.bkf"
move "x:\Backup Files\voxco1_Backup05.bkf" "x:\Backup Files\voxco1_Backup06.bkf"
move "x:\Backup Files\voxco1_Backup04.bkf" "x:\Backup Files\voxco1_Backup05.bkf"
move "x:\Backup Files\voxco1_Backup03.bkf" "x:\Backup Files\voxco1_Backup04.bkf"
move "x:\Backup Files\voxco1_Backup02.bkf" "x:\Backup Files\voxco1_Backup03.bkf"
move "x:\Backup Files\voxco1_Backup01.bkf" "x:\Backup Files\voxco1_Backup02.bkf"
move "x:\Backup Files\voxco1_Backup.bkf" "x:\Backup Files\voxco1_Backup01.bkf"
 
net use x: /delete /Y
 
Он работает, но... Нельзя ли сделать чтобы при переименовании файлов сохранялись даты создания файлов? Заранее спасибо!

Всего записей: 148 | Зарегистр. 09-07-2004 | Отправлено: 17:05 12-05-2009
HaK1R



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mew
А что если при создании бэкапа в название писать еще текущую дату, она и будет датой создания?
 
Добавлено:
yahan2
А вот так попробуй

Код:
 
@echo off
setlocal EnableDelayedExpansion
for /f "tokens=*" %%i in ('dir /a-d /b') do (call:1 "%%~ni" "%%~xi")
pause
goto:eof
 
:1
set "name=%~1"
set "broadening=%~2"
set /a a=0
if "!name!"=="!name:~0,8!" (set /a a+=1)
if "!broadening:~1!"=="!broadening:~1,3!" (set /a a+=1)
if !a!==2 (echo !name!!broadening!)
goto:eof
 

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 18:33 12-05-2009 | Исправлено: HaK1R, 20:29 13-05-2009
Mew



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

Цитата:
А что если при создании бэкапа в название писать еще текущую дату, она и будет датой создания?

То есть добавить в имя файла %date% ?
Тогда и все эти переименования не нужны. Осталось только придумать как удалять файлы по маске старее установленной даты.  
FORFILES попробовать?
 
Добавлено:
@echo off
net use x: /delete /Y
net use x: \\voxco2\d$
 
C:\WINDOWS\system32\ntbackup.exe backup "@C:\Documents and Settings\Dinara.VOXCO1\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data\Voxco1_Backup.bks" /a /d "Набор создан 09.05.2009 в 22:26" /v:yes /r:no /rs:no /hc:off /m normal /j "Voxco1_Backup" /l:s /f "\\voxco2\d$\Backup Files\voxco1_Backup_%date%.bkf"
 
FORFILES /P "x:\Backup Files" /M voxco1_*.bkf /D -14 /C "cmd /C del /q /f @FILE"
 
net use x: /delete /Y
 
Нарисовала такое. Правильно это?

Всего записей: 148 | Зарегистр. 09-07-2004 | Отправлено: 19:16 12-05-2009 | Исправлено: Mew, 19:17 12-05-2009
romrub

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

Цитата:
Сделал так  
Код:
for /f %%D in ('dir /ad/b/s ^|sort /r') do rd %%D
Грамотно ли это
 
Все это делаю для решения следующей задачи
есть батник  
после его отработки остаються пустые каталоги    

 
в такой постановке этот скрипт верх изящества
 
но надежней будет так

Код:
for /f "tokens=*" %%D in ('dir /ad/b/s ^|sort /r') do rd "%%D"


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



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

Цитата:
FORFILES /P "x:\Backup Files" /M voxco1_*.bkf /D -14 /C "cmd /C del /q /f @FILE"

У меня нет этого утилита

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 20:35 12-05-2009 | Исправлено: HaK1R, 22:53 12-05-2009
romrub

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

Цитата:
Тогда и все эти переименования не нужны. Осталось только придумать как удалять файлы по маске старее установленной даты.  

 
есть славная утилита purge.exe, которая только и делает, что удаляет файлы заданной старости, но аккуратней, удаляет без предупреждения !
погугли
 
если не загоняться на решении именно батником, то имхо, лучший вариант
 
уточнение: purger.exe

Цитата:
    Author:    Alexander Gorlach, alex@gorlach.koenig.su
    Home page: http://www.enet.ru/~gorlach/Purger/
    Status:       freeware, You can use this program free on You own risk
    Comments:  sorry for my ugly English

Всего записей: 25 | Зарегистр. 18-03-2009 | Отправлено: 21:36 12-05-2009 | Исправлено: romrub, 09:55 13-05-2009
Mew



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

Цитата:
Цитата:FORFILES /P "x:\Backup Files" /M voxco1_*.bkf /D -14 /C "cmd /C del /q /f @FILE"  
У меня нет этого утилита  

Странно, как же нет? У меня и в w2k3 и в sbs2003 есть по умолчанию. Даже в "Центре справки и поддержки" (в винде) есть ее описание.
 
romrub

Цитата:
есть славная утилита purge.exe, которая только и делает, что удаляет файлы заданной старости, но аккуратней, удаляет без предупреждения !  
погугли  
 
если не загоняться на решении именно батником, то имхо, лучший вариант

Ну коли есть штатное встроенное средство делающее нужное, то этого мне вполне достаточно.

Всего записей: 148 | Зарегистр. 09-07-2004 | Отправлено: 21:49 12-05-2009
HaK1R



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
У меня с кодировкой проблемы
 

Код:
 
echo Привет
pause
 

скриншот 1
 

Код:
 
chcp 1251
echo Привет
chcp 866
pause
 

скриншот 2
 
http://files.mail.ru/XBXR03
шрифт Lucida Console

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 23:01 12-05-2009
rosalin



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

Цитата:
в такой постановке этот скрипт верх изящества  
 
но надежней будет так  
 
Код:for /f "tokens=*" %%D in ('dir /ad/b/s ^|sort /r') do rd "%%D"

 
 
 
скрипт срабатывает
Спасибо

Всего записей: 2588 | Зарегистр. 15-04-2003 | Отправлено: 14:40 13-05-2009 | Исправлено: rosalin, 15:13 13-05-2009
neon



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
требУется помощь
 
есть папка, в которУю помещаются файлы такого вида
 
market_db_200905121548.BAK
market_db_200905121809.BAK
market_db_200905131742.BAK
 
цифры, это год, мес., день, часы и мин. создания архива.
 
это архивные копии базы данных.
 
Задача. Необходимо из множества этих файлов выбрать последний, сжать его с помощью архиватора rar (архиватор постараюсь настроить сам), после Успешного сжатия отправить сжатый файл на заданный диск (простая операция копирования).

----------
«То, что я понял, — прекрасно, из этого я заключаю, что остальное, что я не понял, — тоже прекрасно». Сократ.

Всего записей: 1876 | Зарегистр. 20-10-2003 | Отправлено: 12:46 14-05-2009 | Исправлено: neon, 12:51 14-05-2009
Maza_Faka



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

Код:
 
@Echo Off
 
For /F %%A In ('Dir *.BAK /B /O:-D') Do (Rar.exe a %%~nA.rar %%A) & GoTo :EOF
 

Батник поместить в папку с файлами.

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



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Maza_Faka
 
не понял где Указывается пУть для копирования


----------
«То, что я понял, — прекрасно, из этого я заключаю, что остальное, что я не понял, — тоже прекрасно». Сократ.

Всего записей: 1876 | Зарегистр. 20-10-2003 | Отправлено: 14:36 14-05-2009
Maza_Faka



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

Цитата:
где Указывается пУть для копирования


Код:
 
@Echo Off
 
Set OutDir=C:\Temp
 
For /F %%A In ('Dir *.* /B /O:-D') Do (Rar.exe a %%~nA.rar %%A) & (Copy %%~nA.rar %OutDir%) & GoTo :EOF
 

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:56 14-05-2009
neon



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
"Set OutDir=C:\Temp" наверно правильно бУдет "Set OutDir=C:\Temp\", а то он создает файл с именем Temp.
 
немного доработал опции архиватора, а так работает замечательно. Благодарю.

----------
«То, что я понял, — прекрасно, из этого я заключаю, что остальное, что я не понял, — тоже прекрасно». Сократ.

Всего записей: 1876 | Зарегистр. 20-10-2003 | Отправлено: 16:49 14-05-2009 | Исправлено: neon, 18:14 14-05-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток.
 
Комрады помогите с утилитой forfiles
Ну никак не получается её найти.
Целый день Гуглю, все ссылки на сайт Микрософта
а там вообще труба, на этом сайте так всё запутано.
Ftp Микрософта , ну совсем не хочет открывается у мня!
 
Может у кого завалялась она.? Киньте плиз мню на
Sen-sei_1 собака mail.ru
 
Спс.

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cosmogor
Первая ссылка по запросу "download forfiles"
 
http://www.dynawell.com/download/reskit/microsoft/win2000/forfiles.zip

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