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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VisioNRU
    если ты плохо разбираешся в батниках, то придется подождать пока кто-нибудь из профи напишет
    я попытался кое-что сварганить, пока получилось (если я правильно составил скрипт, если неверно - пусть кто-нить поправит):
     
    @echo off
    setlocal enabledelayedexpansion
    set sn=1
    for /f "tokens=* delims=, usebackq" %%A in (`mode ^| find /i "COM?"`) do call :find %%A
    goto :eof
     
    :find
    if /i "%1" equ "COM!sn!" (echo Match) else (goto notMatch)
    set /a sn+=1
    goto :eof
     
    :notMatch
     
    если ты силен в батниках - то хорошо, может доделаешь и/или поправишь  
    у меня загвоздка в
    Цитата:
    если она не по порядку то переименовать в com1, com2 и тд.
    - насколько я понимаю, нужно же сначала узнать самый бОльший номер, допустим он будет 3 (хотя я плохо представляю сколько может быть портов помаксимуму), а затем, если порты идут так: 3 1 2 - то 3-ий переименовать в 4-ый, а тому, что было 3-ий присвоить имя 1-ый
     
    у меня так
    F:\Documents and Settings\admin>mode
     
    Состояние устройства LPT1:
    ---------------------------
        Вывод принтера не переадресован.
     
     
    Состояние устройства COM1:
    ---------------------------
        Скорость:              1200
        Четность:              None
        Биты данных:           7
        Стоповые биты:         1
        Таймаут:               OFF
        XON/XOFF:              OFF
        Синхронизация CTS:     OFF
        Синхронизация DSR:     OFF
        Чувствительность DSR:  OFF
        Цепь DTR:              ON
        Цепь RTS:              ON
     
     
    Состояние устройства CON:
    --------------------------
        Строки:                300
        Столбцы:               145
        Скорость клавиатуры:   31
        Задержка клавиатуры:   1
        Кодовая страница:      866

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 01:02 25-10-2009
    king_stiven

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

    Код:
    @echo off
    for %%i in (q w e r t y u i o p a s d f g h j k l z x c v b n m ) do (
        if exist "%%i:\-= DIR =-" (
            REN "%%i:\-= DIR =-" "! DIR" && echo %%i:\-= DIR =- переименован в %%i:\! DIR >> 1.txt || echo %%i:\-= DIR =- найден но не переименован >> 1.txt
        )
        for /f "tokens=*" %%k in ('dir /b /s /a:d "%%i:\-= DIR =-" 2^>nul') do (
            REN "%%k" "! DIR" && echo %%k переименован в %%~dpk! DIR >> 1.txt  || echo %%k найден но не  переименован >> 1.txt
        )
    )

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 03:23 25-10-2009 | Исправлено: king_stiven, 09:16 25-10-2009
    VisioNRU

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

    Цитата:
    mugil_cephalus

     
    спасибо.. это уже что-то.
     
     
    Добавлено:
    2 mugil_cephalus
     
    com портов может быть  от 4 до 8 в моём случае.
    нет необходимости искать самый больший..  
    проблема вот в чем после установки XP один из com портов (4) обзывается почему то 5.
    так вот.. необходимо что то типа проверки на  последовательность 1,2,3,4,5 и если после 3 идёт сразу 5, то переименовать 5 в 4.

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

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

    Цитата:
    com портов может быть  от 4 до 8 в моём случае.  
    нет необходимости искать самый больший..  
    проблема вот в чем после установки XP один из com портов (4) обзывается почему то 5.  
    так вот.. необходимо что то типа проверки на  последовательность 1,2,3,4,5 и если после 3 идёт сразу 5, то переименовать 5 в 4.

     
    я с программой mode плохо знаком (в win XP она - mode COM - мне как-то и не требовалась), но, насколько я понял, mode может только настраивать COM-порты, а не переименовывать
    тут или в реестре нужно смотреть
    вообще у меня на сис блоке 3 или 4 COM'a, но подключен только один - там сидит ИБП
    чтоб win xp (голая, сразу после инсталляции) так путала - тут, наверное, дело в железе (в подключении перемычек на мат. плате) или в конфликте внешнего оборудования или драйверы
     
    Добавлено:
    VisioNRU

    Цитата:
    и если после 3 идёт сразу 5, то переименовать 5 в 4.

    а дальше - (после 5-ти) - 4-ре не может встретиться? 4 вообще отсутствуеот? - то есть один порт под номером X вообще может отсутствовать или он есть в списке, но не последовательно:  
    1 2 3 5 6 7 4 8  ??
     
    Добавлено:
    VisioNRU
    нашел 1 ошибку в скрипте - см. в %systemdrive%\WINDOWS\Help\ntcmds.chm - find :
    FindПоиск заданной строки текста в файле или нескольких файлах. После поиска в заданных файлах команда find выведет на экран все строки из этих файлов, содержащие заданный образец.
    ..............
    Использование подстановочных знаков  
    Подстановочные знаки (* и ?) не могут быть использованы в именах файлов и расширениях, задаваемых в команде find. Чтобы искать строку в множестве файлов, указанных с помощью подстановочных знаков, можно использовать команду find в команде for.
     
    очевидно в -
    Цитата:
    mode ^| find /i "COM?"
    find "путает"  com-порт с *.com-файлом - правильно так: mode ^| find /i "COM"

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 10:12 25-10-2009 | Исправлено: mugil_cephalus, 12:11 25-10-2009
    mouser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    спасибо ... только слово DIR оно разное ... тоесть папки у меня могут быть  
    -= ваыргва =-
    -= fhd =-
    -= j8f6g =-
    и т.д.

    Всего записей: 800 | Зарегистр. 10-11-2006 | Отправлено: 13:34 25-10-2009
    king_stiven

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

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 13:41 25-10-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VisioNRU
    я сам скрипт еще подкорректирую - он пока еще сырой и сбойный (может мастера еще помогут; я скрипт погонял несколько раз - вижу ошибки - подправлю) - но что делать с
    Цитата:
    так вот.. необходимо что то типа проверки на  последовательность 1,2,3,4,5 и если после 3 идёт сразу 5, то переименовать 5 в 4.
    - пока ума не приложу

    P.S.
    хотя с проверкой еще представляю, а вот
    Цитата:
    то переименовать 5 в 4.

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 13:57 25-10-2009
    mouser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    без руля ... знаю что в sql выглядить like "-= %"
    а тут не помню либо не знаю (((

    Всего записей: 800 | Зарегистр. 10-11-2006 | Отправлено: 14:20 25-10-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VisioNRU
    вот подправленный скрипт для первой части твоей задачи:
     
    @echo off
    echo on
    rem Description: test script for codepage=866 & single COM-port
    setlocal enabledelayedexpansion
    set sn=1
    for /f "tokens=* usebackq" %%A in (`mode ^| find /i "COM"`) do call :find %%A
    goto :eof
     
    :find
    echo test_!sn!_
    echo test_%3_
    set "var1=%3"
    set "var2=!var1:~0,-1!"
    echo test_!var2!_
    if /i "!var2!" equ "COM!sn!" (echo Match) else (goto notMatch)
    set /a sn+=1
    goto :eof
     
    :notMatch
    echo notMatch
     
    ВОТ OUTPUT:
     
    G:\scripts>rem Description: test script for codepage=866 & single COM-port
     
    G:\scripts>setlocal enabledelayedexpansion
     
    G:\scripts>set sn=1
     
    G:\scripts>for /F "tokens=* usebackq" %A in (`mode | find /i "COM"`) do call :find %A
     
    G:\scripts>call :find Состояние устройства COM1:
     
    G:\scripts>echo test_!sn!_
    test_1_
     
    G:\scripts>echo test_COM1:_
    test_COM1:_
     
    G:\scripts>set "var1=COM1:"
     
    G:\scripts>set "var2=!var1:~0,-1!"
     
    G:\scripts>echo test_!var2!_
    test_COM1_
     
    G:\scripts>if /I "!var2!" EQU "COM!sn!" (echo Match )  else (goto notMatch )
    Match
     
    G:\scripts>set /a sn+=1
     
    G:\scripts>goto :eof
     
    G:\scripts>goto :eof
     
    G:\scripts>
     
     
    так как у меня: Состояние устройства COM1:    А если у тебя (вернее, твоих конечных пользователей,  
    по-английски): Status for device con:  
     

    Цитата:
    Status for device con:  
    -------------------------  
    Lines:               300  
    Columns:            80  
    Keyboard rate:     31  
    Keyboard delay:   1  
    codepage:          866

     
    то тебе в скрипте нужно %3 заменить везде на %4 (ну и test-строки поудалять....)

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

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

    Всего записей: 14 | Зарегистр. 17-10-2009 | Отправлено: 20:40 25-10-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VisioNRU
     
    "железно" у меня (workstation, старая) 3 или 4 COM-порта, СОМ-кабель подключен только к одному (что и показывает mode -
    Цитата:
    Состояние устройства COM1:
    ), посмотрел в GUI - можно задать до 256 номеров COM-порта: от COM1, COM2 до COM256. В реестре я не силен, но, ИМХО, если
    Цитата:
    проблема вот в чем после установки XP один из com портов (4) обзывается почему то 5.  
    так вот.. необходимо что то типа проверки на  последовательность 1,2,3,4,5 и если после 3 идёт сразу 5, то переименовать 5 в 4.

    то это должно отражаться в:
    Windows Registry Editor Version 5.00
     
    [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM]
    "\\Device\\Serial0"="COM1"
    "\\Device\\Serial1"="COM2"
     
    Вообще, наверняка, на http://forum.ru-board.com/ есть топик по реестру - там уж точно знают, где что.
    смотри в сторону реестра и команд командной строки для работы с реестром, например - reg add:
     
    .............
    :notMatch
    reg add HKLM\HARDWARE\DEVICEMAP\SERIALCOMM /v \Device\Serial0 /t REG_SZ /d COM1 /f
    и т.д. (что-то такое, проверь синтаксис, здесь - Задачи на bat-файлах - на форуме есть примеры использования синтаксиса reg add)

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 23:32 25-10-2009
    Holytop

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

    Всего записей: 3 | Зарегистр. 25-10-2009 | Отправлено: 23:45 25-10-2009 | Исправлено: evle, 20:10 29-10-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос по sedу.  
    1 Нужно вставить 5 строчку файла 1.txt на 10 строчку файла 2.txt имеющего 20 строчек, а строки с 10 по 20 строчку файла 2.txt соответственно переходят на 11 по 21 строчку.

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 09:17 26-10-2009 | Исправлено: king_stiven, 09:29 26-10-2009
    Joo1z



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    А что мешает скинуть первые 10 строчек из 2.txt в 3.txt, потом туда добавить 5-ю строчку из 1.txt в конец 3.txt, а потом в конец же натолкать остаток из 2.txt, после чего просто переименовать?

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 09:40 26-10-2009
    mouser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    плз ответь !!!
    я не знаю что за параметр вставить чтоб переименовывал любые каталоги

    Всего записей: 800 | Зарегистр. 10-11-2006 | Отправлено: 09:47 26-10-2009
    Joo1z



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mouser
    Тогда вместо DIR впиши * и произойдет чудо.

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 09:53 26-10-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Joo1z
    У седа наверняка всё это есть одной командой
    mouser
    сначала приведи все возможные имена, и на какое поменять надо, есть ли там пробелы  и знаки важно

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 10:23 26-10-2009 | Исправлено: king_stiven, 10:24 26-10-2009
    mouser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Joo1z
    да, но он не понимает что то что он нашёл к примеру -= dfuihggd =- нужно переименовать в ! dfuihggd, а не в ! DIR
     
    Добавлено:
    king_stiven
    так это мне нужно будет знать заранее как у меня могут называться директории ??? ОБЛОМ ((

    Всего записей: 800 | Зарегистр. 10-11-2006 | Отправлено: 10:34 26-10-2009
    Joo1z



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Честно говоря, не работал в SED с двумя файлами сразу или по крайней мере не помню этого. IMHO там нужно будет углубляться в глубины REGEXP, а оно надо, если можно проще?
     
    Добавлено:
    mouser
    если все папки начинаются на -= и заканчиваются на =-, то
    set %newname%=! %oldname:~2,-2%
    ren "%dirname%" "%newname%"

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 10:57 26-10-2009
    mouser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Joo1z
    у меня не выходит .... впихнуть в цикл который был  предложен ранее

    Всего записей: 800 | Зарегистр. 10-11-2006 | Отправлено: 11:56 26-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