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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Помогите решить следующую задачу:
    у меня есть файл png.log
    мне надо найти значение f от наименьшего значения IDAT

    Код:
    for /f "tokens=4" %%i in ('find "IDAT" png.log') do set f=%%~ni

    как видно, в png.log значение f=5e, как можно убрать "e"?

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 12:22 09-08-2010
    boy999



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

    Цитата:
     и полными путями

     
    Не знаю, как путь в ТС скопировать....
    Он длинный очень для ручного ввода....

    Всего записей: 2030 | Зарегистр. 19-05-2008 | Отправлено: 13:01 09-08-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    boy999
    1 сначала открываем комстроку:
    кнопка пуск - выполнить -в окне набираем  
    cmd
    О К
    должно открыться чёрненькое окошко
     
    2 затем набраем там:
    start ""  
    а файлы далее вставляем методом драг энд дроп переносим в окошко нужные файлы, прочитай про этот метод в инете.
    Как составится строка (смотри посты выше, проверяй каждый пробел внимательно ) , нажимай капу enter.

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 13:16 09-08-2010 | Исправлено: king_stiven, 13:21 09-08-2010
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents

    Код:
    for /f "tokens=4" %%i in ('find "IDAT" png.log') do call:val %%i
    goto:eof
    :val
    set f=%1
    set f=%f:~2,1%

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 14:18 09-08-2010
    lorents



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

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 14:28 09-08-2010
    cin



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Еще раз привет.
    Требуется переформатировать файл из вида
    строка 1
    строка 2
    строка 3
    строка 1
    строка 4
    строка 1
    строка 5
    строка 6
    ....
     
    в  
    строка 1 строка 2 строка 3
    строка 1 строка 4
    строка 1 строка 5 строка 6
     
    как это сделать с помощью cmd ??

    Всего записей: 53 | Зарегистр. 26-12-2006 | Отправлено: 15:42 09-08-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    cin  в чем глубокий смысл почторения строка 1 в файле? что на ней надо строку рвать?
    если спецсимволов в файле нет то наверно как-то так:

    Код:
    @echo off
    setlocal enabledelayedexpansion
    chcp 1251
     
    set "str="
    for /f "delims=" %%a in (file1) do (
        if "%%~a" equ "строка 1" (  
            if defined str 1>>file2 echo.!str!
            set "str=%%~a"
        ) else     set "str=!str! %%~a"
    )
    1>>file2 echo.!str!

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 16:18 09-08-2010
    cin



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    смысл в том чтобы разобрать файл для автоматизации
    строка1=область
    строка2=город
    строка3=магазин
     
    каждая строка в первом файле заканчивается символом ввода строки
    надо по идее брать строку 1 и помещать все остальные строки за ней, убирая ввод строки
    как только встретится опять строка1 надо начать новую строку

    Всего записей: 53 | Зарегистр. 26-12-2006 | Отправлено: 16:32 09-08-2010
    Maximus777

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди добрые, подскажите плиз как обнулить файл? Точно знаю, что элементарщина, но никак не могу найти рецепт. "> file" не проканывает.
     
    Тьфу, блин! Тока написал и тут же нашёл.
    set a=b > file

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 16:38 09-08-2010 | Исправлено: Maximus777, 16:42 09-08-2010
    wolf0425



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

    Цитата:
    как только встретится опять строка1 надо начать новую строку  
    ты уж сначала сам определись что - строка 1, строка1 или строка1=область должны вызывать разрыв строки, что точно писать в выходной файл, а заодно что делать если в области более одного города, а в городе более одного магазина. И какие спецсимволы попадаются в файле
    в смысле - пиши кусок реального или похожего, пригодного для тестов, входного файла, и кусок того что нужно на выходе. А не каждый раз разные высосанные из пальца строки.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 16:43 09-08-2010
    cin



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    непонятно, файл не работает, как починить - не знаю, можешь объяснить что там что означает?
    [q]
    например  
    почему в кавычках?
    set "str="  
        if "%%~a" equ "строка 1" (  
    вот здесь почему %%~a ? что это означает?
     
    if defined str 1>>file2 echo.!str!  
     
    str 1>> наверно  ты имеешь в виду строка 1??
     
    Спасибо.
     
     
     
     
    Добавлено:
    wolf0425
    Вот так выглядит.
    названия только убрал
    Russia
    Regions
    Samara
    Shop1
    Russia
    Regions
    Samara
    Shop2
    Russia
    Regions
    Samara
    Shop3
    Russia
    Regions
    Tolyatti
    Shop1
    Russia
    Regions
    Tolyatti
    Shop2
    Russia
    Regions
    Tolyatti
    Shop2
    Russia
    Regions
    Tolyatti
    Shop3
    Russia
    Regions
    Saratov
    Shop1
     
    Надо чтобы было так
    Russia Regions Samara Shop1
    Russia Regions Samara Shop2
    Russia Regions Samara Shop3
    Russia Regions Tolyatti Shop1
    Russia Regions Tolyatti Shop2
    Russia Regions Tolyatti Shop2
    Russia Regions Tolyatti Shop3
    Russia Regions Saratov Shop1
     
    Вместо shop1 shop2 и т.п.  реальные названия
    Понимаю что перл больше подходит, просто интересно и не требует перла на рабочей станции.
     
    Добавлено:
    ну и каждая строка в файле 1 заканчивается возвратом каретки (CR+LF)
    код в винде 0D 0A

    Всего записей: 53 | Зарегистр. 26-12-2006 | Отправлено: 16:44 09-08-2010
    wolf0425



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

    Цитата:
    непонятно, файл не работает,
    на том входном что ты написал в первом сообщении - работает, дальше начинаются ньюансы

    Цитата:
    например  почему в кавычках?  
    чтобы разные непонятные пробелы в переменную не лезли. set "str="  - штатный способ разопределить переменную.

    Цитата:
    вот здесь почему %%~a ? что это означает?  
    читать for /? самому не судьба?  
    применительно к коду - очередная строка. только ты почему-то for потерял при цитировании, без него - ничего.
     

    Цитата:
    str 1>> наверно  ты имеешь в виду строка 1??  
    наверно не имею, на заданном тобой в начале примере этот код исправно работает и пишет ровно то что ты в начале просил.
    буквально процитированное делает: если определена переменная str (rem та, которую мы на всякий случай разопределили в начале) то (rem это означает что это не первое вхождение строка 1) надо напечатать набранную для файла2 строку и начать собирать новую. 1>>file2 - это перенаправление печати для идущего следом echo
     
    зы: ну держи очередную итеррацию.

    Код:
    @echo off
    setlocal enabledelayedexpansion
    chcp 1251
     
    set "str="
    for /f "delims=" %%a in (file1) do (
        if "%%~a" equ "Russia" (  
            if defined str 1>>file2 echo.!str!
            set "str=%%~a"
        ) else     set "str=!str! %%~a"
    )
    1>>file2 echo.!str!
     
     
     
    названия городов и магазинов у тебя как - часом не с кавычками?  и каких-то спецсимволов там точно нет?

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 16:53 09-08-2010 | Исправлено: wolf0425, 17:01 09-08-2010
    01MDM



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

    Код:
     
    @echo off
    setlocal
    chcp 1251 1>nul
     
    0>nul 1>>2.txt set /p="Russia "
    for /f "skip=1 tokens=*" %%i in (1.txt) do (
        if "%%i"=="Russia" 1>>2.txt echo.  
        0>nul 1>>2.txt set /p="%%i "
    )  
    echo.
    chcp 866 1>nul
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:01 09-08-2010 | Исправлено: 01MDM, 17:05 09-08-2010
    Maximus777

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно как-то узнать из батника размер определённого файла? Помогите советом.

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 17:14 09-08-2010
    cin



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

    Всего записей: 53 | Зарегистр. 26-12-2006 | Отправлено: 17:20 09-08-2010
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maximus777

    Цитата:
    Можно как-то узнать из батника размер определённого файла?

    По-простому так:

    Код:
    call:size C:\myfile.ext
    :size
    echo %~z1

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 17:46 09-08-2010
    Maximus777

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rush
    Хм, мне бы надо так сказать не выходя из батника использовать эту инфу. Т.е. цель такая:
    set filesize=size(file)
    if filesize <> 0 (.........)

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 18:02 09-08-2010
    us0r



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    call:size C:\myfile.ext  
    :size  
    set filesize=%~z1
    if not %filesize% == 0 (...)

    Всего записей: 407 | Зарегистр. 06-12-2007 | Отправлено: 18:14 09-08-2010 | Исправлено: us0r, 18:22 09-08-2010
    Maximus777

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

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 18:21 09-08-2010
    us0r



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maximus777
    Все благодарности- Rush (Тот, кому за 30)
    Ну... Она вряд ли когда- то была простой...
    В любом случае тебе ещё поможет, как тут не раз писалось, hh ntcmds.chm (в коммандной строке набери )

    Всего записей: 407 | Зарегистр. 06-12-2007 | Отправлено: 18:24 09-08-2010 | Исправлено: us0r, 18:25 09-08-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