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

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



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ расскажите, я тут поискал так и не нашёл...
     
    изначально возник вопрос как пишется постепенное появление точек - т.е. грубо говоря загрузка( выполнение ) чего либо - например запуск остановка служб.
     
    задачу сузил немного - понятно что должен отработать цикл:
     1 - я не знаю как создать цикл на фиксированное число проходов - например 10 или 12
     2 - я не знаю как выводить на экран в одну строку - команда echo ведь сама добавляет перенос строки...
     
    полагаю что решения естественно уже давно известны. но увы поиски не дали мне того что ищу...
     
    немного почитал тут про замену echo на _cho  - но все-таки стандартные средства как-то это делают...

    Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 00:33 21-03-2010 | Исправлено: Alukardd, 00:39 21-03-2010
    01MDM



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

    Код:
     
    @echo off
    for /l %%i in (0,1,24) do (
       1>nul ping -n 2 localhost
       0>nul set /p="."
    )
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 05:24 21-03-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents
    Цитата:
    Создал отдельно батник, прописал  
    for %i in
    удваивать % в батнике - наверно Пушкин должен?
    как и читать ругань смд на ошибки в синтаксисе
     
    (пример - для комстроки)

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 06:55 21-03-2010 | Исправлено: wolf0425, 07:43 21-03-2010
    lorents



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

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 11:17 21-03-2010 | Исправлено: lorents, 11:30 21-03-2010
    mugil_cephalus

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

    Цитата:
    pushd  C:\RECYCLER\ && rd /s /q .

    сейчас потестил; то есть это удалает не только каталоги, но и файлы - то есть все, что есть внутри, кроме RECYCLER ?

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 11:46 21-03-2010 | Исправлено: mugil_cephalus, 17:58 21-03-2010
    wolf0425



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

    Цитата:
    Бантик просто берет и вырубается после оптимизации файла,
    который из батников вырубается досрочно - с for  или который оптимизирует?
    не должно там ничего вырубаться

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 12:02 21-03-2010
    lorents



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

    Цитата:
    который из батников вырубается досрочно - с for  или который оптимизирует?  

    А как можно определить это?

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 12:13 21-03-2010
    mugil_cephalus

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

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



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

    Цитата:
    запусти первый в консоли

    Я как понимаю проблема в crunch

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 12:25 21-03-2010
    mugil_cephalus

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

    Цитата:
    for %i in (*.png) do call crunch %i

    запусти второй в консоли
    crunch.bat example.png

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 12:40 21-03-2010
    Alukardd



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    большое спасибо! не знаю в который раз вы мну уже выручаете
     
    вот только хотелось бы кое что разъяснить...
    я не 1-ый раз уже встречаю запись вида <цифра> > nul, но не понимаю что каждая из них делает... Пока встречал только 0, 1, 2
    1 я кажется понял что делает... она равносильна строке <команда> > nul
    0 если я правильно понял, то он скидывает на nul-вывод всё, что пишется с клавы, или если более масштабно, то все что пытается записаться на консоль, кроме самой строчки с этой командой?
    Поправьте если, что не так говорю... И если можно, то человеческие объяснения услышать хочу. а не свои догадки... И про 2 не забудьте, и если еще цифры?

    Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 12:47 21-03-2010
    lorents



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

    Цитата:
    запусти второй в консоли  

    все понял, если делаю как Вы говорите, то все работает
    а если через батник, но работает, а потом обрывается работа
     
    Проблемы с батником больше нет, все получилось
     
    У меня в бантике есть два отдельных цикла:

    Код:
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
        optipng.exe -i0 "%%~fi"
        pngcrush.exe -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
        move /y "%%~dpni.tmp" "%%~fi"
        advdef.exe -z -4 "%%~fi"
        deflopt.exe "%%~fi"
        optipng.exe -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
        advdef.exe -z -4 "%%~fi"
        deflopt.exe "%%~fi"
        pngout.exe "%%~fi"
        advdef.exe -z -4 "%%~fi"
        deflopt.exe "%%~fi"
    )

     

    Код:
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
        call png.cmd "%%~fi"
        pngcrush.exe -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
        move /y "%%~dpni.tmp" "%%~fi"
        advdef.exe -z -4 "%%~fi"
        deflopt.exe "%%~fi"
    )

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

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 13:00 21-03-2010 | Исправлено: lorents, 14:55 21-03-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alukardd
    Это перенаправление стандартных потоков ввода-вывода.
     
    0 - STDIN (ввод)
    1 - STDOUT (вывод)
    2 - STDERR (ошибки)
     
    Поток может перенаправляться в файл, в nul или на дескриптор другого потока.
    Можно почитать в справке к cmd (hh ntcmds.chm)  

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:18 21-03-2010
    mugil_cephalus

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

    Цитата:
    Как можно сделать так чтобы пользователь мог сам выбирать, какой из циклов ему запустить?

     
    http://forum.ru-board.com/topic.cgi?forum=5&topic=25393&start=500#9

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    то что надо, спасибо, попытался сделать вот что получилось
    Подробнее...
    Все работает, но появились несколько вопросов:
    1. как сделать чтобы если пользователь вдруг ввел такой символ, который отсутствует в запросе, запрос повторился?
    2. как сделать если в папке Images нет файлов *.png, то запрос не выдается, а пишется что файлов *.png в папке Images не обнаружилось?
     
    Добавлено:
    Подскажите, пожалуйста, мне надо запустить приложение, которое находится в папке Docs
    я прописываю
    Код:
    Docs\pngcrush.exe
    но у меня не запускается, почему?

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 15:02 21-03-2010 | Исправлено: lorents, 15:09 21-03-2010
    METAJIJI

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    есть ini файл, из которого надо прочитать значения переменных

    Код:
     
    param0=value0
    ;param1=value1
    param2=value2
     

     
    читаю и изменяю значения переменных вот так:

    Код:
     
    FOR /F "eol=; tokens=1,* delims==" %%i IN (my.ini) DO (
    IF %%i==param0 ECHO.%%j
    IF %%i==param1 ECHO.%%j
    )
    SET param2=123
     

     
    Теперь вопрос, как создать точно такой же файл, но с измененными значениями, которые я брал...
    В итоге я хочу получить такой файл

    Код:
     
    param0=value0
    ;param1=value1
    param2=123
     

    Всего записей: 27 | Зарегистр. 11-03-2010 | Отправлено: 15:36 21-03-2010 | Исправлено: METAJIJI, 15:38 21-03-2010
    mugil_cephalus

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

    Цитата:
    1. как сделать чтобы если пользователь вдруг ввел такой символ, который отсутствует в запросе, запрос повторился?  


    Код:
    @echo off  
    :loop
    echo [1] PNG Interlace - Noninterlaced  
    echo [2] PNG Interlace - Adam7  
       
    set /p tsk="Choose a task by number: "  
       
    if not defined tsk goto:eof  
    if %tsk%==1 goto:1  
    if %tsk%==2 goto:2  
    if /i "_%tsk%" neq "_1" if /i "_%tsk%" neq "_2" goto:loop
    goto:eof  
       
    :1  
    echo 1  
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (  
        call png.cmd "%%~fi"  
        pngcrush.exe -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"  
        move /y "%%~dpni.tmp" "%%~fi"  
        advdef.exe -z -4 "%%~fi"  
        deflopt.exe "%%~fi"  
    )  
    goto:eof  
     
    :2  
    echo 2  
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (  
        optipng.exe -i1 "%%~fi"  
        pngcrush.exe -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"  
        move /y "%%~dpni.tmp" "%%~fi"  
        advdef.exe -z -4 "%%~fi"  
        deflopt.exe "%%~fi"  
        optipng.exe -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"  
        advdef.exe -z -4 "%%~fi"  
        deflopt.exe "%%~fi"  
    )  
    goto:eof

     
    Добавлено:
    lorents

    Цитата:
    но у меня не запускается, почему?

    а диск указывать?
     
    Добавлено:
    lorents

    Цитата:
    2. как сделать если в папке Images нет файлов *.png, то запрос не выдается, а пишется что файлов *.png в папке Images не обнаружилось?  
     

    не понял - поясни подробнне, что нужно сделать

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 15:38 21-03-2010
    lorents



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

    Цитата:
    Цитировать  

    Надо указать полный путь к файлу?
    Если не трудно можно пример?

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 16:05 21-03-2010
    mugil_cephalus

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

    Цитата:
    Подскажите, пожалуйста, мне надо запустить приложение, которое находится в папке Docs  
    я прописываю  
    Код:Docs\pngcrush.exe  
    но у меня не запускается, почему?

    напрмер, так - том:\путь\Docs\pngcrush.exe

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 16:20 21-03-2010
    lorents



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

    Цитата:
    напрмер, так - том:\путь\Docs\pngcrush.exe

    Я имел ввиду как получить путь, я просто не знаю где будет находится pngcrush.exe, я только знаю что в папке Docs, а папка Docs находится в той же папке что мой батник
     
    Добавлено:
    mugil_cephalus
    Вы не поможете разобраться со вторым вопросом?
    как сделать если в папке Images нет файлов *.png, то запрос не выдается, а пишется что файлов *.png в папке Images не обнаружилось? тоже самое для jpeg. И если можно чтобы все запросы выводились до запуска циклов?
    Просто у меня кроме png есть еще jpeg
    Подробнее...

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 16:22 21-03-2010 | Исправлено: lorents, 16:35 21-03-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