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

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

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

vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 17:45 04-09-2010 | Исправлено: Accessor, 18:04 28-09-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maqentaer
    Во втором и третьем цикле надо вместо "tokens=1,2*" поставить "tokens=1*"
    Иначе оригинальные строки, которые не заменяются, в исходящий файл не добавляются.
    В :before используешь переменную i и в цикле и вне - как-то это не хорошо.
     
    wolf0425

    Цитата:
    set "replace=1 2"

    Потестировал батник Maqentaer, по моему проблем со строками в source и replace, содержащими пробелы, нет.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 11:08 15-09-2010 | Исправлено: res2001, 11:40 15-09-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maqentaer
    Цитата:
    wolf0425
    ммм, чет ерунду про sed говорите.
    sed да вешает 90кб,  а вот за собой он тянет либы на 1.2Мб  

    sed 4.0.7 из unixutils от 10.2003г - те же 95к, и работает без либ.
    sed 3.0.2 из unixutils от 04.2003г - вообще 49кб, и конечно же тоже не требует либ, в unixutils все утилиты так скомпилированы...
    что 4.2 требует трех либ на мегабайт - неудобно, да, но программисты не подсевшие на Cygwin видимо перевелись...
     
    res2001
    Цитата:
    set "replace=1 2"
    Потестировал батник Maqentaer, по моему проблем со строками в source и replace, содержащими пробелы, нет.
    это ты так плохо тестировал.  
    проблема там не в том что пробел, а в том что напечатает сочетание
    set "replace=1 2"
    echo.%replace%>>source_new.txt
    точнее в том, что оно ничего не напечатает.
     
    поправить код недолго, но почему не приучаться писать код не "для себя", а сразу нормально, чтоб таких проблем не было?
    1>>source_new.txt echo.%replace%

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 13:39 15-09-2010 | Исправлено: wolf0425, 14:11 15-09-2010
    res2001



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

    Цитата:
    это ты так плохо тестировал.

    точно, единицу валит на экран, а двойка присоседивается к перенаправлению

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:52 15-09-2010
    Maqentaer



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

    Цитата:
    sed 4.0.7 из unixutils от 10.2003г - те же 95к, и работает без либ.  
    sed 3.0.2 из unixutils от 04.2003г - вообще 49кб, и конечно же тоже не требует либ, в unixutils все утилиты так скомпилированы...  
    что 4.2 требует трех либ на мегабайт - неудобно, да, но программисты не подсевшие на Cygwin видимо перевелись...

    не знал, спасибо.
    буду пользоваться.

    Всего записей: 71 | Зарегистр. 18-05-2008 | Отправлено: 15:09 15-09-2010 | Исправлено: Maqentaer, 15:10 15-09-2010
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    как мне скопировать строки МЕЖДУ известными из одного текстового в другой
    например? скопировать выделенное
    [FloppyFiles.0] - эту строку знаю
    d1,disk1,disk101
    d1,ntdetect.com
    d1,ntkrnlmp.exe
    d1,setupldr.bin
    d1,txtsetup.sif
    d1,biosinfo.inf
    d1,Bootfont.bin
    d1,kbdus.dll

     
     
    [FloppyFiles.1] - эту строку знаю
    d1,disk1,disk102
    d1,hal.dll
    d1,halacpi.dll
    d1,halapic.dll
    d1,halaacpi.dll
    d1,drvmain.sdb

    Всего записей: 260 | Зарегистр. 16-03-2005 | Отправлено: 17:07 15-09-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SLIDER999
    sed использовать религия не мешает? тогда предложу варианты.

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 17:11 15-09-2010
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Не мешает. Нужно только разобраться в нем чуток. Жду предложений.

    Всего записей: 260 | Зарегистр. 16-03-2005 | Отправлено: 17:15 15-09-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Печатать часть файла между двумя регулярными выражениями (включительно):  
    sed -n "/Iowa/,/Montana/p" (регистро зависимый)

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 17:27 15-09-2010
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Эм... Как мне это прикрутить к батнику? Ничего не пойму

    Всего записей: 260 | Зарегистр. 16-03-2005 | Отправлено: 17:35 15-09-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sed -n "/x/,/y/p" file.txt | sed "1 d;$ d"
    замени x и y своими строками
     
     
    Добавлено:
    любой символ (кроме специальных: \[.^*$ ) является регулярным выражением себя;  
     
    \ - перед любым символом, кроме цифр и "(" , ")" , означает этот символ. ( Экранирование специальных символов).

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 17:59 15-09-2010 | Исправлено: king_stiven, 18:44 15-09-2010
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    спасибо, я уже разобрался.
    Теперь другой вопрос:
    я через команду for копирую строки:
    qwerty.sys
    asdfgh.ini
    как мне превратить ее в qwerty.sy_ (такие строки рандомные)
    делаю пока так tokens=1-2 delims=.   и вывожу %%i.* Но это не устраивает. Копируются лишние файлы, попадающие по маске.
     
    Заранее спасибо.

    Всего записей: 260 | Зарегистр. 16-03-2005 | Отправлено: 19:19 15-09-2010 | Исправлено: SLIDER999, 19:22 15-09-2010
    SLIDER999

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

    Всего записей: 260 | Зарегистр. 16-03-2005 | Отправлено: 07:36 16-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну замени. считай все строчки по очереди, потом отрежь последний символ и допиши звездочку.
     
    Добавлено:

    Цитата:

    @ECHO OFF
    COLOR 9F
    CLS
    setlocal enabledelayedexpansion
    for /F "delims=" %%I in ('type my.txt') do (
    SET NEWSTRING=%%I
    SET NEWSTRING=!NEWSTRING:~0,-1!*
    ECHO !NEWSTRING!>>MY1.txt
    )
    DEL MY.TXT
    REN MY1.TXT MY.TXT
    PAUSE

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 07:46 16-09-2010 | Исправлено: bomzzz, 07:53 16-09-2010
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz
    так я не знаю какой командой это сделать. Как определить последний символ в строке?

    Всего записей: 260 | Зарегистр. 16-03-2005 | Отправлено: 07:51 16-09-2010
    bomzzz



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

    Цитата:
     
    @echo off
    set A=12345
        ::задаем значение переменной A
    echo %A:~0,1%
        ::вывод ПЕРВОГО СИМВОЛА из значения переменной
    echo %A:~-1,1%
        ::вывод ПОСЛЕДНЕГО СИМВОЛА из значения
    echo %A:~-3%
        ::вывод ТРЁХ ПОСЛЕДНИХ символов
    echo %A:~0,3%
        ::вывод ТРЁХ ПЕРВЫХ символов
    echo %A:~1%
        ::вывод значения БЕЗ ПЕРВОГО символа
    %PATH:~-10%
        ::извлечет последние 10 символов переменной PATH.
    %PATH:~0,-2%
        ::извлечет все символы переменной PATH, за исключением 2-х последних.
     

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 07:53 16-09-2010 | Исправлено: bomzzz, 07:54 16-09-2010
    king_stiven

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

    Цитата:
    заменить последний символ в каждой строке на *

    sed -nr "s/(^.*).$/\1*/gp" file.txt

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 07:55 16-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SLIDER999
    фигня получается, управляющие символы так нельзя передать. седом лучи

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 08:01 16-09-2010
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz спасибо
    king_stiven спасибо. Испльзовал ваш метод. Где можно прочитать подробную докуметнацию по sed комендам?

    Всего записей: 260 | Зарегистр. 16-03-2005 | Отправлено: 08:02 16-09-2010
    bomzzz



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

    Цитата:
    @ECHO OFF
    COLOR 9F
    CLS
    for /F "delims=" %%I in ('type my.txt') do (
    set NEWSTRING=%%I
    call :next
    )
    DEL MY.TXT
    REN MY1.TXT MY.TXT
    PAUSE
    goto :eof
    :next
    echo %NEWSTRING:~0,-1%*>>MY1.TXT

    так хоть восклицательные знаки передаюца
     
    Добавлено:
    SLIDER999
    на сайте седа и в хелпе

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 08:02 16-09-2010 | Исправлено: bomzzz, 08:10 16-09-2010
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    И последнее (наверное): как можно изменить регистр файлов? В частности интересует перевод только в верхний.

    Всего записей: 260 | Зарегистр. 16-03-2005 | Отправлено: 08:26 16-09-2010 | Исправлено: SLIDER999, 08:27 16-09-2010
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 9
    vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru