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

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



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

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



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

    Цитата:
    страненько получаица  
    @ECHO OFF  
    COLOR 9F  
    CLS  
    set "fnum"=""  
    if "fnum"=="" echo 111  
    if not defined fnum echo 222  
    pause  

    А что же здесь странного!?
    Код:
    if "fnum"=="" echo 111
    Проверяется равно ли слово fnum (имя переменной) пустому значению (""). Это равенство ни когда не будет выполнено.
    Для проверки значения переменной нужно писать так:
    Код:
    @ECHO OFF
    COLOR 9F
    CLS
    set "fnum"=""
    if "%fnum%"=="" echo 111
    if not defined fnum echo 222
    pause

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 08:41 15-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    потому что дефайн - определение, переменная определена. ну или задана.
     
    Добавлено:
    тогда может вот так не будет работать
     
    if "%fnum%"=="%fnum%" echo 111

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



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

    Код:
    set "fnum"=""
    Переменная существует, если ее значение не равно пустоте (""). Эта строка не задает переменную, а наоборот, стирает ее (хотя ее до этого и не было ).  
    Хотя правильно ее стереть будет так:

    Код:
    set fnum=
    Можете для проверки существования этой переменной написать:

    Код:
    set fnum=
    if "%fnum%"=="" echo 111
    if not defined fnum echo 222
    Echo %fnum%
    Set fnum
     

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 08:49 15-09-2010 | Исправлено: GORA2, 08:59 15-09-2010
    bomzzz



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

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



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

    Код:
    for /f "delims=" %%a in (source.txt) do (
        echo.%%a
    )

    и тут не выводятся пустые строки

    Всего записей: 71 | Зарегистр. 18-05-2008 | Отправлено: 08:57 15-09-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maqentaer
    Кажись в прошлой части было обсосано поищи в версии для печати по слову  
    пуст
    начиная с конца топика

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



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а ты так сделкай ('type source.txt')

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maqentaer
    for всегда отбрасывает пустые строки.
    Чтоб не отбрасывал надо сделать их не пустыми, например так:
    findstr /r /n ".*" source.txt >source1.txt
    Затем в for надо отбросить номера строк из промежуточного файла:
    for /f "tokens=1,* delims=:" %%a in (source1.txt) do (
        echo.%%b
    )

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



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

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maqentaer
    Только разделитель в for не точка будет, а двоеточие. Очепятка вышла. Пофиксил.

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



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

    Цитата:
    фигу все ранво пустые пропускает  
    после find /n - пустых просто нет, во всех есть номера. номера фором отрезаешь, остальное используешь.
     

    Код:
    @echo off
    for /f "tokens=1* delims=:" %%a in (' findstr /r /n "^" ^<source.txt ') do (
        echo.%%b
    )  

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 09:29 15-09-2010
    res2001



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

    Цитата:
    фигу все ранво пустые пропускает  

    Это по вопросу Maqentaer или в продолжении твоей темы по обработке файлов?

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



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    по вопросу Maqentaer
    я сделал счетчик.
     
    Добавлено:
    http://forum.ru-board.com/topic.cgi?forum=62&topic=21297&start=320#17
    надо было про call получше почитать  

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



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

    Цитата:
    я сделал счетчик.  


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



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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
     
    set "search=%~1"
    set "replace=%~2"
    set "infile=%~3"
    set "outfile=%~4"
     
    if "%outfile%" == "" goto usetemp
    if /i "%infile%" == "%outfile%" goto usetemp
    goto start
     
    :usetemp
    set usetemp=1
    set "outfile=%temp%\%random%"
     
    :start
    del /q /f "%outfile%" >nul 2>&1
     
    set /a skip=0
    for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"%search%" "%infile%"') do (
        call :before %%i !skip!
        1>>"%outfile%" echo.%replace:&=^&%
        set /a skip=%%i
    )
    call :after !skip!
     
    if not "%usetemp%" == "1" goto :eof
    move /y "%outfile%" "%infile%" >nul 2>&1
    goto :eof
     
    :before
    set /a pos=%2+1
    if not "%2" == "0" set "doskip=skip=%2"
    for /f "tokens=1* %doskip% delims=:" %%i in ('findstr /n /r ".*" "%infile%"') do (
        if !pos! == %1 (
            exit /b 0
        )
        1>>"%outfile%" echo.%%j
        set /a pos+=1
    )
    exit /b 0
     
    :after
    if not "%1" == "0" set "doskip=skip=%1"
    for /f "tokens=1* %doskip% delims=:" %%i in ('findstr /n /r ".*" "%infile%"') do (
        1>>"%outfile%" echo.%%j
    )
    exit /b 0
     

     
    Updated:
    подправил свой код.
    p.s. set'ы в начале для большей читаемости.

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maqentaer
    Попробуй утилиту sed заюзать для этих целей.

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    таскать с собой 1МБ ради одной замены не вариант для моей задачи

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



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

    Цитата:
    таскать с собой 1МБ ради одной замены не вариант для моей задачи
    ну для твоей - таскать утилиту в 100кб может и не вариант, наверно у тебя в тексте никаких спецсимволов гарантировано нет...
     
    код, кстати, "грязно" написан, мне кажется что при тривиальном set "replace=1 2" - будут проблемы - >>source_new.txt надо бы в начала строк перенести.

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 10:28 15-09-2010 | Исправлено: wolf0425, 10:30 15-09-2010
    Maqentaer



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    ммм, чет ерунду про sed говорите.
    sed да вешает 90кб,  а вот за собой он тянет либы на 1.2Мб
     
    с set "replace=1 2" да будут проблемы, поэтому я и написал, что это набросок, но для моей задачи этого достаточно, а дальше пока нету времени улучшать.

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