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

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

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

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    BagaBaga

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите , как парсить файл (точнее - строку)
     
    есть файл, содержащий строку (разделитель = ,):
     
    первый второй, еще один, еще как
     
    батник должен выдать:
     
    первый второй
    еще один
    еще как
     
    PS
    Пробовал с For /F, но с чем-то накосячил - получаю только первую строку.

    Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 20:04 07-02-2010
    wolf0425



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

    Код:
    for /f "tokens=1,2* delims=," %%a in ( file.txt ) do (
        echo %%a
        echo %%b
        echo %%c
    )

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 22:15 07-02-2010
    kirik64



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как организовать простейший цикл for...next?
    Мне нужно сделать так:
    Код:
    for i=1 to n
    start /wait prog.exe
    next
    т.е. чтобы программка выполнялась n раз, но ждала своего завершения перед рестартом.
    Туплю я...

    ----------
    god give_health give_ammo give_armor noclip notarget jumpheight 128 timescale 25 - В.Пелевин, "t" (2009)

    Всего записей: 2317 | Зарегистр. 11-12-2006 | Отправлено: 01:58 08-02-2010
    wolf0425



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

    Цитата:
    Туплю я...
    а самосоятельно прочитать for /? - никак нельзя?
    for /L %%i in (1,1,100) do start "" /w prog.exe

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 06:38 08-02-2010
    alexandrExt

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа эксперты, подскажите пожалуйста, как можно решить такую задачу:
    Есть N-ое количество обновлений для windows. Надо их устанавливать в определенном порядке. Можно ли и, если можно, то как сделать следующее:
    1. создать файл со списком обновлений в формате: kb***** - без указания полного имени файла;
    2. Организовать проверку установки - установлено данное обновление или нет;
    3. Если не установлено, то установить, если установлено - пропустить.
     
    Желательно со счетчиком (X установлено из Y).
    Предусматривается обобщенный вариант потому, что обновления хотелось бы так устанавливать в Windows *** Ru и Eng.
     

    Всего записей: 1 | Зарегистр. 08-02-2010 | Отправлено: 08:10 08-02-2010
    slech



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

    Цитата:
     
    set arcdir=c:\progra~1\7-Zip
    set arcprog=7z.exe
    ::
    set m=06
    set y=08
    ::
    %arcdir%\%arcprog% a -t7z IIS_Logs_20%y%%m% ex%y%%m%*.log
    del ex%y%%m%*.log
    pause
     

    подскажите пожалуйста как пробежаться в цикле по m=01-12 ?
    спасибо.

    Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 10:42 08-02-2010 | Исправлено: slech, 10:42 08-02-2010
    Tase4ka

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите составить батник. А то я что-то совсем запуталась
     
    Задача такая в каталоге хранятся файлы типа  
    fin-backup-100203-2.nbk
    fin-backup-100204-2.nbk
    fin-backup-100205-2.nbk
    fin-backup-100206-2.nbk
    Нужно удалить старые файлы при этом ограничиваем количество хранимых файлов 3 штуками. То есть если в каталоге больше 3-х файлов с именами тип *-2.nbk удаляем старые и оставляем тока три последних.
     Я сама в корень запуталась. Помогите написать батничек.

    Всего записей: 6 | Зарегистр. 04-12-2009 | Отправлено: 12:29 08-02-2010
    wolf0425



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

    Цитата:
    как пробежаться в цикле по m=01-12 ?  
    проще вместо m сразу переменную цикла вставлять:

    Код:
    set y=08
    ::  
    for %%m in ( 01 02 03 04 05 06 07 08  09 10 11 12 ) do (
        %arcdir%\%arcprog% a -t7z IIS_Logs_20%y%%%m ex%y%%%m*.log
        del ex%y%%%m.log  
    )

     
    Tase4ka
    Цитата:
    То есть если в каталоге больше 3-х файлов с именами тип *-2.nbk удаляем старые и оставляем тока три последних.
     Я сама в корень запуталась. Помогите написать батничек.
    удаление по дате модификации всех файлов, удовлетворяющих маске - кроме 3 самых свежих
    Код:
    @echo off
    setlocal enabledelayedexpansion
    set count=0
    for /f "delims=" %%a in (' dir /b /a-d /o-d *-2.nbk ') do set /a count += 1 & if !count! gtr 3 del /y "%%a"

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 12:55 08-02-2010 | Исправлено: wolf0425, 13:09 08-02-2010
    BagaBaga

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

    Цитата:
    [/q]
    [q]BagaBaga
     
    Код:
    for /f "tokens=1,2* delims=," %%a in ( file.txt ) do (
        echo %%a
        echo %%b
        echo %%c
    )
     

     
    Вероятно, я не правильно выразился. Количество элементов в строке (в файле) не известно.  Т.е. в случае 3х Ваш код работает. В случае 4х и более - нет

    Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 13:13 08-02-2010
    Tase4ka

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425, Спасибо огроменное! Это именно то что нужно :*

    Всего записей: 6 | Зарегистр. 04-12-2009 | Отправлено: 13:42 08-02-2010 | Исправлено: Tase4ka, 13:43 08-02-2010
    wolf0425



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

    Цитата:
    Количество элементов в строке (в файле) не известно.  


    Код:
    @echo off
    set tk=1
    :_repeat
    for /f "tokens=%tk%* delims=," %%a in ( file.txt ) do (
        echo.%%a
        if "%%b" equ "" goto :eof
    )
    set /a tk += 1
    goto :_repeat

     
    ,, трактуется как ,  
    , , напечатает строку из пробела

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 13:45 08-02-2010 | Исправлено: wolf0425, 13:46 08-02-2010
    BagaBaga

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425,
    спасибо!
     
    а как еще лидирующие (начальные) пробелы убрать из %%a (если после запятой есть пробел перед символьной строкой, то он тоже выводится)

    Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 14:11 08-02-2010
    Keir

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток. Подскажите пожалуйста, как создать батник с записью в файл, но только если в файле отсутствует данная строка.  
     
    То есть например  
     
    @echo off  
    echo 127.0.0.1 localhost>>C:\Windows\System32\drivers\etc\hosts  
     
    как сделать, чтобы данная строчка записывалась в файл, только если она там отсутствует.  
     
    Заранее спасибо.

    Всего записей: 2 | Зарегистр. 08-02-2010 | Отправлено: 15:19 08-02-2010
    wolf0425



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

    Цитата:
    а как еще лидирующие (начальные) пробелы убрать  
    если пробел один - поменять печать на echo %%a
    побочный эффект - на , , будет неадекват.
    Если надо и много пробелов давить - могу придумать, но несколько громоздко.
     
     
    Добавлено:

    Цитата:
    echo 127.0.0.1 localhost>>C:\Windows\System32\drivers\etc\hosts  
     
    как сделать, чтобы данная строчка записывалась в файл, только если она там отсутствует.  
    а строка известная или неизвестная?
    если известная, то проверить и при отсутствии - записать

    Код:
    find /i "127.0.0.1 localhost" C:\Windows\System32\drivers\etc\hosts  || echo 127.0.0.1 localhost>>C:\Windows\System32\drivers\etc\hosts

    если строка неизвестная (генерится программой) - то перехватить (с помощью for), после чего аналогично проверить и записать...

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 15:59 08-02-2010 | Исправлено: wolf0425, 16:06 08-02-2010
    BagaBaga

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425,
    я делал echo %%a
     
    Просто, если в файле лежит
    Раз Два, Три Четыре, Пять Шесть, Семь One
     
    то выход будет

    Код:
     
    Раз Два
     Три Четыре
     Пять Шесть
     Семь One
     

     
    т.е. требуется убрать эти "унаследованные" после запятой пробелы
     
    PS
    Просто я не могу заставить с "той стороны" пробелы не ставить, значит, придется их обрабатывать. Хотелось обойтись bat-файлами, но если придется, то сварганю прогу на чем-то более привычном

    Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 16:15 08-02-2010
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    добрый день
     
    подскажите пожалуйста, можно ли добавить текст из файла в другой файл только выше существующего текста
     
    more file.txt >> file2.txt  - это добавляет ниже существующего
     
    спасибо

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 17:43 08-02-2010 | Исправлено: JohnRD, 17:45 08-02-2010
    BagaBaga

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JohnRD,
    если оба файла существуют, то
     
    copy /b f1.txt+f2.txt f3.txt
    echo y | del f2.txt
    ren f3.txt f2.txt

    Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 18:00 08-02-2010
    kirik64



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Цитата:
    а самосоятельно прочитать for /? - никак нельзя?
    Читал, как же . Но у меня идиосинкразия к синтаксису дяди Билли. Благодарю.

    ----------
    god give_health give_ammo give_armor noclip notarget jumpheight 128 timescale 25 - В.Пелевин, "t" (2009)

    Всего записей: 2317 | Зарегистр. 11-12-2006 | Отправлено: 19:58 08-02-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BagaBagaможно и на батфайле, только то что приходит в голову - имеет проблемы проблемы со спецсимволами <> ^ %
    если их не ожидается - то вроде работает.

    Код:
    set tk=1
    :_repeat
    for /f "tokens=%tk%* delims=," %%a in ( file.txt ) do (
        call:_print %%a
        if "%%b" equ "" goto :eof
    )
    set /a tk += 1
    goto :_repeat
     
    :_print
    echo %*
    goto :eof

     
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 20:12 08-02-2010 | Исправлено: wolf0425, 20:13 08-02-2010
    king_stiven

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

    Код:
    @echo off
    set tk=1
    :hjk
    if not "%tk%"=="1" echo %tk1%
    for /f "tokens=%tk%* delims=," %%a in (file.txt) do (
        set tk1=%%a
        goto uio
    )
    goto :eof
    :uio
    if "%tk1:~0,1%"==" " (
        set tk1=%tk1:~1%
        goto uio
    )
    set /a tk+=1
    goto hjk

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 21:24 08-02-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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru