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

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

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

    Цитата:
    delims=^|

    Не работает

    Всего записей: 6 | Зарегистр. 09-04-2002 | Отправлено: 21:15 18-02-2010
    mugil_cephalus

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

    Цитата:
    Но! Если второе поле пустое,

    второе поле не пустое
    попробуй так
    UF|1|123|6|  
    UF| |456|7|
    и сравни результат
    при обработке кодом 2-ой строки

    Цитата:
    UF|1|123|6|  
    UF||456|7|  

    "7" - это будет третий token, так как delims=| и код не различает | и ||
     
    и лучше вот такой, модифицированный, код (я так тестировал код)

    Код:
    for /f "tokens=1,3 delims=^|" %%i in (G:\scripts\test\src.txt) do if "_%%i" equ "_UF" echo %%j
    pause

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 21:38 18-02-2010 | Исправлено: mugil_cephalus, 21:52 18-02-2010
    Kirillhome



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    lorents
    В шапке Работа с текстом, датой, и файлами » - · Создание листинга директорий на примере создания плейлиста

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 22:59 18-02-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kirillhome
    а можно для этого кода в параметре Images\*.png добавить ваш код, чтобы можно было бы найти все файлы *.png которые есть в папке Images и подпапках?

    Код:
    for %1 %%i in (Images\*.png) do (
    )

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 23:21 18-02-2010
    mugil_cephalus

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

    Цитата:
    UF|1|123|6|  
    UF||456|7|

    если из всех токенов только третий имеет длину 3 символа, то можно код "натравить" на эту длину http://forum.ru-board.com/topic.cgi?forum=5&topic=29819&start=380#10
     
    Добавлено:
    lorents
    если кинуть в папку images батник с кодом:

    Код:
    for /r "%~dp0" %%i in (*.png) do @echo %%i
    pause

    посм. результат

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 23:28 18-02-2010
    Kirillhome



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    lorents
    Берём вот это и получаем:

    Код:
     
    @echo off
    echo Please wait...
    mode con codepage select=1251 > nul
    if exist c:\all_png.txt del c:\all_png.txt
    for /r %%d in (.) do (
        cd %%d
        for %%f in (*.png) do echo %%f >> c:\all_png.txt
    )
    mode con codepage select=866 > nul
     

    Кладём в папку Images и запускаем.
    На выходе - список всего в c:\all_png.txt

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 23:43 18-02-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ykidia
    http://forum.ru-board.com/topic.cgi?forum=5&topic=29240

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 00:12 19-02-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kirillhome
    я извиняюсь, я забыл сказать мне бы с путями к этим файлам png, либо полные, либо относительно папки Images
     
    mugil_cephalus
    вроде бы то что надо, а как мне прикрутить в мой код
    Я просто в этом деле полный ноль

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 00:27 19-02-2010 | Исправлено: lorents, 00:27 19-02-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents
    а что надо? я задачу так и не понял. объясни подронее.
    а то здесь -  

    Цитата:
    не подскажите, как можно сделать следующее:  
    есть некая папка (назовем ее главная папка) и в ней различные папки и файлы, как можно найти все файлы одно разрешения в главной папке?

    про подпапки не сказано, а здесь сказанео -
    Цитата:
    все файлы *.png которые есть в папке Images и подпапках?

    что? куда? список файлов в лог? где положить лог? где положить батник? есть ли кириллица в нейминге папок?

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 00:39 19-02-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    Сейчас постараюсь все объяснить
    Есть папка Images, и там много разный файлов и папки
    Мне надо получить список png-файлов с путями, как в вашем пример
    и вот когда я полу список файлов вставить из в мой код

    Код:
    for %1 %%i in (Images\*.png) do (
    )  

    вот за место Images\*.png, надо поставить путик png-файлов
    кириллицы нет

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 00:52 19-02-2010 | Исправлено: lorents, 00:53 19-02-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    for /r "%~dp0" %%a in (*.png) do for %1 %%i in (%%~fa) do (  
    )
    pause

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    не код а сказка, я очень сильно извиняюсь Вы не мог ли сделать код чтобы поддерживала кириллица, у меня только сейчас повилась в этом потребность
    Спасибо Вам большое!

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 01:24 19-02-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Myster
    Цитата:
    Есть текстовый файл с разделителями "|". Из строк, где первое поле = "UF", надо извлечь третье поле.
    при встречающихся пустых полях for не рулит, так что проще с ним не мучаться
    Код:
    sed.exe -r -n "s/^UF\|[^|]*\|([^|]*).*$/\1/gp" "InFile" >>"OutFile"
    sed - в гугле или в шапке
    в регэкспе третье поле не обязано заканчиваться на | - допустимо и на EOL (т.е. строку  UF||4567 - поймет), если на наличие четвертого+ полей проверять всё же надо - то можно дополнить.
     
    Добавлено:
    lorents
    Цитата:
    Вы не мог ли сделать код чтобы поддерживала кириллица
    тебе выше Kirillhome писал пример.
    Хотя строчка chcp 1251 в начало батника мне кажется симпатичнее чем возня с mode

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 07:29 19-02-2010 | Исправлено: wolf0425, 07:54 19-02-2010
    lorents



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

    Цитата:
    тебе выше Kirillhome писал пример.
    Хотя строчка chcp 1251 в начало батника мне кажется симпатичнее чем возня с mode  

    пробовал писать так, но у меня не работает

    Код:
    mode con codepage select=1251 > nul
    for /r "%~dp0" %%a in (*.png) do for %1 %%i in (%%~fa) do (  
    )  

    так же пробовал

    Код:
    chcp 1251
    for /r "%~dp0" %%a in (*.png) do for %1 %%i in (%%~fa) do (  
    )  

    но результат тот же

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 08:38 19-02-2010
    wolf0425



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

    Цитата:
    но у меня не работает  
    пример неработы где? и чему примерно равен %1?
     
     
    твое
    Цитата:
    Я просто в этом деле полный ноль
    плохо согласуется с
    Цитата:
    и вот когда я полу список файлов вставить из в мой код  
    - опиши лучше задачу целиком, а то код у тебя странный.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 08:57 19-02-2010 | Исправлено: wolf0425, 09:09 19-02-2010
    lorents



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

    Цитата:
    - опиши лучше задачу целиком, а то код у тебя странный.  


    Код:
    for %1 %%i in (Images\*.png) do (
        optipng.exe -o7 "%%~i"
        advdef.exe -z4 "%%~i"
        pngout.exe "%%~i"
        deflopt.exe "%%~i"
    )

    все exe-файлы для оптимизации png-файлов без потери качества (взял эти четыре, т.к. после них почти всегда png-файлы максимально оптимизированы)
    если надо, то выложу эти программы.
    А вообще хочу сделать программу для оптимизации файлов Microsoft Office 2007.
    Если кто не знает это xml-файлы, упакованные архивом zip.
    Для этого хочу оптимизировать файлы png, jpg без потери качества, и после этого максимально ужать zip-архив. Скажу честно, что после пару испытаний, результаты очень впечатляющие.

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 09:40 19-02-2010 | Исправлено: lorents, 09:45 19-02-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents так все же - что делает %1 в твоем for?
    и эти утилиты сами по себе понимают имена в кирилице?
    Или предлагаешь нам это проверять?
    В чем конкретно состоит "не работают", пример имени файла, на котором "не работает" - будет наконец?
     
    мне кажется что тывообще-то хотел вот это:

    Код:
    chcp 1251
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
        optipng.exe -o7 "%%~fi"
        advdef.exe -z4 "%%~fi"
        pngout.exe "%%~fi"
        deflopt.exe "%%~fi"
    )

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 10:22 19-02-2010 | Исправлено: wolf0425, 10:29 19-02-2010
    Myster

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

    Цитата:
    второе поле не пустое  
    ...
    "7" - это будет третий token, так как delims=| и код не различает | и ||

    Так вопрос из-за того и возник, что поле именно пустое. Ну а раз не различает, тогда действительно только сторонними утилитами...
     
    wolf0425

    Цитата:
    при встречающихся пустых полях for не рулит, так что проще с ним не мучаться
    Код:sed.exe -r -n "s/^UF\|[^|]*\|([^|]*).*$/\1/gp" "InFile" >>"OutFile"  
    sed - в гугле или в шапке  

    То, что надо Спасибо!
     
    P.S. "Но осадок остался..." Хочется все же отделаться подручными средствами и видится такой вариант: до парсинга строки делать замену "||", например, на "| |".

    Всего записей: 6 | Зарегистр. 09-04-2002 | Отправлено: 10:39 19-02-2010
    wolf0425



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

    Цитата:
    Хочется все же отделаться подручными средствами и видится такой вариант: до парсинга строки делать замену "||", например, на "| |".
    сразу выплывут ограничения по другим спецсимволам.
    с учетом того что мне долго думать лень - то как-то так:
    Код:
    @echo off
    for /f "delims=" %%i in ('type "InFile"') do (
        set "string=%%i"
        call :tst
    )
    exit
        
    :tst
    set "string=%string:||=| |%"
    for /f "tokens=1,3 delims=^|" %%a in ("%string%") do if "UF" == "%%a" 1>>OutFile echo.%%b
     

     
    а допутилитами делать замену на лету - так проще сразу вообще без for

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 10:52 19-02-2010 | Исправлено: wolf0425, 13:08 19-02-2010
    lorents



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

    Цитата:
    мне кажется что тывообще-то хотел вот это:  

    Именно это мне и надо было, большое Вам спасибо

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 12:26 19-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