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

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

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

Widok (19-11-2007 12:08): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 109 110 111 112 113 114 115 116 117 118

   

KLASS



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

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

Всего записей: 9918 | Зарегистр. 12-10-2001 | Отправлено: 04:28 24-09-2002 | Исправлено: Elroir, 19:35 11-09-2007
igor_andreev

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

Цитата:
У меня короткие имена отключены.

Ну и зря. Один какой-то "умник", стопудово никогда батников не писавший, написал в свой статье-опусе, что для ускорения работы системы надо отключать создание коротких имен и все в инете как попки давай за ним повторять это на всех сайтах и другим голову морочить.
Со отключением времени последнего доступа к файлам на NTFS я еще согласен, но короткие имена - нафих-нафих. Имена файлов с символами типа &,!,%,+ и т.п. периодически встречаются и только работать честному командному файлу мешают

Цитата:
про этот ENABLEDELAYEDEXPANSION в справке информации практически ноль.

Да толком то и нету, по всему интернету примеры-инфу выискивать приходиться. Я попробую вкратце описать, чем удобно применение ENABLEDELAYEDEXPANSION. По идее этот топик совсем начинающие батникописатели тоже читают, мож им полегче будет. Тыркайте_сюда
 

Цитата:
Оба варианта не работают:

Хм, у меня тоже не получается . Не сталкивался никогда еще с разделителем-кавычками. Увижу где решение - напишу. Если раньше никто не обьяснит.
 
Добавлено:
jeque
А эта менюшка у тебя корректно показывается, не козябрами? Попробовал только что на компе с русской XP, в реестре которой ничего с кодировками не делали. Пока не напишешь chcp 1251 - русские буквы не отображаются. Вывод то по умолчанию в CP866.

Код:
 
@echo off
chcp 1251
cls
... и т.д.
 

Всего записей: 1673 | Зарегистр. 08-12-2004 | Отправлено: 16:11 13-11-2005 | Исправлено: igor_andreev, 17:47 13-11-2005
Da_Neil



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

Цитата:
Один какой-то "умник", стопудово никогда батников не писавший, написал в свой статье-опусе, что для ускорения работы системы надо отключать создание коротких имен и все в инете как попки давай за ним повторять это на всех сайтах и другим голову морочить.  

Умник случаем не из Microsoft'a?  
 

Цитата:
Имена файлов с символами типа &,!,%,+ и т.п. периодически встречаются и только работать честному командному файлу мешают  

От прогресса не уйдёшь Нужно вырабатывать новые правила работы, а не делать всё по-старинке досовскими методами. Помню, какой-то сумасшедший админ всем советовал не держать ничего в папках с длинными именами, переименовать все системные папки и прочую досовскую ересь..
 

Цитата:
 Да толком то и нету, по всему интернету примеры-инфу выискивать приходиться. Я попробую вкратце описать, чем удобно применение ENABLEDELAYEDEXPANSION. По идее этот топик совсем начинающие батникописатели тоже читают, мож им полегче будет. Тыркайте_сюда  

За примеры спасибо, буду разбираться и копать..  
 
Ещё заметил, что в составном операторе не работают ни обычные комментарии, ни нового типа ( :: ) — скрипт сразу вываливается с ошибкой и прекращает выполнение.
 
Кстати, создавать метку EOF необязательно. Можно использовать оператор GOTO :EOF
 

Всего записей: 3420 | Зарегистр. 05-03-2002 | Отправлено: 20:41 13-11-2005 | Исправлено: Da_Neil, 20:43 13-11-2005
igor_andreev

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

Цитата:
Умник случаем не из Microsoft'a?

Угу, тамошний Сильно performance у тебя с отключением коротких имен повысился? Скажешь - комп летает. Дык он и у меня летает, и еще у кучи народа, не трогающих NtfsDisable8dot3NameCreation в реестре.

Цитата:
От прогресса не уйдёшь

Не в прогрессе дело, а в синтаксисе. Хоть ты кол на голове теши, а например "&" для комстроки - символ конца команды и начало следующей. И для Microsoft Command Shell 2005 года (MSH, которая пока в виде беты, но готовится на замену cmd.exe) - это тоже проблемка есть и будет. Буквально сегодня в MSH скормил wget-у ссылку, заканчивающуюся на  
...Bezumie.(rus).Kinoshniki.&.ShareReactor.ru.avi , не обратил внимания, что там "&". Ну в ответ умная MSH сказала "Missing or invalid property reference or expression. At line:1 char:93". Не идут умники в майкрософт по пути прогресса

Цитата:
Нужно вырабатывать новые правила работы, а не делать всё по-старинке досовскими методами.

И я согласен, и все согласны. И майкрософт так тоже решил и придумал язык с гораздо большими возможностями(VBScript). Ну их, эти батники...

Цитата:
Помню, какой-то сумасшедший админ всем советовал не держать ничего в папках с длинными именами,

Я не админ, но тоже сумасшедший Мне больше нравятся unix-овские названия папок, типа /usr /bin /home. Просто нравятся и мне с такими удобнее.

Цитата:
составном операторе не работают ни обычные комментарии, ни нового типа ( :: )  

Составной оператор - это что? А то я мало того, что не админ, еще и не программист Если внутри DO... имеешь ввиду, то REM точно работает, главное пустых строк не оставлять.

Цитата:
создавать метку EOF необязательно

Угу, по привычке написал. С таким же успехом я мог обозвать метку :END, :KANETZ_FAILA или еще как и тогда ее понадобилось бы создать. Батники просто быстро пишу, ни о чем особо не задумываясь.

Всего записей: 1673 | Зарегистр. 08-12-2004 | Отправлено: 22:18 13-11-2005 | Исправлено: igor_andreev, 22:45 13-11-2005
Da_Neil



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

Цитата:
Сильно performance у тебя с отключением коротких имен повысился? Скажешь - комп летает. Дык он и у меня летает, и еще у кучи народа, не трогающих NtfsDisable8dot3NameCreation в реестре.  

Может, и мелочь, а душу всё равно греет. Не вижу причин, чтобы не отключать их, тем более меня не волнует совместимость с 16-разрядным старьём и батниками с ошибками.  
 

Цитата:
Хоть ты кол на голове теши, а например "&" для комстроки - символ конца команды и начало следующей.  

Да, я долго (в основном от незнания) боролся с этой гадостью в своём релизерском скрипте, но в итоге поборол. Кавычки, кавычки, и ещё 'аз кавычки, това'ищ!
 

Цитата:
И я согласен, и все согласны. И майкрософт так тоже решил и придумал язык с гораздо большими возможностями(VBScript). Ну их, эти батники...  

Да, порою даже проще программу на VB.NET написать, чем с батниками мучиться..
 

Цитата:
Составной оператор - это что? А то я мало того, что не админ, еще и не программист Если внутри DO... имеешь ввиду, то REM точно работает, главное пустых строк не оставлять.  

Да, это то, что внутри DO, да И правда, дело было в пустых строках! Ох уж эти недокументированные функции продуктов MS!

Всего записей: 3420 | Зарегистр. 05-03-2002 | Отправлено: 22:52 13-11-2005
igor_andreev

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

Цитата:
Кавычки, кавычки, и ещё 'аз  

И они не всегда спасают к сожалению . Из последнего, что делал - батник с enabledelaedexpansion упорно не хотел передавать на архивирование файлы, в названии которых есть восклицательный знак, бо считал это началом переменной. Ну не напрямую архиватору, заархивировать то такие файлы без проблем. Там сложную муть я придумал, сначала в файл *.ddf список для makecab.exe, потом создать *.sed и *.inf для iexpress.exe и т.д., много действий. Пришлось переписывать полностью, без enabledelaedexpansion

Всего записей: 1673 | Зарегистр. 08-12-2004 | Отправлено: 23:29 13-11-2005 | Исправлено: igor_andreev, 23:45 13-11-2005
Da_Neil



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Восклицательные знаки в блоках enabledelayedexpansion экранируются с помощью ^^ (кто бы мог подумать? )

Всего записей: 3420 | Зарегистр. 05-03-2002 | Отправлено: 00:34 14-11-2005
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Da_Neil  
Шапку пора в топике делать И там собирать недокументированные фичи от майкрософт, то, про что они во встроенной справке не пишут. Мнооого пунктов таких наберется.

Всего записей: 1673 | Зарегистр. 08-12-2004 | Отправлено: 00:48 14-11-2005
Smitis



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

Цитата:
Ещё заметил, что в составном операторе не работают ни обычные комментарии, ни нового типа ( :: )

Я бы не сказал, что это коментарии "нового типа". Более того, это вообще не коментарии. Это метки  =) . То, что командный процессор не проверяет их синтаксис, а так, как на метку они не похожи, пропускает, не меняет смысла. Можно писать просто :любой текст. Если после двоеточия поставить любой недопустимый в метке символ, например, пробел, командный процессор всегда будет пропускать такие строки. Желающие могут считать это коментариями. Это, так - для информации.
 
А вообще, рекомендую читать хелп - ntcmds.chm
Например, в разделе "Основные понятия"/ "Общие сведения о командной оболочке" есть информация и о группировки команд (то, что в круглых скобках) и о символе ^ и о многом другом.
 
Единственное, что я не нашёл в этом хелпе - это операции с переменными среды замены и выделения подстроки типа %var:s1=s2% и %var:~n,m%
 

Всего записей: 2493 | Зарегистр. 09-02-2003 | Отправлено: 16:27 14-11-2005
Da_Neil



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Smitis
В книжке Microsoft Windows XP Inside Out Deluxe Edition вычитал :

Цитата:
Using the Rem command is the documented way to put comments in your batch programs, but it is intrusive because the command looks like part of the comment. Furthermore, if you leave echoing on while debugging a batch program, all your comments are echoed, making it harder to read commands. A better way to add comments to code is to use two colons:  
 
 :: This line is for humans; computers ignore it  
This kind of comment is never echoed. Be sure to use two colons; using only one creates a label that might conflict with a legitimate label. Although this commenting style is handy, we use the conventional Rem statement in this book's examples to avoid confusing readers who miss this tip.

 

Цитата:
Например, в разделе "Основные понятия"/ "Общие сведения о командной оболочке" есть информация и о группировки команд (то, что в круглых скобках) и о символе ^ и о многом другом.  

Там нет ни слова ни о разделении оператора ( ) на строки, ни про особенности delayedexpansion.. Всё методом тыка изучать приходится =/
 

Цитата:
 Единственное, что я не нашёл в этом хелпе - это операции с переменными среды замены и выделения подстроки типа %var:s1=s2% и %var:~n,m%  

Я бы тоже не прочь это найти..

Всего записей: 3420 | Зарегистр. 05-03-2002 | Отправлено: 16:44 14-11-2005
KapralBel



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

Цитата:
Единственное, что я не нашёл в этом хелпе - это операции с переменными среды замены и выделения подстроки типа %var:s1=s2% и %var:~n,m%

см. set /?

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 16:53 14-11-2005
jeque

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

Цитата:
а почему бы просто не написать:
copy /y *.dbf *.cdx и_т_д папка_куда
На крайний случай несколько команд copy и xcopy?

Можно, но хочется, чтобы скрипт был универсальным.
А что если мне нужно будет еще что-то делать с этим набором файлов, к примеру архивировать? Там тоже придется перечислять все маски. А если нужно будет добавить несколько масок?
Так и запутаться недолго.

Всего записей: 34 | Зарегистр. 29-02-2004 | Отправлено: 17:56 14-11-2005
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
jeque
Robocopy <источник> <получатель> <маска1> <маска2>... <маскаN> </ключи>
такой финт ушами тебя устроит?

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 15:20 15-11-2005
Smitis



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

Цитата:
см. set /?

Сдесь-то есть, отсюда и узнал. В справке - нет.
 
jeque

Цитата:
А что если мне нужно будет еще что-то делать с этим набором файлов, к примеру архивировать? Там тоже придется перечислять все маски. А если нужно будет добавить несколько масок? Так и запутаться недолго.

А использовать переменные:
set mask1=*.dbf *.cdx
set mask2=что_ещё.*
set fsrc=папка_откуда
set fdst=папка_куда
и так далее
 
Da_Neil
Насколько мне помнится, эти "коментарии" работали даже под ДОСом. Я рад, что в мелкософте тоже до этого додумались.    Двойное двоеточие хорошо тем, что набирать быстро и с меткой никогда не совпадёт  
А метод тыка - основной в иследовании возможностей командного процессора. Узнаёшь что-то новое - и сразу проверяешь во всевозможных вариантах, вдруг, что-то где-то не дописали. Например, использование символа ^

Всего записей: 2493 | Зарегистр. 09-02-2003 | Отправлено: 10:44 16-11-2005
scup



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть куча архивов в одной папке. Внутри архивов разные файлы, но с одинаковым названием. Например:
asdsd - архив, внутри файл test.dbf
xddss - архив, внутри файл test.dbf
Содержание файлов разное, только имена одинаковые.
Архивы формируются каждый день.
 
Задача: как извлечь архивы в определенную папку за определенный день (например, всегда за вчерашний от даты запуска батника), например, если седня вторник, извлекаем за понедельник, если за понедельник, то за пятницу (субботу, воскресенье пропускаем)

Всего записей: 556 | Зарегистр. 04-04-2003 | Отправлено: 13:00 29-11-2005
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
scup
А по какому принципу формируется имя архива?

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 13:20 29-11-2005
scup



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel Имя формируется случайным способои, закономерности нет, к чему можно привязаться, так это только к дате.

Всего записей: 556 | Зарегистр. 04-04-2003 | Отправлено: 14:39 29-11-2005
KapralBel



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

Цитата:
Имя формируется случайным способои

Это зря....
Тогда только через VBS/JS.
 
 
 
Добавлено:
scup
Немного погорячился...
Все зависит от установленной у тебя системы
* Если Win2000/XP/2003 - то возможно
* Если Win9x/ME - то без JS/VBS не обойтись

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 14:49 29-11-2005
scup



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel Угу WinXP, как реализовать?

Всего записей: 556 | Зарегистр. 04-04-2003 | Отправлено: 17:32 29-11-2005
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
scup
Сейчас сам батник не напишу (скоро ухожу и буду дня через 2), но идеи подсказать смогу
1. Список архивов dir >list.txt
2. Разбор текста при помощи команды FOR /? - получишь имена архивов и даты соответсвующие им
3. далее сравнение дат и распаковка архива
см. команды

FOR /?
SET /?
IF /?

 
PS. Геморрой еще тот - лучше сделай имена архивов типа <ГГГГММДД-Пояснение>

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:44 29-11-2005
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
scup
Два последних файла находятся так

Код:
 

@ECHO OFF
FOR /F "DELIMS=" %%A IN ('DIR /O:-D /A:-D /B "e:\backup\*.rar"') DO (
 IF DEFINED ARC_1 IF NOT DEFINED ARC_2 SET ARC_2=%%A
 IF NOT DEFINED ARC_1 SET ARC_1=%%A
)
 
ECHO %ARC_1%  
ECHO %ARC_2%
 
PAUSE

 
%ARC_1% - соответственно будет самый новый архив(сегодняшний?), %ARC_2% - тот, который тебе нужен.
Если батник будет стартовать до "сегодняшнего" архивирования

Цитата:
Архивы формируются каждый день.

то строчку ...SET ARC_2=%%A убери, достаточно будет самого нового файла %ARC_1%.
И про это кстати на второй странице этого топика написал KLASS, как найти самый новый или самый старый файл в папке при помощи dir.

Всего записей: 1673 | Зарегистр. 08-12-2004 | Отправлено: 19:11 29-11-2005 | Исправлено: igor_andreev, 09:25 01-12-2005
   

Страницы: 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 109 110 111 112 113 114 115 116 117 118

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


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru

Рейтинг.ru