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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gryu
    если тебе все еще нужен
    Цитата:
    Теперь выбор папки остался.

    можешь поискать здесь ( не уверен есть ли такой в наличии )  
    http://ss64.net/westlake/nt/
    и  
    http://www.robvanderwoude.com/batchtools.php

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



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

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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 13:10 25-06-2010 | Исправлено: lorents, 13:10 25-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    igor_andreev
    Это справедливо только для варианта, когда последовательность подкаталогов состоит из 4.
    Вот общий случай:
    SLIDER999

    Код:
    @echo off
    setlocal enabledelayedexpansion
    for /F "tokens=*" %%a in (test.txt) do (
        set bb=%%~pa
        set bb=!bb:~,-1!.txt
        call :lastname %%~nxa !bb!
    )
    goto:eof
     
    :lastname
    echo %~n2\%1
    exit /b
     

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:29 25-06-2010
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    res2001
    спасибо !!!
     
    Теперь еще Если можно конечно
     
    есть файл get.log:

    Цитата:
    LOG_TEMP\07_06_20_dat.log
    LOG_TEMP\07_06_21_dat.log
    LOG_TEMP\07_06_22_dat.log
    LOG_TEMP\07_06_23_dat.log
    LOG_TEMP\07_06_24_dat.log
    LOG_TEMP\07_06_25_dat.log
    и т.д.

     
    Есть часть скрипта:

    Цитата:
    :: Делаем финальный finish.log
    if exist get.log For /F "Delims=" %%I In (get.log) Do (
    echo = = = =     >>finish.log
    echo = = = ======================      %%I>>finish.log
    echo = = = =     >>finish.log
    findstr "\ERRORDAT" %%I>>finish.log
    echo..>>finish.log
    )

     
    В результате получается неподъемный finish.log - больше 60 мб
     
    Как сделать разделение, допустим finish1.log, finish2.log по месяцам? (где 07_06_25_dat.log - год_месяц_день_dat.log)
     
    Заранее спасибо

    Всего записей: 261 | Зарегистр. 16-03-2005 | Отправлено: 13:40 25-06-2010 | Исправлено: SLIDER999, 13:41 25-06-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Хочу сделать отчет об оптимизации изображений, но не знаю как получить первоначальный размер файла, а ведь его обрабатываю?
    И еще как можно сохранить полученную таблицу в Excel?
     
    ImageOptimizer.bat

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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 14:34 25-06-2010 | Исправлено: lorents, 14:35 25-06-2010
    res2001



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

    Код:
    @echo off
    rem Делаем финальный finish.log
    setlocal enabledelayedexpansion
    set mm=0
    if exist get.log For /F "Delims=" %%I In (get.log) Do (
    for /F "tokens=4 delims=\_" %%a in ("%%I") do if !mm! neq %%a set mm=%%a
    echo = = = =     >>finish!mm!.log
    echo = = = ======================      %%I>>finish!mm!.log
    echo = = = =     >>finish!mm!.log
    findstr "\ERRORDAT" %%I>>finish!mm!.log
    echo..>>finish!mm!.log
    )

    смотри, сам не тестировал.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:42 25-06-2010 | Исправлено: res2001, 14:53 25-06-2010
    wolf0425



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

    Цитата:
    но не знаю как получить первоначальный размер файла, а ведь его обрабатываю?  
    точно так же как текущий размер, только запомнить до обработки.
    до просветления курить call /? и накиданные тебе примеры с печатью размера, включая приведенный тобою батник. всё там есть.
     

    Цитата:
    И еще как можно сохранить полученную таблицу в Excel?  

    в .csv пиши, нафиг тебе форматирование ячеек.
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:49 25-06-2010 | Исправлено: wolf0425, 14:50 25-06-2010
    res2001



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

    Цитата:
    первоначальный размер файла

    размер файла можно получить так: %~z1

    Цитата:
    И еще как можно сохранить полученную таблицу в Excel?  

    В excel из бат никак. Ты можешь сделать csv - текстовый файл с разделителями и открывать его в екселе как то так: excel.exe file.csv. Только надо предварительно опередлится, какой там у ексела стандартный разделитель, это уже можно методом проб.
     
    А если делать по уму какой-то отчет в екселе, то надо заюзать vbs или js.
     
    Добавлено:
    или vba из ексела непосредственно, что гораздо удобнее.

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



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

    Цитата:
    Только надо предварительно опередлится, какой там у ексела стандартный разделитель,  
    колонок - ;
    т.е. писать в файл что-то типа
    Код:
    "col 1";"col 2";"col 3";"col 4";
    111;222;333;444;


    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:53 25-06-2010 | Исправлено: wolf0425, 14:53 25-06-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    я не много не могу представить как мне сделать отчет
    можно пример, на базе одного из моих циклов?

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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 16:14 25-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    lorents
    не увидел у тебя в коде создания отчета.
    В общем случае так:
    echo %1;%2;%3 >>file.csv

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 16:22 25-06-2010 | Исправлено: res2001, 16:27 25-06-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    Я так понимаю, что я должен получить первоначальный список файлов с размерами, для этого я должен написать код в начале :loop1 и :loop2, и в конце после обработки
    я просто не понимаю что надо прописать?
    Вы не могли поподробнее написать?
     
    Добавлено:
    и еще один вопрос, пытался сделать проверку на наличие необходимых файлов

    Код:
    set DocDir="%~dp0Docs\"
    PATH %DocDir%;%PATH% >nul
    if not exist %DocDir%advdef.exe echo AdvPng missing! & goto:eof
    if not exist %DocDir%deflopt.exe echo DeflOpt missing! & goto:eof
    if not exist %DocDir%jhead.exe echo Jhead missing! & goto:eof
    if not exist %DocDir%jpegtran.exe echo Jpegtran missing! & goto:eof
    if not exist %DocDir%optipng.exe echo OptiPng missing! & goto:eof
    if not exist %DocDir%pngcrush.exe echo PngCrush missing! & goto:eof
    if not exist %DocDir%pngout.exe echo PngOut missing! & goto:eof
    if not exist %DocDir%prepng.exe echo PrePng missing! & goto:eof
    if not exist %DocDir%zlib.dll echo Zlib missing! & goto:eof

    Хотел спросить, где я ошибся, выдает что AdvPng  
    и как сделать, чтобы выдавался список файлов, которых нет?
    а не поодному как сейчас

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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 16:47 25-06-2010 | Исправлено: lorents, 16:48 25-06-2010
    wolf0425



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

    Цитата:
    Хотел спросить, где я ошибся, выдает что AdvPng  
    предлагаешь помочь тебе найти в коде строку, где накписано AdvPng ???

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 17:00 25-06-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    ой не дописал, выдает "AdvPng missing!", хотя файл advdef.exe есть в папке Docs

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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 17:11 25-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    lorents
    Смотрел твой код.
    Есть вопрос.
    В процедуре :Noninterlaced есть вызов call :pngopt "%%~fi"
    Ты предполагаешь что после обработки в :pngopt код должен был бы продолжить выполняться со строки после call :pngopt?
    На сколько я вижу, сейчас в :Noninterlaced вообще делается только пол итерации, независимо от количества файлов *.png, после вызова :pngopt управление не передается назад в :Noninterlaced, а переходит в goto :jpegwork из :pngopt.
    Если надо возвращаться в :Noninterlaced то в конце :pngopt вместо goto :jpegwork надо поставить exit /b.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 20:30 25-06-2010 | Исправлено: res2001, 20:31 25-06-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    Не поверишь, но я только что это исправил
     

    Цитата:
    Если надо возвращаться в :Noninterlaced то в конце :pngopt вместо goto :jpegwork надо поставить exit /b.

    я просто убрал goto :jpegwork, и заработало, но на всякий случай написал exit /b
     
    Спасибо

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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 20:37 25-06-2010 | Исправлено: lorents, 20:38 25-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Кстати и в :compare та же история.
     
    Код поправил, добавил строки для создания отчета. Тестируй.
     
    Добавлено:
    lorents

    Цитата:
    и как сделать, чтобы выдавался список файлов, которых нет?
    а не поодному как сейчас
     

    goto:eof поубирай из всех строк и добавь в самом конце после всех if
     
     
    Добавлено:
    поправил код, ошибка была в echo

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 20:38 25-06-2010 | Исправлено: res2001, 20:43 25-06-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    Супер, Большое спасибо
    Хотел спросить, как можно убрать путь к файлу, оставить только имя и расширение?
    И еще один вопрос, как можно создать еще один столбец, чтобы показать на сколько % уменьшился файл?
     
    Пока тестировал заметил один баг, при вводе параметров, Как сделать чтобы в параметр оптимизации PNG можно было вводить только значение 1 и 2, и если пользователь вел другое значение, то повторить запрос, а если ничего не ввел и нажал на Enter, то пропустить оптимизацию файлов PNG
     
    Тоже самое в JPEG
     
    res2001
    еще раз большое спасибо!
     
    Добавлено:

    Цитата:
    goto:eof поубирай из всех строк и добавь в самом конце после всех if  

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

    Код:
    if not exist "%~dp0Docs\advpng.exe" echo AdvPng missing!
    if not exist "%~dp0Docs\deflopt.exe" echo DeflOpt missing!
    if not exist "%~dp0Docs\jhead.exe" echo Jhead missing!
    if not exist "%~dp0Docs\jpegtran.exe" echo Jpegtran missing!
    if not exist "%~dp0Docs\optipng.exe" echo OptiPng missing!
    if not exist "%~dp0Docs\pngout.exe" echo PngOut missing!
    if not exist "%~dp0Docs\prepng.exe" echo PrePng missing!
    if not exist "%~dp0Docs\zlib.dll" echo Zlib missing!
    pause>nul
    goto:eof

    работает, но хотелось чтобы выдавалось сообщение, если хотя бы один файл не найден "следующие файлы не найдены:"
    и только после этого список не найденных файлов

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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 21:07 25-06-2010 | Исправлено: lorents, 21:19 25-06-2010
    res2001



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

    Цитата:
    работает, но хотелось чтобы выдавалось сообщение, если хотя бы один файл не найден "следующие файлы не найдены:"
    и только после этого список не найденных файлов

     
    if not exist "%~dp0Docs\advpng.exe" set "nofile=AdvPng "
    if not exist "%~dp0Docs\deflopt.exe" set "nofile=%nofile%DeflOpt "
    if not exist "%~dp0Docs\jhead.exe" set "nofile=%nofile%Jhead "
    if not exist "%~dp0Docs\jpegtran.exe" set "nofile=%nofile%Jpegtran "
    if not exist "%~dp0Docs\optipng.exe" set "nofile=%nofile%OptiPng "
    if not exist "%~dp0Docs\pngout.exe" set "nofile=%nofile%PngOut "
    if not exist "%~dp0Docs\prepng.exe" set "nofile=%nofile%PrePng "
    if not exist "%~dp0Docs\zlib.dll" set "nofile=%nofile%Zlib"
    if defined nofile echo Слудющие файлы не найдены: %nofile%
    pause>nul
    goto:eof
     
    Остальное сейчас сделаю.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 21:32 25-06-2010
    lorents



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

    Цитата:
    Остальное сейчас сделаю.

    не знаю как Вас и благодарить

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

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