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

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

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

vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 17:45 04-09-2010 | Исправлено: Accessor, 18:04 28-09-2010
    wolf0425



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

    Цитата:
    Наверное она создаётся в момент запуска пакетного файла. Будем знать.  

    она вообще не создается.  
    предоставляемые cmd.exe пседвопеременные %errorlevel% %time% %date% %random% и т.п. заменяются на свои текущие значения в момент парсинга строк, которые их содержат - точно так же как и обычные переменные.  
    А вот наличие таких переменных в выводе set - говорит лишь о том, что пользователь сам зачем-то определил одноименные переменные, за их значения отвечает сам и cmd за их значения больше не отвечает.
     
    а в ДОСе подобной фишки не было, как и многих других привычных на win2000+ фишек - command.com весьма убог по возможностям. И всякие клоны ДОСа - тоже недалеко от него ушли.

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vitaliy91
    Беру свои слова обратно. Только что не поленился, загрузился в доску и на собственной шкуре убедился, что команда "cd" не имеет errorlevel, и команда if в доске упрощена - в ней отрезана ветка else. Ещё раз прошу прощения.

    Всего записей: 2863 | Зарегистр. 31-10-2003 | Отправлено: 17:13 29-10-2010
    smirnvlad

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vitaliy91
    наличие диска всегда можно проверить
    if exist b:\nul goto :bexist
     
    exit
    а если уж он есть то и перейти на него можно
     
    :bexist
    b:
    cd

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 17:40 29-10-2010 | Исправлено: smirnvlad, 17:40 29-10-2010
    vitaliy91

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
     
     
    Под win  работает и можно сократить
    if exist A: echo exist

    Всего записей: 37 | Зарегистр. 16-11-2008 | Отправлено: 19:08 29-10-2010 | Исправлено: vitaliy91, 19:09 29-10-2010
    lorents



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

    Код:
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
        truepng /i0 /zw7 /zc9 /zm1-9 /zs0-3 /fe /force "%%~fi" >nul
        pngout -q -ks "%%~fi"
    )

    Как можно определить размер картинки %%i после truepng и pngout
    у меня ну никак не выходит.

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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 21:32 29-10-2010
    01MDM



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

    Код:
     
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
        truepng /i0 /zw7 /zc9 /zm1-9 /zs0-3 /fe /force "%%~fi" >nul
        pngout -q -ks "%%~fi"
        for %%j in ("%%~fi") do echo %%~zj
    )
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:46 29-10-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    отличная идея, спасибо
     
    Добавлено:

    Код:
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
        truepng /i0 /zw7 /zc9 /zm1-9 /zs0-3 /fe /force "%%~fi" >nul
        for %%k in ("%%~fi") do echo %%~zk >nul
        pngout -q -ks "%%~fi"
        for %%l in ("%%~fi") do echo %%~zl >nul
        if !%%~zk! EQU !%%~zl! (
            for /l %%m in (0,1,5) do pngout -q -s3 -ks -f%%m "%%~fi"
            for /l %%n in (0,1,64) do pngout -q -s3 -ks -n%%n "%%~fi"
        )

        pause
    )

    у меня при любом значении !%%~zk! и !%%~zl!, выполняется условие что они равны, не понимаю почему

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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 21:51 29-10-2010
    01MDM



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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
     
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
         
        truepng /i0 /zw7 /zc9 /zm1-9 /zs0-3 /fe /force "%%~fi" >nul
        for %%k in ("%%~fi") do set "size-1=%%~zk"
        pngout -q -ks "%%~fi"
        for %%l in ("%%~fi") do set "size-2=%%~zl"
         
        if !size-1! EQU !size-2! (
             
            for /l %%m in (0,1,5) do pngout -q -s3 -ks -f%%m "%%~fi"
            for /l %%n in (0,1,64) do pngout -q -s3 -ks -n%%n "%%~fi"
        )
     
        pause
     
    )
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:46 29-10-2010
    king_stiven

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

    гм...

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 22:52 29-10-2010
    lorents



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

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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 23:00 29-10-2010
    BorlandIMHO

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

    При проверке по условию if exist проблема будет со съёмными дисками - если буква есть, а диска в дисководе нет, выдаст ошибку "Устройство не готово" и спросит что делать дальше - (A)bort, (R)etry, (F)ail; и пока не ответишь - будет висеть. В остальном работает.
    Но, в общем-то, такая же ошибка возникнет при обращении к "неготовому" диску любой командой (cd, copy...).
    Кстати, практически такая же засада в общем-то возникнет и в любой винде (опробовано в хрени и в свисте) - с той разницей что окошко выдаст гуёвое...


    ----------
    http://www.imho.ws

    Всего записей: 2403 | Зарегистр. 12-10-2006 | Отправлено: 23:06 29-10-2010 | Исправлено: BorlandIMHO, 23:11 29-10-2010
    vitaliy91

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BorlandIMHO
    Спасибо за пример. Он действительно работает и я испольую 8 версию доса потому что там нет таких проблем с неподготовленным оборудованием и все хоро отрабатывается
     
    Добавлено:
    И такой вопрос. Как можно реализовать в чистом досе do begin чтобы при условии отрабатывалось несколько строк
    например:
    if i==true (
      echo ok
      echo.
    )
     
    Но скобки в чистом досе не будут работать.

    Всего записей: 37 | Зарегистр. 16-11-2008 | Отправлено: 23:25 29-10-2010
    01MDM



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

    Код:
     
    if i==true call: sub
    goto eof
     
    :sub
    echo Ok
    echo.
     
    :eof
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:51 29-10-2010
    BorlandIMHO

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

    Цитата:
    Как можно реализовать в чистом досе do begin чтобы при условии отрабатывалось несколько строк  

    Только по goto либо выносом этих нескольких строк в отдельный батник...
     

    Код:
    SET VARIABLE=ЗНАЧЕНИЕ
    if "%VARIABLE%"=="ЗНАЧЕНИЕ" goto TRUE
    REM здесь, соответственно, не TRUE
    echo ни разу
    echo не равно
    goto CONTINUE
     
    :TRUE
    echo один раз
    echo равно
     
    :CONTINUE
     
    echo проверко завершено!!!
    exit

     
    Добавлено:
    01MDM

    Цитата:
    call: sub  

    в голом ДОСе не работает. call может вызвать только внешний батник...

    ----------
    http://www.imho.ws

    Всего записей: 2403 | Зарегистр. 12-10-2006 | Отправлено: 23:53 29-10-2010
    01MDM



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

    Цитата:
    в голом ДОСе не работает. call может вызвать только внешний батник...

     
    Тогда, да,  goto. Вроде в 4dos можно было использовать call на метку.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 00:02 30-10-2010
    vitaliy91

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BorlandIMHO
    01MDM
     
    Все ясно, спасибо.
    А как можно записать в пеменную текущий каталог чтобы потом можно было в него вернуться
     
    SET curDir=%CD%  в чистом досе не сработает

    Всего записей: 37 | Зарегистр. 16-11-2008 | Отправлено: 00:33 30-10-2010
    OnePrg

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Камрады! Втупил я: долго рассказывать, ну в общем я в типах файлов создал новый тип BAT и назначил ему программку-редактор (!). Теперь батники не выполняются, а просто открываются для редактирования. Как вернуть всё обратно? Спасибо.

    Всего записей: 452 | Зарегистр. 25-10-2007 | Отправлено: 17:14 30-10-2010
    01MDM



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

    Код:
     
    assoc .bat=batfile
    ftype batfile="%1" %*
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:30 30-10-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    в xml есть вложенный файл (<binary content-type="image/jpg" .* =</binary>)
     
    1. как батником его извлечь?
    2. как его заменить другим?  
    в смысле - чем раскодировать/закодировать?

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 21:14 31-10-2010 | Исправлено: wolf0425, 21:17 31-10-2010
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    1) Можно записать всё, что между тегами <binary> во временный файл(sed напр.) и потом декодировать при помощи Base64.exe(в "полезных утилитах" в шапке)  
    base64 -d input.tmp output.jpg
    2) base64 -e input.jpg output.tmp и этот output.tmp вставить уже между тегами <binary>

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 02:37 01-11-2010 | Исправлено: igor_andreev, 02:40 01-11-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 9
    vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru