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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
 
 
Старая версия первого сообщения

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

Всего записей: 1667 | Зарегистр. 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  
Шапку пора в топике делать И там собирать недокументированные фичи от майкрософт, то, про что они во встроенной справке не пишут. Мнооого пунктов таких наберется.

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



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

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

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

Всего записей: 2350 | Зарегистр. 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
Насколько мне помнится, эти "коментарии" работали даже под ДОСом. Я рад, что в мелкософте тоже до этого додумались.    Двойное двоеточие хорошо тем, что набирать быстро и с меткой никогда не совпадёт  
А метод тыка - основной в иследовании возможностей командного процессора. Узнаёшь что-то новое - и сразу проверяешь во всевозможных вариантах, вдруг, что-то где-то не дописали. Например, использование символа ^

Всего записей: 2350 | Зарегистр. 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.

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



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

Цитата:
Единственное, что я не нашёл в этом хелпе - это операции с переменными среды замены и выделения подстроки типа %var:s1=s2% и %var:~n,m%  
 
 
Да, хотелось бы услышать или почитать об этом, а то эти замены мне ни очем не говорят, особенно с восклицательными знаками. Кто-то может ликбез провести?
 
и еще:  
FOR /F "DELIMS=" %%A IN ('DATE /T') do SET A = %%AR  
DATE 01.01.1994
PAUSE
 
как дальше вернуть дату на компе, сохраненную в переменной?

Всего записей: 556 | Зарегистр. 04-04-2003 | Отправлено: 12:52 05-12-2005
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
scup
У меня прошел следующий финт ушами..
Echo %a%|Date

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



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel А у меня не прошел. Батник у тебя сохранил текущую дату, изменил дату и вернул сохраненную дату? Дай весь код.

Всего записей: 556 | Зарегистр. 04-04-2003 | Отправлено: 14:57 05-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