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

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



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

    Цитата:
    А вообще, ты вроде задавал этот вопрос?

    Нет, не задавал. Там было иное. Тогда я спрашивал, как определить размер переменной.

    Цитата:
    Типа вывод такой то(пример подробный).

    Ну, типа:
    c:\pagefile.sys 0 0\0d:\pagefile.sys 1024 2048\0e:\pagefile.sys 1024 1024
    А я хотел получить в итоге:
    c:\pagefile.sys d:\pagefile.sys e:\pagefile.sys (если одна переменная), либо
    c:\pagefile.sys
    d:\pagefile.sys
    e:\pagefile.sys
    если раскидывать по нескольким переменным
     
    Добавлено:
    mugil_cephalus
    Консоль выдала ответ "Environment variable PagingFiles not defined".
    Попробую разобраться, что творится, и почему неопределена переменная...

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 12:04 10-07-2010 | Исправлено: BVV63, 12:49 10-07-2010
    01MDM



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

    Цитата:
    но вот никак я не могу добиться, чтобы else у меня срабатывало.

    В цикле обрабатываются только существующие файлы. Если нет ни одного соответствующего маске файла, то цикл даже не начнется. Проверяй до цикла:

    Код:
     
    @echo off
     
    if not exist *.XXX echo Error && goto:eof
     
    for %%i in (*.XXX) do start /w PROG.EXE "%%i"  
    start /w PROG_OUTPUT.TXT
    del /q /f PROG_OUTPUT.TXT
    pause  
     

     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:12 10-07-2010 | Исправлено: 01MDM, 12:13 10-07-2010
    Melhior



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

    Цитата:
    если я в командную строку ввожу
     
    Код:
    C:\convert.exe C:\image.png -format "%A" info:
     
    но все нормально, мне выдает сообщение True или False в зависимости от картинки.
    Но если я ввожу эту же строку в batch то мне выдает
     
    Цитата:
    convert.exe: option requires an argument `-format' @ error/convert.c/ConvertImageCommand/1503.  

     
    для батника код должен быть таким:
    C:\convert.exe C:\image.png -format "%%A" info:
     
     
    01MDM

    Цитата:
    В цикле обрабатываются только существующие файлы. Если нет ни одного соответствующего маске файла, то цикл даже не начнется. Проверяй до цикла

    спасибо! получилось.

    Всего записей: 1255 | Зарегистр. 11-01-2004 | Отправлено: 12:28 10-07-2010 | Исправлено: Melhior, 12:39 10-07-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Melhior
    спасибо, пойду разбираться дальше
    осталось разобраться с кириллицей
     
    Добавлено:
    ComradG

    Цитата:
    Гляди в сторону %errorlevel%

    я так и не понял как сделать это  

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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 12:36 10-07-2010 | Исправлено: lorents, 12:45 10-07-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    Что-то туго до меня доходит. С  |моre +4 не работает. С |more +2 выдаёт только первый файл подкачки. И честно говоря, не понял, за счёт чего такой For может все файлы достать.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 12:44 10-07-2010
    wolf0425



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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 13:14 10-07-2010 | Исправлено: wolf0425, 13:15 10-07-2010
    Melhior



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

    Цитата:
    я так и не понял как сделать это

    чуть голову себе не сломал... про %errorlevel% так ничего и не сообразил, но можно вот так:

    Код:
    @echo off
    for /f "tokens=*" %%i in ('c:\convert.exe c:\image.png -format "%%A" info:') do goto:%%i
    :False
    echo FALSE!
    goto:fin
    :True
    echo TRUE!
    goto:fin
    :fin
    pause

    Всего записей: 1255 | Зарегистр. 11-01-2004 | Отправлено: 15:19 10-07-2010 | Исправлено: Melhior, 15:34 10-07-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Melhior
    Круто, спасибо, сильно выручил, не знаешь, как заставить, чтобы он работал с кириллицей?

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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 16:15 10-07-2010
    ComradG



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

    Цитата:
    про %errorlevel% так ничего и не сообразил

    Ты вспомни азы программирования: если True значит 0, если False значит 1. Вот от этого и надо плясать.

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 16:23 10-07-2010
    lorents



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

    Код:
    @echo off
    c:\convert.exe c:\image2.png -format "%%A" info:
    echo %ERRORLEVEL%
    pause

    Так имеешь ввиду, я для проверки твоей теории написал (пока без условий если)?
    у меня не  получилось, значение 0, в любом случаи у меня?

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



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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    for /f "tokens=3 delims=    " %%a in ('reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management" /v PagingFiles ^| findstr "PagingFile"') do (  
        set "val=%%a"
        set "val=^"!val:\0=^" ^"!^""
        call :printparam !val!
    )
    goto:eof
     
    :printparam
    if "%~1" equ "" exit /b
    echo.%~1
    shift
    goto :printparam


    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 16:38 10-07-2010 | Исправлено: res2001, 16:45 10-07-2010
    Melhior



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents
    чтобы батник понимал кириллицу, она должна быть в досовском формате.
    а если прога сама по себе кириллицу не понимает, боюсь, тут уже ничего не попишешь.
     
    ComradG
    это было первое, о чём я подумал. вот только получалось, что %errorlevel% был 0 вне зависимости от того, возвращала команда true или же false. хотя, может, я просто что-то не так делал - я отнюдь не спец.
     
    Добавлено:
    lorents
    вот и у меня был 0 в любом случае

    Всего записей: 1255 | Зарегистр. 11-01-2004 | Отправлено: 16:44 10-07-2010
    lorents



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

    Цитата:
    чтобы батник понимал кириллицу, она должна быть в досовском формате.
    а если прога сама по себе кириллицу не понимает, боюсь, тут уже ничего не попишешь.  

    а как это сделать?

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Melhior
    Цитата:
    чтобы батник понимал кириллицу, она должна быть в досовском формате.  
    да что ты говоришь, а мужики то и не знают...
    я вот уже не помню когда последний раз писал батник в досовском формате, мне как-то виндовый - больше нравится, в нем проблем с русскими именами - меньше
    например с таким - "russian «кавычки» и — тире.jpg"
     

    Цитата:
    а если прога сама по себе кириллицу не понимает, боюсь, тут уже ничего не попишешь.
    не попишешь, но 99% таких прог вымерло 10+лет  назад и вероятность что lorents на такую наткнулся - почти никакая. нормальным прогам не надо понимать какую-то непонятную кирилицу, надо только понимать что есть текущая кодовая таблица и в ней работать.
     

    Цитата:
    вот только получалось, что %errorlevel% был 0 вне зависимости от того, возвращала команда true или же false. хотя, может, я просто что-то не так делал - я отнюдь не спец.  
    ну тогда фильтровать через find то что прога выводит и ветвиться по ошибке поиска.

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



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

    Код:
    tasklist /fi "windowtitle eq notepad" | echo %errorlevel%

    то будет возвращен нуль - программа то инициализировалась! - а уж затем брань по поводу того, что пад не открыт.

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 17:31 10-07-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents
    Цитата:
    @echo off
    c:\convert.exe c:\image2.png -format "%%A" info:
    echo %ERRORLEVEL%
    pause  
    а что такое "%%A" - пример невнимательности ?

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 17:31 10-07-2010
    ur5tdk

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день, подскажите как в бат-файле задать условие чтобы проверялась дата в таком виде:
     
    Если СистемнаяДата > 01.07.2010 Тогда <Команда>
     
     
     
    Спасибо!

    Всего записей: 6 | Зарегистр. 16-08-2007 | Отправлено: 17:36 10-07-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Я использую программу из ImageMagick, а это новые программы, последнее обновление было несколько дней назад

    Цитата:
    а что такое "%%A" - пример невнимательности ?  

    %A это параметр, а для batch пришлось приписать такой знак %

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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 17:45 10-07-2010
    wolf0425



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

    Цитата:
    Дык правильно: если у тебя не запущен, скажем, блокнот, а ты, например, напишешь что-то вроде
    Код:
    tasklist /fi "windowtitle eq notepad" | echo %errorlevel%

    то будет возвращен нуль  
    что характерно  - нуль будет напечатан и в случае если блокнот открыт

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 17:50 10-07-2010
    res2001



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

    Цитата:
    Если СистемнаяДата > 01.07.2010 Тогда <Команда>  


    Код:
    set "DAY=%DATE:~0,2%"
    set "MONTH=%DATE:~3,2%"
    set "YEAR=%DATE:~6,4%"
    if %YEAR% geq 2010 if %MONTH% geq 7 if %DAY% gtr 1 echo Больше
     

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 17:54 10-07-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