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

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

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

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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 16:59 14-11-2006 | Исправлено: Elroir, 04:30 26-04-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Угу, присоединяюсь в вопросу SPV_Ed, может получилось у кого? Вроде как нельзя этого сделать. Как-то часа три-четыре наверно грохнул на попытку сделать кавычку разделителем, ничего не вышло

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 23:12 31-03-2007
    euheny



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Сразу два вопроса:
    Это вариант очень упрощён , а если нужно скажем заменить С: на Y: и в другом ключе , параметре или значении.Или в разделе с вложениями.
    Интересно также насколько реально модифицировать бинарное значение , в котором текстовые данные (обычно юникод).
    И ещё.
    Мне нужно(вобще-то желательно) это выполнять из другой программы как из "выполнить",т.е. cmd /c for и т.д.
    Переменные я определяю заранее во внешней программе.
    Вобщем если даже и не использовать переменные из батника работает , а из "выполнить" не хочет

    Всего записей: 3925 | Зарегистр. 22-11-2006 | Отправлено: 05:28 01-04-2007
    Elroir



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

    Цитата:
    Это вариант очень упрощён  

    Этот вариант показывает в общем виде, как надо работать с реестром:
    reg query [ЛЮБАЯ_НУЖНАЯ_ВЕТКА] /v [НУЖНОЕ_ЗНАЧЕНИЕ] - выдаст информацию о типе значения и само значение. При этом, если использовать ту конструкцию for, которую я привел, у тебя будут определены две переменные с этими данными.
    Эти переменные можно сравнивать с чем угодно и изменять как угодно.
    reg add [ЛЮБАЯ_НУЖНАЯ_ВЕТКА] /v [НУЖНОЕ_ЗНАЧЕНИЕ] /t [ТИП_ДАННЫХ] /d [ДАННЫЕ] /f - добавляет или заменят значение в реестре.
    Если нужно заменить значения еще где-то - просто добавляешь эти команды с теми значениями, которые нужно изменить.

    Цитата:
    Интересно также насколько реально модифицировать бинарное значение , в котором текстовые данные (обычно юникод).  

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

    Цитата:
    Вобщем если даже и не использовать переменные из батника работает , а из "выполнить" не хочет

    Если for состоит из более чем одной строки, запустить его через "выполнить" не получится.  
       

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 09:52 01-04-2007 | Исправлено: Elroir, 09:55 01-04-2007
    ASSEL



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    всем доброго дня!!! помогите плейз! мне нужен bat-файл который решает эту задачку....
    Задание
    Пусть имеется текстовый файл protocol.txt, в котором хранится журнал обработанных файлов в следующем формате:
     
    Имя: Sula04.txt    Дата: 02.01.2001 Время: 14:50
    Имя: Sula23.txt    Дата: 03.02.2001 Время: 23:50
    Имя: assel86.txt   Дата: 02.01.2001 Время: 12:00
    Имя: soft.txt      Дата: 10.01.2000 Время: 13:00
     
    Слово Дата здесь начинается в каждой строке с двадцатой позиции. Необходимо написать командный файл, с помощью которого сделать выборку из этого файла (т.е. создать новый текстовый файл с нужной информацией) за заданный месяц (ММ) и год (ГГГГ) в файл ММГГГГ.txt, сформированный файл упорядочить по дате обработки. Нужный месяц и год указать как параметры командной строки.
    спасибо!!!

    Всего записей: 2 | Зарегистр. 01-04-2007 | Отправлено: 10:16 01-04-2007 | Исправлено: ASSEL, 10:22 01-04-2007
    Maza Faka



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

    Код:
     
    @ЕСНО OFF
    IF "%1"=="" GOTO NoParam
    IF "%2"=="" GOTO NoParam
    FIND "%1.%2" protokol.txt | SORT /+26 > %1%2.txt
    GOTO End
    :NoParam
    ECHO He заданы необходимые параметры командной строки!
    PAUSE
    :End
     


    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 10:40 01-04-2007
    ASSEL



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

    Цитата:
    Maza Faka

     огромное приогромное спасибо!

    Всего записей: 2 | Зарегистр. 01-04-2007 | Отправлено: 11:08 01-04-2007
    Bablo



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    помогите зделать пинговалку, это нужно для проверки интернет соединения.
    обычно всегда набираю вручную ping yandex.ru  

    Всего записей: 81 | Зарегистр. 20-06-2005 | Отправлено: 21:28 01-04-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как добавить описание (Description) во вновь созданную службу?

    Код:
     
    instrsrv Testsrv srvany
    reg add hklm\system\currentcontrolset\services\Testsrv\Parameters /v Application /t reg_sz /d mycommand /f
    sc config type= own type= interact DisplayName= "Test Service"
     

     
    Как можно добавить краткое описание к этой службе, для чего она и все такое?
    Нужно именно из командной строки (командного файла). В sc не нашел подобной фичи.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:50 01-04-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bablo
    Сделай этот топик "Версией для печати" и ищи слово ping, найдешь примеры
    01MDM
    Так ты посмотри хоть в HKLM\SYSTEM\CurrentControlSet\Services где у остальных сервисов описание находится REG_SZ Description...

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 00:21 02-04-2007
    duck33

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Срочно нужна помощь!  
    Файл нужен для печати из Линукс через Вин машину.  
    Почему он не работает, если его запускать виндовым планировщиком. Вернее, он только удаляет файл ( ... && del /q %%i)?  
    Сам файл:
     
    @echo off  
    for %%i in (c:\temp\spool\*.pdf) do "C:\windows\gdputil.exe" -runkill 30 "C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe" /p /h %%i && del /q %%i  
    GoTo :EOF  
     
    Если запускать руками, все работает.

    Всего записей: 2 | Зарегистр. 02-04-2007 | Отправлено: 02:12 02-04-2007
    euheny



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Я вёл речь вот о чём.
    reg query [ЛЮБАЯ_НУЖНАЯ_ВЕТКА] (для усложнения без /v) выводит в зависимости от [ЛЮБАЯ_НУЖНАЯ_ВЕТКА] несколько кбайт текста .
    Этот текст нужно обработаь так , чтобы некоторые последовательности символов и цифр были замеенены некоторыми другими последовательностями символов и цифр.ЛЮБАЯ_НУЖНАЯ_ВЕТКА теперь удаляется(чтобы лишнего не было)
    Ну а текст собирается назад в реестр.

    Цитата:
    программка на VBScript

    Прямо сейчас не надо , но потом может понадобится.Я посммотрю возможности autoit и если ничего не найду попозже переспрошу.
    Цитата:
    Если for состоит из более чем одной строки
    Я крутил его и так и так - вобщем в конце концов заработал.Правда интересно какова максимальная длина команды.
     
     

    Всего записей: 3925 | Зарегистр. 22-11-2006 | Отправлено: 04:39 02-04-2007
    Maza Faka



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

    Цитата:
    помогите зделать пинговалку, это нужно для проверки интернет соединения.  
    обычно всегда набираю вручную ping yandex.ru  

    Поконкретней, что именно нужно? Выдавать сообщение при отсутствии пинга?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 09:00 02-04-2007
    NIKZZZZ



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

    Код:
     
    @echo off  
    for %%i in (c:\temp\spool\*.pdf) do (
      "C:\windows\gdputil.exe" -runkill 30 "C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe" /p /h %%i
      del /q %%i
    )  
    GoTo :EOF
     

     
    А gdputil.exe ждет окончания операции? Если нет, то файл может быть удален раньше начала обработки !
     
    euheny

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

    Посмотри в шапке (Работа с текстом).

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

    В XP длина строки ~ 8190 символов.
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 10:28 02-04-2007 | Исправлено: NIKZZZZ, 10:51 02-04-2007
    GORA2



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

    Цитата:
    У меня оба примера почему-то работают  

    Извините, привел не все условия
    Код:
    setlocal enabledelayedexpansion
    set useUPX=1
    IF %useUPX%==1 (
    set SFXsize=12345
    set delta=67890
    echo !SFXsize!
    echo !delta!
    set /a Hpers=delta*100/(SFXsize+delta)
    echo !Hpers!
    set /a Lpers=delta*1000/(SFXsize+delta)-Hpers*10
    echo !Lpers!
    set persent=!Hpers!.!Lpers!
    echo !persent!
    )
     
    У меня не работает и выдает "Непарные скобки". Что я делаю не так?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 12:55 02-04-2007
    01MDM



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

    Цитата:
    Так ты посмотри хоть в HKLM\SYSTEM\CurrentControlSet\Services где у остальных сервисов описание находится REG_SZ Description...

     
    Да действительно, нетерпелость решить проблему, а Большого компа под рукой не было...
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:09 02-04-2007
    Elroir



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

    Цитата:
    Что я делаю не так?

    Все делаешь так - проблема не в командах set, а в обработке скобок оператора if. Видимо какой-то баг. Если убрать скобки if-a, все прекрасно работает.
    Можно немного видоизменить конструкцию:

    Код:
     
    setlocal enabledelayedexpansion  
    set useUPX=1  
    IF not %useUPX%==1 goto skip
    set SFXsize=12345  
    set delta=67890  
    echo !SFXsize!  
    echo !delta!  
    set /a Hpers=delta*100/(SFXsize+delta)  
    echo !Hpers!  
    set /a Lpers=delta*1000/(SFXsize+delta)-Hpers*10  
    echo !Lpers!  
    set persent=!Hpers!.!Lpers!  
    echo !persent!  
    :skip
    ...
    ...
     

    При этом, функциональность if-а остается, а скобок нет.
     

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Дело в том, что все это вложено еще в один if. И без скобок то у меня работает (для этого ввожу еще одну переменную равную выражению в скобках), но я хотел узнать ПОЧЕМУ не работает так как должно работать. В описании команды set не ограничений на скобки и их использование. Хотел понять где грабли. Значит это баг и не чего в эту сторону искать. Спасибо.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 13:57 02-04-2007
    NIKZZZZ



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

    Цитата:
    В описании команды set не ограничений на скобки и их использование.

     
    Повидимому он не понимает, к чему относится закр. скобка.  
     

    Код:
     
     setlocal enabledelayedexpansion
    set useUPX=1
    IF %useUPX%==1 (
    set SFXsize=12345
    set delta=67890
    echo !SFXsize!
    echo !delta!
    set /a "Hpers=delta*100/(SFXsize+delta)"
    echo !Hpers!
    set /a "Lpers=delta*1000/(SFXsize+delta)-Hpers*10"
    echo !Lpers!
    set persent=!Hpers!.!Lpers!
    echo !persent!
    )
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:11 02-04-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    За кавычки спасибо, не знал. Заработало!

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 14:33 02-04-2007
    Levitant



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    здравсвтуйте все снова.
    Такой вопросик. Вообще возможно ли с помощью бат файла настройить VPN подлкючение? И если возможно то не подскажите пожалуйста как это можно сделать...

    Всего записей: 62 | Зарегистр. 09-11-2006 | Отправлено: 17:11 02-04-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 100

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


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru