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

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

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

vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:54 27-04-2007 | Исправлено: Elroir, 03:59 10-09-2007
    Angel_Ka



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Биг сэнкс! Ответы на оба вопроса удовлетворяют.
     
    А не подскажете, где можно было бы прочесть про возвращаемые коды reg query по максимуму?
    Не ли ссылки?

    Всего записей: 585 | Зарегистр. 20-05-2007 | Отправлено: 10:23 20-05-2007 | Исправлено: Angel_Ka, 10:35 20-05-2007
    Maza Faka



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

    Цитата:
     где можно было бы прочесть про возвращаемые коды reg query по максимуму?

    Да там и читать-то нечего, всего два кода возврата:
    0 Успех
    1 Сбой

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:54 20-05-2007
    Angel_Ka



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

    Цитата:
    Да там и читать-то нечего, всего два кода возврата...

    Откуда же тогда берётся запись

    Цитата:
    reg query "Раздел\подрадел" 2 ...

    ?

    Всего записей: 585 | Зарегистр. 20-05-2007 | Отправлено: 12:03 20-05-2007 | Исправлено: Angel_Ka, 12:10 20-05-2007
    Maza Faka



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

    Цитата:
    Откуда тогда берётся запись  
    reg query "Раздел\подрадел" 2

    Откуда ты взяла эту запись?
    У меня в виндовом справочнике написано:
    Примечания
    В следующей таблице представлены значения возврата для операции reg query. Значение Описание  
    0               Успех  
    1               Сбой  

    Ось WinXP Pro SP2

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 12:13 20-05-2007
    Angel_Ka



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

    Цитата:
    У меня в виндовом справочнике написано...

    Вот и я о том же, а в батнике, запускающем Far как переносную программу, есть строка:

    Цитата:
    reg query HKEY_CURRENT_USER\Software\Far\users\%faruser% 2>nul && echo Erasing.. ^
    && Reg Delete HKEY_CURRENT_USER\Software\Far\Users\%Faruser% /F >Nul
     
    и, кажется, она работает. По крайней мере, батничек тот очень полезен и пашет как надо, там на форуме к нему ещё и дополнения хорошие есть...

    Всего записей: 585 | Зарегистр. 20-05-2007 | Отправлено: 12:25 20-05-2007 | Исправлено: Angel_Ka, 12:28 20-05-2007
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2>nul это перенаправление потока вывода 2 (stderr) в устройство nul - то есть в никуда...
    А поповоду кодов возврата:
    errorlevel увеличиватся на 1 в случае неуспеха, а не принимает абсолютное значение 1. Это - две большие разницы...

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 12:33 20-05-2007
    Angel_Ka



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

    Цитата:
    errorlevel увеличиватся на 1 в случае неуспеха, а не принимает абсолютное значение 1. Это - две большие разницы...

    Не понятно. Может быть тогда  

    Цитата:
    reg query "Раздел\подрадел" 2>nul && reg delete "Раздел\подрадел" /F >Nul
     
    и
     
    reg query "Раздел\подрадел" >nul
    if %errorlevel%==0 reg delete "Раздел\подраздел" /F >Nul
     

    это всё-таки разные записи, и во втором случае следует писать:
     
    Код:
    if %errorlevel%==2 reg delete "Раздел\подраздел" /F >Nul

    ?
     
    Либо разжуйте, плз, поподробнее.

    Всего записей: 585 | Зарегистр. 20-05-2007 | Отправлено: 12:41 20-05-2007 | Исправлено: Angel_Ka, 12:44 20-05-2007
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нет не нужно так писать...
    2>nul - при запросе значения из реестра не выводить текст ошибки если она случилась
    && - в случае если reg query вернул что-либо(при ошибке он не вернет ничего - строка расшифровки выше) выполнить следующую команду
    reg delete "Раздел\подрадел" /F >Nul - выполнить удаление из раздела и не выводить приэтом никаких сообщений...
     
    В принципе последнее действие построено не совсем верно - а что если удаление не получилось? Например не хватило прав...
     
    А if %errorlevel%==0 обозначает что ни в процессе запроса к реестру, ни в предыдущих командах не наступила ошибка...

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 12:56 20-05-2007 | Исправлено: yurkesha, 12:58 20-05-2007
    Elroir



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

    Цитата:
    errorlevel увеличиватся на 1 в случае неуспеха, а не принимает абсолютное значение 1

    Откуда такие сведения?
    Angel_Ka
    2>nul никакого отношения к конкретной команде reg не имеет. В Windows-е существует два стандартных потока вывода - обычный вывод и вывод ошибок. Чтобы скрыть вывод ошибок (любой программы),используется конструкция 2>nul (как и написал yurkesha).

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 12:59 20-05-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    вообще-то во втором случае следует писать:
    Код:
    reg query "Раздел\подрадел" 2>nul
    if %errorlevel%==0 reg delete "Раздел\подраздел" /F >Nul  
    но оно и без 2>nul хорошо, можно и весь вывод отправить в нуль - ты всё равно врядли обратишь внимание на разницу.
     
    2>nul отличается в данном контексте от >nul тем, что если ключик есть - при 2>nul нам об этом сообщение на экран выплюнут - это для батника специальная ситуация, говорящиая  что в прошлый раз вышли из ФАра некорректно.
    а если ключика нет - то так и должно быть, и длинное сообщение об остутствии ключика отправится в нуль.
     
    yurkesha

    Цитата:
    не получилось? Например не хватило прав...  

    если юзеру не хватило прав на HKCU\Software\Far\users - это клиника, можно и ФАР не пускать и вообще лучше poweroff сразу делать  

    Цитата:
    А if %errorlevel%==0 обозначает что ни в процессе запроса к реестру, ни в предыдущих командах не наступила ошибка...  
    никаких предыдущих, это статус последней исполняемой программы, т.е. reg.exe
    и его величина - именно абсолютное значение.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 12:59 20-05-2007 | Исправлено: wolf0425, 13:13 20-05-2007
    Angel_Ka



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha
    Сэнкс!
    Пояснение
    Цитата:
    2>nul - при запросе значения из реестра не выводить текст ошибки если она случилась
    мне куда более понятно чем
    Цитата:
    2>nul это перенаправление потока вывода 2 (stderr) в устройство nul - то есть в никуда...
     
    Гранд сэнкс!
     

    Всего записей: 585 | Зарегистр. 20-05-2007 | Отправлено: 13:03 20-05-2007 | Исправлено: Angel_Ka, 13:04 20-05-2007
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir - да оттуда что все система работы c errorlevel не претерпела никаких изменений по сравнению с DOS... Вспомни как разбираются такие конструкции в DOS.
    Добавлено:
    wolf0425 - учите матчасть товарищ Администратор на локальной машине - возьмем ветку
    Код:
    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root


    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 13:03 20-05-2007 | Исправлено: yurkesha, 13:06 20-05-2007
    Angel_Ka



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir, yurkesha и wolf0425
    Гран мерси каждому! Вкупе получается ещё более доходчиво. Вэри плз за отзывчивость!
     
    wolf0425

    Цитата:
    если юзеру не хватило прав на HKCU\Software\Far\users - это клиника, можно и ФАР не пускать и вообще лучше poweroff сразу делать

    А вот это мне как то не понятно. О чём это ты?

    Всего записей: 585 | Зарегистр. 20-05-2007 | Отправлено: 13:14 20-05-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha
    Может я чего-то не понимаю, но насколько я знаю, со времен DOS, код ошибки жестко задается в самой программе. Никогда не видел, чтобы использовалось добавление единицы.


    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:14 20-05-2007 | Исправлено: Elroir, 13:16 20-05-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha а ты ещё чего придумай, да?
    в батнике проверялась отнюдь не ветка hklm, а вполне конкретная подветка hkсu, которую в следующей после удаления строчке - восстанавливали из файла.
     
    обделался с %еrrorlevel% - так хоть умных людей послушай.
     
     
    Добавлено:

    Цитата:
    если юзеру не хватило прав на HKCU\Software\Far\users - это клиника, можно и ФАР не пускать и вообще лучше poweroff сразу делать
    А вот это мне как то не понятно. О чём это ты?

    о чьих-то принципах

    Цитата:
     В принципе последнее действие построено не совсем верно - а что если удаление не получилось? Например не хватило прав...

     - о том, что проверять код ошибки  
    Reg Delete HKEY_CURRENT_USER\Software\Far\Users\%Faruser% /F
    - полностью бессмысленно. для всех, включая не-администраторов и прочих гостей.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 13:17 20-05-2007 | Исправлено: wolf0425, 13:24 20-05-2007
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425 - есть такое понятие универсальность кода... Не можешь или не хочешь обработать все исключения - универсального кода не будет.
     
    Elroir - построй цепочку команд так чтоб несколько из них выдавали ошибку и выведи значение errolevel
     


    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 13:23 20-05-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha а есть ещё такое понятие как разумная достаточность...

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 13:25 20-05-2007
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ты можешь гарантировать что человек впервые посетивший ветку не захочет воспользоваться твоим кодом для решения своих (вообще говоря совершенно отличных от текущих) задач? Я лично думаю что он скорее почитает ветку - найдет что-либо похожее на свою задачу и попробует применить...
     
    Не понимаю почему ты так кипятишься? Вобщем данный вопрос здесь я обсуждать больше не буду - хочешь пофлеймить - добро пожаловать в личку....

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 13:30 20-05-2007
    wolf0425



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

    Цитата:
    построй цепочку команд так чтоб несколько из них выдавали ошибку и выведи значение errolevel  

    echo 123 |find "234"  
    echo 123 |find "234"  
    echo %errorlevel%
    выдает, как и следовало ожидать, код 1
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 13:31 20-05-2007 | Исправлено: wolf0425, 13:45 20-05-2007
    Elroir



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

    Цитата:
    построй цепочку команд так чтоб несколько из них выдавали ошибку и выведи значение errolevel

    Ты ошибаешься - errorlevel перезаписывается после каждой команды - он зависит только от результата выполнения последней команды. Ничего к нему не прибавляется, иначе невозможно было бы понять, какая команда выдала ошибку.

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:32 20-05-2007
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 3
    vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru