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

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

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

vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:53 09-01-2011 | Исправлено: mazafakermazafaka, 11:22 04-06-2011
    NIKZZZZ



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

    Цитата:
    так наверно оно юзеру и не нужно.  

     

    Цитата:
    @IF "%ERRORLEVEL%"=="1" блаблабла
    @IF "%ERRORLEVEL%"=="2"  

     
    Судя по коду , нужно, если , конечно не анализируется результат блаблабла

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 21:31 01-06-2011
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ASE_DAG
    Цитата:
    поскольку без кода возврата скрипт завершиться не может, не указывая его, вы фактически указываете ноль, т.е. «все ОК» — а это очевидная дезинформация
    вообще-то при отсутствии каталога указанный код производит выход из батника с кодом 1, а вовсе не с кодом ноль.
    А при том что возвращаемый батником код заказчику хоть как-то интересен только если он вообще знает что это такое - иначе как очевидно безграмотным умничаньем я такое замечание расценивать не могу
     
    Добавлено:

    Цитата:
     Судя по коду , нужно, если , конечно не анализируется результат блаблабла  
    я бы не поручился, что анализировать юзер хочет результат блаблабла при вводе 1,  а не результат собственного ввода отличного от 1.
    Кому нужен возвращаемый код ошибки - так переменные не обзывают, да
    в любом случае, после принудительного присваивания %ERRORLEVEL% - ожидать увидеть там код ошибки - слишком самонадеянно.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 21:37 01-06-2011 | Исправлено: wolf0425, 21:49 01-06-2011
    A1eksandr1



    Модератор
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    wolf0425
    Спасибо за помощь, чтобы разговор был предметным, внесу ясность, выложив бантик (собираю для консультанта все необходимые операции в одну кучу)
    Интересно то, что сейчас разнёс на большое расстояние эти 2 ввода и переменная сново перестала переназначаться.
    http://rghost.ru/8962691/private/8c6ba4ed5a4738cee68ac12b06cb98bd
    После запуска бантика введите 20, там будет 2ой ввод числа, который у меня не работает

    Всего записей: 7259 | Зарегистр. 10-12-2007 | Отправлено: 21:48 01-06-2011
    wolf0425



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

    Цитата:
     Интересно то, что сейчас разнёс на большое расстояние эти 2 ввода и переменная сново перестала переназначаться.  
    никуда ты не разнес - как в примере выше там опять присваивание и печать внутри одних ()
    при обработке скобок - сначала все %переменные% в скобках заменяются своими значениями а только потом происходит выполнение каких-то команд в скобках.
    соответственно - присваивается там нормально, а вот печатается конечно же 20...
     и будь ласка, переименуй переменную например в %_ERRORLEVEL% или как-то ещё - имя действительно зарезервировано и не нужно привыкать его использовать.
     
    И, кстати, вписывать @ в начало каждой строки после @echo off - как бы незачем...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 21:52 01-06-2011 | Исправлено: wolf0425, 21:56 01-06-2011
    A1eksandr1



    Модератор
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    wolf0425
    Суть в том, что если я подрят делаю два ввода (просто для проверки), то оно работает:
    set /p ERRORLEVEL=Введите номер варианта запуска и нажмите клавишу ENTER:  

    Код:
    @ECHO Выполняю операцию № %ERRORLEVEL%! Ожидайте...
    set /p ERRORLEVEL=Введите номер варианта запуска и нажмите клавишу ENTER:  
    @ECHO Выполняю операцию № %ERRORLEVEL%! Ожидайте...

    Первый раз отображается 1ое число, а второй - 2ое введённое
     
    А в выложенном мной бантике, где второй ввод идёт ниже, в переменной остаётся старое число, введённое раньше

    Всего записей: 7259 | Зарегистр. 10-12-2007 | Отправлено: 21:56 01-06-2011
    wolf0425



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

    Цитата:
     А в выложенном мной бантике, где второй ввод идёт ниже, в переменной остаётся старое число, введённое раньше
    неверно - в переменной там новое число, а печатается после её ввода - старое, так и должно происходить внутри скобок ()

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 21:58 01-06-2011
    A1eksandr1



    Модератор
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Если присваивается нормально, а просто ECHO выводит старое значение, меня это устраивает.
    Если я далее в этом ифе продолжу работу с %ERRORLEVEL% в др командах (DEL и COPY например), не будет ли он тоже старым. Впрочем на практике сейчас и увижу

    Всего записей: 7259 | Зарегистр. 10-12-2007 | Отправлено: 22:01 01-06-2011
    wolf0425



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

    Цитата:
    Если я далее в этом ифе продолжу работу с %ERRORLEVEL% в др командах (DEL и COPY например), не будет ли он тоже старым.  
    конечно же будет - ВСЕ места использования %ERRORLEVEL% внутри скобок - заменяются на значение %ERRORLEVEL% ДО выполнения первой команды в скобках, ты вообще читал что я тебе выше написал?
     
    или избавляйся от скобок или ставь в начало батника setlocal enabledelayedexpansion и переходи с %переменных% на !переменные!
     
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 22:03 01-06-2011 | Исправлено: wolf0425, 10:50 02-06-2011
    A1eksandr1



    Модератор
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    wolf0425
    Благодарю, разобрался, наверное сплю уже.
    Привык к Си, Фортрану, там никогда такой логики не встречал

    Всего записей: 7259 | Зарегистр. 10-12-2007 | Отправлено: 22:12 01-06-2011
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz дополнил утилиту, для закачивания файлов, новыми возможностями. Теперь она может получать размер файла, дату/время и много другой информации при размере утилиты 4 КБ.
    Желающие могут потестировать.
    Подробности в README внутри архива. Скачать.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 22:23 01-06-2011
    HA3APET

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    GORA2
    Здорово, я как раз искал автора этой утилиты. Умеет ли она обновлять файл если по удалённому адресу он новее? Есть ли индикатор скачивания?
    Если можно опишите на примере.

    Всего записей: 314 | Зарегистр. 28-01-2009 | Отправлено: 00:23 02-06-2011
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    HA3APET
    отвечу за автора
    индикатора скачивания нет, а со сравнением файлов вероятно придется поплясать  
    делая запрос даты с N=11 с последующим преобразованием отданного (напр. "Thu, 26 May 2011 19:03:39 GMT") до чистой даты и локального запроса средствами например wmic c тем же форматом даты и последующим сравнением кто свежее...
     
    прога отличная компактная но под конечные нужды придется повертеть напильником

    ----------
    Intel Ci7-2600K 3.4@4.5 Ghz/GeForce GTX 550 Ti 1024Mb/240Gb SSD+9Tb HDD's/RAM 16 Gb DDR3 1600/23" ACER T231Hbmid Multi-Touch Sensor Display

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 02:43 02-06-2011
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    All
    Что-то я торможу. Надо в процедуру передать в параметре строку, параметр должен быть один, в строке возможны кавычки. Нифига не выходит.
    Код такой:

    Код:
    @echo off
    call:proc "тут должна быть "фраза в кавычках" вот"
    goto:eof
     
    :proc
    echo %~1
    exit /b
     

    Наверное туплю, но не могу сообразить как кавычки экранировать.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 10:29 02-06-2011 | Исправлено: res2001, 10:29 02-06-2011
    wolf0425



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

    Цитата:
    Надо в процедуру передать в параметре строку, параметр должен быть один, в строке возможны кавычки.
    передавать через переменную, а не в параметре  - почему-то неприемлемо?
     
    а через параметр передавать не-имя - наверно только так:
     

    Код:
    @echo off
    chcp 1251
     
    call:proc "тут должна быть "фраза  в  кавычках" вот"
    goto:eof
     
    :proc
    echo %*
     
    exit /b  
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 10:46 02-06-2011 | Исправлено: wolf0425, 10:48 02-06-2011
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    wolf0425
    %* не вариант - в реальной процедуре еще параметры есть.
    В переменной приемлемо, уже лабаю с переменной  
    спс.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 10:57 02-06-2011
    smirnvlad

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

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

    удвоить кавычки, затем удалить лишние

    Код:
     
    @echo off
    set "par1=тут должна быть "фраза в кавычках" вот"
    call :proc "первый" "%par1:"=""%"
     
    call :proc "второй" "тут должна быть ""фраза в кавычках"" вот"
     
    goto:eof
     
    :proc
    echo %~1
    set "fp=%~2"
    set "fp=%fp:""="%"
    echo %fp%
     
    exit /b  
     

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 10:58 02-06-2011
    res2001



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

    Цитата:
    удвоить кавычки, затем удалить лишние  

    То же можно, но с переменной короче.
     
     
    Добавлено:
    Подумал еще, что можно заменить двойные кавычки на одинарные, строка нормально передается. Меня в принципе устроит, но все равно потребуется промежуточная переменная, а тут уже можно и не заменять.
    В общем остановился на варианте передачи через переменную.
    wolf0425, smirnvlad - спасибо!
    ЗЫ: Почему то зациклился на экранировании, другие варианты не рассматривал. Решил привлечь коллективный разум
    Видимо в этой ситуации экранировать не получится.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 11:06 02-06-2011 | Исправлено: res2001, 11:15 02-06-2011
    GORA2



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

    Цитата:
    Умеет ли она обновлять файл если по удалённому адресу он новее?

    Последняя версия умеет.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 15:30 02-06-2011
    5peciali5t



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

    Цитата:
    Последняя версия умеет.

    должно быть невнимательно ознакомился с ридми... каким образом должна выглядеть команда проверки файла на сервере с уже имеющимся у пользователя?

    ----------
    Intel Ci7-2600K 3.4@4.5 Ghz/GeForce GTX 550 Ti 1024Mb/240Gb SSD+9Tb HDD's/RAM 16 Gb DDR3 1600/23" ACER T231Hbmid Multi-Touch Sensor Display

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 20:02 02-06-2011
    GORA2



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

    Цитата:
    каким образом должна выглядеть команда проверки файла на сервере с уже имеющимся у пользователя?


    Код:
    DOWNLOAD+.EXE http://bomz-co.narod.ru/ENHANCER.zip
    echo %ERRORLEVEL%
    pause  


    Цитата:
    DOWNLOAD+.EXE - если время создания существующего файла и файла на сервере совпадает файл не скачивается. код возврата в этом случае 80

    Но есть недоделка, которую, надеюсь поправит автор, при проверке файла на сервере проверяется только время файла, но размер не сравнивается.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 20:10 02-06-2011 | Исправлено: GORA2, 20:12 02-06-2011
       

    Страницы: 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 » Операционные системы » Microsoft Windows » Задачи на bat-файлах 10
    vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru