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

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

Модерирует : KLASS, IFkO

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачи на bat-файлах 7
(часть 1, часть 2, часть 3, часть 4, часть 5, часть 6)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<<>>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Делаем паузу в командном файле стандартными средствами Windows
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    ponand

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

    Всего записей: 56 | Зарегистр. 14-07-2008 | Отправлено: 10:05 14-10-2009 | Исправлено: ponand, 10:08 14-10-2009
    BVV63



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

    Цитата:
    Подскажите а сколько оперативной памяти может потреблять батник?

    Зависит от приложений, запускаемых из него. Не более, чем самое ресурсоёмное приложение из них и плюс оперативка, которую занимает командный процессор.

    Цитата:
    И можно ли ее очистить без перезагрузки?

    Она сама должна очищаться после завершения работы батника. Если не очищается, какое-то из приложений, запускаемых из батника, кривое.
     
    Добавлено:
    Прошу прощения, я поискал в версии для печати что-то типа "не работает for", не нашёл, а одно слово "for" для поиска использовать как-то глупо.
    Имеется пакетник, использующий конструкцию "for.. in.. do". Так вот, у меня на Висте он работал, а у коллеги на XP, почему-то, - нет. Теперь я перешёл на Семёрку, и пакетник перестал работать и у меня:
    "'FOR' is not recognized as an internal or external command, operable program or batch file."
    Т. е. система его не распознаёт. Я бы грешил на Семёрку, ежели бы не встречал подобные глюки в XP (см. выше). Может, сам батник кривоват, приведу его на всякий случай и буду благодарен за помощь.
    Подробнее...

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 10:37 14-10-2009 | Исправлено: BVV63, 10:41 14-10-2009
    ponand

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

    Цитата:
    Зависит от приложений, запускаемых из него. Не более, чем самое ресурсоёмное приложение из них и плюс оперативка, которую занимает командный процессор

    использую циклы For /f и For /r поиск строки Findstr  записи в файл echo больше ни чего не вызываю а выделеная память увеличивается как на дрожжах и дойдя до 1,3 гб батник начинает глючить

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

    Findstr может быть кривым?

    Всего записей: 56 | Зарегистр. 14-07-2008 | Отправлено: 11:16 14-10-2009 | Исправлено: ponand, 11:23 14-10-2009
    BVV63



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

    Цитата:
    Findstr может быть кривым?

    А Винда может быть кривая? Это ж виндузная команда. Попробуйте в виде эксперимента ещё какой-нить цикл запустить без Findstr. Если всё будет OK - значит он виноват.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 11:24 14-10-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ponand
    Все зависит от батника. Попробуй такой:

    Код:
     
    @echo off
    setlocal
     
    for /l %%i in (0,1,10) do (
        for /l %%j in (0,1,100) do (
            for /l %%k in (0,1,1000) do set var_%%i_%%j_%%k=%%k
        )
    )
    set var_ 1>1.txt
     

    Я так и не дождался когда он отработает... Через 35 мин. плюнул и завершил. Расход памяти потребляемой процессом вырос до ~12Mb, а загрузка процессора составляла в среднем 50%.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:25 14-10-2009
    BVV63



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

    Цитата:
    Расход памяти потребляемой процессом вырос до ~12Mb

    Скажите, а файл 1.txt тоже стал размером 12Mb?

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 12:36 14-10-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
     
    так получается, что explorer (mouse doubleclick *.bat) не правильно (не как cmd, не как default-запрограммировано) обрабатывает обращение в батнике к аргументу %0 (соответственно, это, по логике, должно приводить к сбоям в исполнении батника при его вызове explorer/mouse doubleclick'om и, возможно, при вызове батника через *.lnk) ?
    P.S.
    может и обращение к другим аргументам тоже?
    от чего, как думаешь, это зависит? (я, вроде, в реестре ничего существенного в критических настройках не менял...)

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 12:39 14-10-2009
    FXPELIVE

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Помогите с лабой не могу вкурить как это сделать:
    Цитата:
    Создайте командный файл, в котором с помощью оператора FOR создаются каталоги и файлы, имена и местоположение которых задаются как параметры. При наличии в указанном каталоге такого-же объекта должно быть выдано соответствующие сообщение.

    Всего записей: 348 | Зарегистр. 27-04-2006 | Отправлено: 12:44 14-10-2009 | Исправлено: FXPELIVE, 15:16 14-10-2009
    ponand

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

    Цитата:
    Все зависит от батника. Попробуй такой

    попробывал и сразу заметил разницу с моим батником

    Цитата:
    Расход памяти потребляемой процессом вырос до ~12Mb

    при этом объем выделения памяти растет пропорционально потребляемой процессом (cmd.exe) в моем случае расход памяти потребляемой процессом (cmd.exe) всегда составляет примерно ~1,2 мб а при достижении объема выделения памяти 1,3 гб батник начинает глючить
    складывается токое ощущение что Findstr находясь в нутри цикла For каждый раз только открывает файл для поиска и он остается открытым и при следующем проходе открывает его еще раз и так до тех пор пока память полностью не закончится при этом если даже убить процесс объема выделения памяти меньше не становится!

    Всего записей: 56 | Зарегистр. 14-07-2008 | Отправлено: 14:55 14-10-2009
    01MDM



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

    Цитата:
    Скажите, а файл 1.txt тоже стал размером 12Mb?

    Я не дождался, прервал выполнение. Файл должен был создаться только после присвоения всем переменным значения, просто интересно есть ли ограничения на кол-во переменных или вопрос памяти? В PowerShell по умолчанию 4096. А высчитывать возможный размер конечного файла...
    В принципе можно. Если всего создается 10*100*1000=1000000 переменных и каждая строка в 1.txt составляет (по первой переменной (var_0_0_0=0) 13байт c переносом строки) то это получается 13000000 байт или приблизительно 12 мегабайт. К этому прибавить неучтенные байты из названий и значений - допустим еще 2 мегабайта.  
     
     
    Добавлено:
    FXPELIVE

    Цитата:
    Создайте командный файл, в котором с помощью оператора FOR создаются каталоги и файлы, имена и местоположение которых задаются как параметры.

    Задача не полная, как отличить что создавать, каталог или  файл? По каким признакам? Можно создать папку:
    md C:\1.txt
     
    А можно файл:
    cd.>C:\1.txt

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:17 14-10-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    никак не могу понять, где ошибка:
    вот скрипт:
    echo on
     
    :type1
    type 83572.txt
    if not ErrorLevel 0 (goto type1)
     
    pause
     
    после if not ErrorLevel 0 (goto type1) он сразу перескакивает на pause, а не возвращается на метку :type1
    вот output:
    G:\scripts>echo on
     
    G:\scripts>type 83572.txt
    Не удается найти указанный файл.
     
    G:\scripts>if not ErrorLevel 0 (goto type1 )
     
    G:\scripts>pause
    Для продолжения нажмите любую клавишу . . .
     

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 17:22 14-10-2009
    01MDM



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

    Код:
     
    if not %errorlevel%==0 (goto:type1)
     


    Код:
     
    type 83572.txt 2>nul || goto:type1
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:42 14-10-2009
    NIKZZZZ



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

    Цитата:
    if not ErrorLevel 0 (goto type1)  

    Здесь непонятно, к чему относится "not"
    Такая строка более корректна.

    Код:
    if not %ErrorLevel%==0 (goto type1)

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 17:45 14-10-2009
    mugil_cephalus

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

    Цитата:
    if not %errorlevel%==0 (goto:type1)  

     
    NIKZZZZ
     

    Цитата:
    if not %ErrorLevel%==0 (goto type1)

     
    дело в том, что мой скрипт -
    Цитата:
    if not ErrorLevel 0 (goto type1)

     - это полная копия кода из книги уильям р. станек "командная строка ms win"
     
    01MDM
     
    1) в твоем коде - (goto:type1) перед label'om type1 стоит ":" - а оно необходимо?  
    NB:  
    F:\Documents and Settings\admin>goto /?
    Передача управления содержащей метку строке пакетного файла.
     
    GOTO метка
     
    ------------------
    А не GOTO :метка
     
    2) в твоем коде - (goto:type1) отсутствует пробел - это тоже необходимо?

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 18:16 14-10-2009 | Исправлено: mugil_cephalus, 18:18 14-10-2009
    wolf0425



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

    Цитата:
    соответственно, это, по логике, должно приводить к сбоям в исполнении батника

    если батник криво написан - запросто, есго же и из cmd можно очень по разному запустить - в том числе и с указанием полного пути.
     

    Цитата:
    :type1
    type 83572.txt
    if not ErrorLevel 0 (goto type1)
    pause
    после if not ErrorLevel 0 (goto type1) он сразу перескакивает на pause, а не возвращается на метку  
    так вроде все верно.  
    (ErrorLevel 0) по определению true, так как меньше нуля ErrorLevel  не бывает, if ErrorLevel 0 - это %ErrorLevel% >= 0
     

    Цитата:
     - это полная копия кода из книги уильям р. станек "командная строка ms win"  

    хорошая трава была у автора
     

    Цитата:
    1) в твоем коде - (goto:type1) перед label'om type1 стоит ":" - а оно необходимо?  
    оно удобно, делает goto :метка и call :метка похожими.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 19:01 14-10-2009
    mugil_cephalus

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

    Цитата:
    так вроде все верно.  
    (ErrorLevel 0) по определению true, так как меньше нуля ErrorLevel  не бывает, if ErrorLevel 0 - это %ErrorLevel% >= 0  

     
    я что-то не понял, но, у меня этого - 83572.txt - файла точно нет, поэтому может быть все, что угодно, но не ноль и конструкция if not ErrorLevel 0 должна давать true  

    Цитата:
    G:\scripts>type 83572.txt  
    Не удается найти указанный файл.
    (может ты not не заметил)
     
    if not ErrorLevel 0 будет false только если ot'type'tsya файл 83572.txt  
     
    я, кстати, думаю, что правы 01MDM и NIKZZZZ, просто не думал, что в книге синтаксическая ошибка
     
    Добавлено:
    wolf0425

    Цитата:
    если батник криво написан - запросто, есго же и из cmd можно очень по разному запустить - в том числе и с указанием полного пути.

    я имел ввиду, что щелкну крысой по *.bat'u, который содержит скрипт: команда %0

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 19:15 14-10-2009 | Исправлено: mugil_cephalus, 19:28 14-10-2009
    NIKZZZZ



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

    Цитата:
    if not ErrorLevel 0 будет false только если ot'type'tsya файл 83572.txt  

    Гарантировано:

    Код:
    if %errorLevel%  NEQ 0 goto type1

    И лучше использовать именно такой синтаксис.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 19:52 14-10-2009 | Исправлено: NIKZZZZ, 19:53 14-10-2009
    mugil_cephalus

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

    Цитата:
    так как меньше нуля ErrorLevel  не бывает

    уильям р. станек указывает, что %errorlevel% выдается меньше нуля (например, -2) при арифметических ошибках - set /a
    правда, я не проверял его слов

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 19:55 14-10-2009
    NIKZZZZ



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

    Цитата:
    уильям р. станек указывает, что %errorlevel% выдается меньше нуля

    Код ошибки может быть любым числом, в том числе и отрицательным. Определяется только разработчиком программы. Либо это надо проверять экспериментально, либо обращаться к документации. Проще проверить.
     
    Пример

    Код:
    set /a x=1/0
    echo %ErrorLevel%

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 20:50 14-10-2009
    mugil_cephalus

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

    Цитата:
    if %errorLevel%  NEQ 0 goto type1  

    может синтаксис:
    if %errorLevel%  NEQ 0 (goto type1)
    ???

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 21:14 14-10-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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru