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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel  igor_andreev
    спасибо за помощь. уже начинаю понимать кое что, особенно после helpa  
     
    задача усложняется
    есть тот же фал 1.ini  

    Код:
    Код:[1 Options]  
     
    BDEAlias=UESR_ASDUD  
    SQLType=DOAOracle  
     
    SecuritySystem=1  
    WorkflowSystem=-  
    ExchangeSystem=-  
    ExchangeFile=-  
    iKeyLogOn=-  
    wbcontainer=iKey  
    wbprefix=vcert  
    iKey=+  
    DeviceKeyDll=IKeyOld.dll  
    HandleMsgParam=+  
    SpellCheckerMode=0
    ....................

    это по прежнему меняем удаляем
    iKeyLogOn=- на iKeyLogOn=+  
    wbprefix=vcert на wbprefix=native
    iKey=+ удалить
    а
    wbcontainer=iKey  
    необходимо исправить руководствуясь списком в другом файле 2.csv полученного из екселя
    его вид:

    Код:
    ivanov_ab;ivanov a.b._L
    petov_ac;petrov a.c.-L
    sidorov_ad;sidorov a.d._L
    ................

    ivanov_ab есть логин те %username% доменной учетки
     
    получиться должно такое

    Код:
    wbcontainer=ivanov a.b._L
      для ivanov_ab

    Код:
    wbcontainer=petrov a.c.-L
       для petrov_ac
    тире и подчерк в значениях сделано умышленно
     
    есть маленький вопрос для общего развития
    есть ключевое слово разбора
    skip=N Задает число строк, пропускаемых в начале файла.
    есть ли такое чтобы например после 10 строк далее не читать...? (если файл большой., а настройки в начале файла)
     
    спасибо

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 10:44 23-12-2006 | Исправлено: JohnRD, 10:56 23-12-2006
    Desenix

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JohnRD
    для этого есть goto
    ставишь условие и после его выполнения делаешь переход.

    Всего записей: 10 | Зарегистр. 20-11-2006 | Отправлено: 13:34 23-12-2006
    igor_andreev

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

    Цитата:
    ivanov_ab;ivanov a.b._L  
    petov_ac;petrov a.c.-L  
    sidorov_ad;sidorov a.d._L

    Ну так в чем дело?  
    FOR /F "TOKENS=2 DELIMS=;" %%A IN ('MORE 2.csv') DO ECHO %%A
    Отдавай это %%A каждый раз gsar.exe и все

    Цитата:
    есть ли такое чтобы например после 10 строк далее не читать...? (если файл большой., а настройки в начале файла)  

    http://www.commandline.co.uk/lib/treeview/index.php Ткни там в Batch Howto's  и в Reading Files, там есть пример "Displaying the first X lines". Это если только средствами cmd-файлов надо решить. Но так не очень корректно, батник пустые строки не считает. Удобней пользоваться head.exe(в шапке "Набор GNU утилит для win32" )
     
     

    Всего записей: 1671 | Зарегистр. 08-12-2004 | Отправлено: 16:12 23-12-2006 | Исправлено: igor_andreev, 16:19 23-12-2006
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Такая задачка:
     
    нужно скопировать n файлов пресловутой командой copy в одну строку с использованием системных переменных
     
    рабочий пример:

    Код:
    @echo off
    set xx="%programfiles%\xx Software\XXX\
    set co=copy /y  
    %co%%xx%file_1" DIR1
    %co%%xx%file_2" DIR1
    %co%%xx%file_n" DIR1
    set xx=
    set co=

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

    Код:
    @echo off
    set xx="copy /y %programfiles%\xx Software\XXX\
    %xx%(file_1 file_2 file_n)"  DIR1
    set xx=

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 17:21 23-12-2006
    igor_andreev

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

    Цитата:
    file_1 file_2 file_n

    А у твоих файлов что, цифра в названии есть? Тогда FOR /L тебе нужен

    Всего записей: 1671 | Зарегистр. 08-12-2004 | Отправлено: 17:48 23-12-2006
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нет, цифр нет просто список, это я для наглядности так написал

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 18:13 23-12-2006
    JohnRD

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

    Цитата:
    ivanov_ab;ivanov a.b._L  
    petov_ac;petrov a.c.-L  
    sidorov_ad;sidorov a.d._L

     

    Код:
    FOR /F "TOKENS=2 DELIMS=;" %%A IN ('MORE 2.csv') DO ECHO %%A

    в чем отличие ('MORE 2.csv') от (2.csv)

    Цитата:
    Отдавай это %%A каждый раз gsar.exe и все

    как отдать хоть один раз и что мы будем иметь
     
    как обработать %username% под которым загружена машина
     
    спасибо
     

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 18:09 25-12-2006 | Исправлено: JohnRD, 18:57 25-12-2006
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Почему то из бата неро пишет только папку без подпапок. Если кто знает, подскажите. Пример:
    "C:\Program Files\nerocmd.exe" --no_user_interaction --write --real --iso hive --drivename F: --force_erase_cdrw "C:\temp\5\*.*"

    Всего записей: 2182 | Зарегистр. 17-07-2006 | Отправлено: 13:54 26-12-2006
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите как прочитать в файле
    1.mif

    Код:
    Start Component
       Name = "Software License Key"   Start Group
          Name  = "Wide World Asset Numbers"      ID    = 1
          Class = "wideWorldAssetNumbers"      Key = 1
          Start Attribute
             Name    = "Computer License Number"         ID      = 1
             Type    = String(30)
             Value   = "000000000000000000000000"      End Attribute
       End Group
    End Component

    в 7й строчке значение 000000000000000000000000
     

    Код:
    @echo off & setlocal ENABLEEXTENSIONS
    set LineNo=8
    set "line="
    set/a LineNo-=1
    for /f "tokens=2 delims==" %%a in ('more/e +%LineNo% ^< 1.mif') do (
      if not defined line set "line=%%a"
    )
    echo/%line%

    так читаем
    "000000000000000000000000"      End Attribute
    а нужно только 000000000000000000000000
     
    после нужно его будет заменить на на значение взятое из реестра
     
    заранее благодарен за ответ
     

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 14:14 26-12-2006 | Исправлено: JohnRD, 14:15 26-12-2006
    Elroir



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

    Цитата:
    так читаем  
    "000000000000000000000000"      End Attribute  
    а нужно только 000000000000000000000000  

    В  for-е поставь пробел после второго знака "равно":

    Код:
    for /f "tokens=2 delims== " %%a ...

    Чтобы получить значение без кавычек, замени set "line=%%a" на set "line=%%~a".

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 15:02 26-12-2006
    tolyn77



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите как мне в сети на всех компютерах узнать что принято в %temp% %tmp%?
    заранее благодарен

    Всего записей: 1495 | Зарегистр. 07-09-2004 | Отправлено: 15:08 26-12-2006
    Jon_Dow

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JohnRD
    Так - для начала выполните пожалуйста и изучите результаты:
    Код:
    FOR /F "usebackq tokens=1 eol= skip=1 delims= " %%a IN (`help^|findstr /B /V /C:" "`) DO help %%a >>%%a.txt

    Ну а конкретно по вашей задаче решение будет такое:
    Код:
    for /f "skip=6 usebackq tokens=1,2 delims== " %%a in (1.mif) do if %%a==Value set line=%%~b
    вобщем не стоит все сильно усложнять и будет все просто...
     
    Добавлено: К сожалению не увидел ответ уважаемого Elroir - исправляю конец конструкции на set line=%%~b
    Добавлено: кстати эта конструкция работает для произвольных переменных окружения ТОЛЬКО в цикле FOR... А set line=%line:"=% сработает в любом месте...

    Всего записей: 732 | Зарегистр. 25-11-2006 | Отправлено: 15:15 26-12-2006 | Исправлено: Jon_Dow, 15:47 26-12-2006
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir и Jon_Dow Вам очередная благодарность
    особенно за это

    Код:
    FOR /F "usebackq tokens=1 eol= skip=1 delims= " %%a IN (`help^|findstr /B /V /C:" "`) DO help %%a >>%%a.txt

     
    утилитой gsar.exe можно ли заменить? %%b полученную из  

    Код:
    for /f "usebackq tokens=1,2 delims== " %%a in (1.mif) do if %%a==Value set line=%%~b

     
    на %%j полученную с Вашей же помощью Jon_Dow из
     
    Код:
    FOR /f "usebackq tokens=1,2* skip=4 eol=;" %%i IN (`reg query "HKLM\SYSTEM\ControlSet001\Services\cpdrvlib\license" /v PIDKEY`) DO IF "%%i"=="PIDKEY" SET MY_PIDKEY=%%j

     
    через IF можно сделать?
     
    и в одном cmd разместить все реально?
     
    где можно увидеть какой нить пример замены переменных?
     
    спасибо огромное, есть чему учиться у Вас
    Евгений

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 16:32 26-12-2006 | Исправлено: JohnRD, 16:37 26-12-2006
    Elroir



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

    Цитата:
    кстати эта конструкция работает для произвольных переменных окружения ТОЛЬКО в цикле FOR...

    Модификатор "~" работает с переменными вида %i, то есть переменными for-а и аргументами командной строки.

    Цитата:
    А set line=%line:"=% сработает в любом месте...

    Согласен - сработает
    Но... удалит все кавычки в строке, а не только по краям.  
    P.S В данном случае, это, конечно же , не принципиально

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:04 26-12-2006
    Jon_Dow

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Насчет аргументов коммандной строки не подумал даже... Спасибо за инфу! Приму к сведению...
    И вообще спасибо огромное всем участникам данного топика - куча ценной информации!
     
    Sorry за

    Всего записей: 732 | Зарегистр. 25-11-2006 | Отправлено: 21:32 26-12-2006 | Исправлено: Jon_Dow, 22:00 26-12-2006
    king_stiven

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

    Всего записей: 2182 | Зарегистр. 17-07-2006 | Отправлено: 00:27 27-12-2006
    Sceval



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

    Всего записей: 134 | Зарегистр. 22-12-2005 | Отправлено: 09:53 27-12-2006
    xcherep



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет
    Кто поможет написать bat файл форматирования дискеты

    Всего записей: 77 | Зарегистр. 05-10-2005 | Отправлено: 10:12 27-12-2006
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые гуру
     
    можно ли завести системную переменную %username% в пакетный файл
     
    что нить типа ...

    Код:
    set login=%username%
    for /f "usebackq tokens=1,2 delims=;" %%a in (2.csv) do if %%a==login set key=%%b

     
    или так set %%login=%username%  ??
     
     
    2.csv

    Код:
    ivanov_ab;ivanov a.b._L  
    petov_ac;petrov a.c.-L  
    sidorov_ad;sidorov a.d._L

     
    заранее благодарен за ответ

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 10:23 27-12-2006
    king_stiven

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

    Цитата:
    xcherep

     
    это пример из справки по cmd  
    Использование if для выдачи сообщения при возникновении ошибки
     
    В приведенном ниже примере, если при форматировании диска в дисководе A возникнет ошибка, будет выведено сообщение:  
     
     
      :begin
      @echo off
      format a: /s
      if not errorlevel 1 goto end
      echo Ошибка во время форматирования диска.
      :end
      echo Конец пакетной программы.

    Всего записей: 2182 | Зарегистр. 17-07-2006 | Отправлено: 11:13 27-12-2006
       

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

    Рейтинг.ru