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

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужно написать CMD который будет искать и архивировать файлы в папке. Список файлов для архивирования будет часто меняться, причем очень сильно. Было бы хорошо если б список файлов для архивирования был в отдельном файле а не в самом скрипте.
    Помогите написать такой скрипт который бы делал то что написамо выше.
    СПАСИБО!

    Всего записей: 273 | Зарегистр. 02-10-2008 | Отправлено: 21:45 15-07-2010
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VitProff
    Ты бы хотя бы предварительно ознакомился с возможностями консольных архиваторв что ли...
    Вот например что пишет консольный 7z при запуске без параметров:
    Код:
    7-Zip [64] 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03
     
    Usage: 7z <command> [<switches>...] <archive_name> [<file_names>...] [<@listfiles...>]
    так вот @listfiles... - это как раз и есть файл-список для архивации... Нечего тут помогать...

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 23:38 15-07-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Насчёт вчерашнего вопроса. Во-первых, в-попыхах (спешил домой) был неточен, забыл кавычки:

    Код:
    For /F "Delims== Skip=2 Tokens=2 UseBackQ" %%A In (`WMIC NTEventLog Get Name /Value`) Do Echo "%%A">файл

    Во-вторых, забыл указать операционку: 2K3 (под XP вроде бы подобного безобразия не наблюдается).
    Так вот, замыкающая кавычка переносится на новую строку.
    Сегодня уже разобрался: вывод дополняется символом 0x0D (без 0x0A).
    Решил даже похулиганить: извлечь одиночный байт 0x0D и запихать в переменную "NewString", дабы при помощи неё создавать многострочные переменные. Увы, не получилось... После Set "NewString=%%A" в цикле под SetLocal в переменной он оставался, но вырезаться не захотел.
     
    Добавлено:
    Переделал вывод, строка дополняется двумя пробелами и символом 0x0D (по крайней мере, под 2K3):

    Код:
    SetLocal EnableDelayedExpansion
    For /F "Skip=1 Tokens=* UseBackQ" %%A In (`WMIC NTEventLog Get Name ^| Findstr .`) Do (
    Set NewString=%%A
    Set NewString=!NewString:~-2!)
    Set Var=String1!NewString!String2
    Echo !Var!>файл

    В файле получилось:
    String1  
    String2

     
    Добавлено:
    А, видимо я раньше затупил. Так тоже можно, тогда в переменной без лишнего пробела, чисто один байт 0x0D:

    Код:
    SetLocal EnableDelayedExpansion
    For /F "Delims== Skip=2 Tokens=2 UseBackQ" %%A In (`WMIC NTEventLog Get Name /Value`) Do (
    Set NewString=%%A
    Set NewString=!NewString:~-1!)
    Set Var=String1!NewString!String2
    Echo !Var!>файл

    В файле:
    String1
    String2
     
    Добавлено:
    А вот из под SetLocal вытащить перенос строки не получается:

    Код:
    EndLocal & Set NewString=%NewString%
    Set Var=String1%NewString%String2
    Echo %Var%>файл

    В файле:
    String1String2
     
    Добавлено:
    А при выводе на консоль получается безобразие:
    "Echo !Var!" - в ответ: "String2",
    "Set Var" - в ответ: "String2ing1".

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 07:27 16-07-2010 | Исправлено: BVV63, 09:03 16-07-2010
    mugil_cephalus

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

    Цитата:
    ага, обсуждали же уже эту кривую софтину и что б такое с ней сделать.  
    Вариант добиться от автора устранения глюков обработки неамериканской кодировки имен - почему-то не прошел, наверно автору оптимизировать картинки на дополнительные 0.0001%  - важнее чем вообще разбираться с тем, как в виндах положено открывать файлы  

    1. а если софтине скормить кракозябры , то есть 866/1251-имя в 1252-кодировке cmd ?
    2. http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=733&limit=1

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



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

    Цитата:
    1. а если софтине скормить кракозябры  
    а это как? можно пример на тему такого кормления?
    например для файла кирилица.png
     
    BVV63
    Цитата:
    Во-вторых, забыл указать операционку: 2K3 (под XP вроде бы подобного безобразия не наблюдается).  
    у меня на XP pro eng sp3 - аналогичное безобразие.
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:41 16-07-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    chcp 1252
    dir /b кирилица.png

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



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

    Цитата:
    а у тебя что - расширение не жестко прошитое .png?  

    есть еще проблема с jpeg, а там много расширений
     
    Ненавижу ImageMagick
     
    mugil_cephalus

    Цитата:
    chcp 1252
    dir /b кирилица.png  

    все равно не хочет

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

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



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

    Цитата:
    chcp 1252  
    dir /b кирилица.png  
    ну, а у тебя самого то это работает, проверял?
    и в какой кодировке предлагается сохранять такой батник - в 1252 нету нужных символов для имени "кирилица".
     
     
    Добавлено:
    lorents
    Цитата:
    есть еще проблема с jpeg, а там много расширений  
    много - это больше двух?
     
    чего ты хотел - cделать копию с сохранением расширения?
    например так - сору /b кирилица.jpg tmp.*

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



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

    Цитата:
    много - это больше двух?  

    их четыре jpeg, jfif, jpg или jpe
     

    Цитата:
    чего ты хотел - cделать копию с сохранением расширения?  

    уже не важно все равно не выйдет, сейчас попросил одного человека написать одну программу нужными мне функциями, надеюсь все получится

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



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

    Цитата:
    уже не важно все равно не выйдет
    это ещё почему? с тривиальными именами в текущем каталоге ImageMagick вполне работает, чего ещё надо то?
    Хотя монстрик, конечно, опухший и глюкавенький.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 19:26 16-07-2010
    older

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    что вы паритесь с этой кирилицей?
    копируете ваш файл кирилица.png куда-нибудь с путями без кирилицы имя файла заодно меняете, например c:\temp\file.png
    скармливаете вашему ImageMagick,
    а потом результат копируете обратно назад с его изначальным именем
    конечно это дольше, но это будет работать всегда

    Всего записей: 332 | Зарегистр. 15-02-2003 | Отправлено: 11:21 17-07-2010
    mugil_cephalus

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

    Цитата:
    ну, а у тебя самого то это работает, проверял?  

    проверял, но все зависит от проги
    это с кракозябрами , но работает
    Код:
    chcp 1252
    echo.ЏаЁўҐв

    Привет в 866-ой в 1252-ой консоли

    Цитата:
    и в какой кодировке предлагается сохранять такой батник  

    в 866 или 1251-ой
    p.s.
    нам же не для отображения в консоли, может и кракокзябры "проглотит" эта прога
     
    Добавлено:
    res2001

    Цитата:
    с чего ты взял что в форе будет онлайн?  
    Запусти в форе какую-нибудь команду, которая долго отрабатывает и при этом сыпет сообщения на экран. Например ping -n 20 127.0.0.1 и все сам увидишь.

    запустил, а ты запусти в форе assoc ( все зависит от проги )

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 12:26 17-07-2010 | Исправлено: mugil_cephalus, 12:33 17-07-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mugil_cephalus
    Пример с assoc не показателен - она слишком быстро валит сообщения на экран и заканчивается очень быстро. Если запустить assoc >null - отработает практически моментально.
    Так же и в форе - ты не увидишь задержку при выполнении команды, а сразу пойдет разбор вывода.
    Думаю, что от проги нифига не зависит.  
    wolf0425 что ты думаешь по этому поводу?

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:27 17-07-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    route print
     
    Добавлено:
    dir /b /a ?
     
    Добавлено:
    attrib ?
     
    Добавлено:

    Цитата:
    Если запустить assoc >null - отработает практически моментально.  

    тогда какой смысл ее запускать в цикле , если stdout в nul ?

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 13:55 17-07-2010 | Исправлено: mugil_cephalus, 14:12 17-07-2010
    res2001



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

    Цитата:
    тогда какой смысл ее запускать в цикле , если stdout в nul ?  

    ессно в нул не надо сказал я это, чтоб было понятно, что команда выполняется очень быстро и на глаз не определить как выводится обработка вывода в форе - то ли после выполнения команды, то ли во время.
    Все приведенные тобой команды тож ничего не доказывают - слишком быстро выполняются.
    Надо изобрести какой-нить способ протестировать этот момент. Пока в голову ничего путного не приходит. А на глаз видно только если команда отрабатывает достаточно продолжительное время.
     
    Вот кстати на счет дира - надо найти каталог с большим количеством файлов, вложенных подкаталогов и рекурсивно на него дир натравить. Может тогда будет понятней.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:26 17-07-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    у меня ощущение, что мы собираем "сферического коня в вакууме"

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 14:32 17-07-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    угу, с диром получилось.
    Кстати, по ощущениям - вывод на экран в цикле работает быстрее, чем если бы сама прога валила бы все на экран.
     
    Добавлено:
    mugil_cephalus

    Цитата:
    у меня ощущение, что мы собираем "сферического коня в вакууме"  

    Ничего подобного. К этому вопросу уже дважды приходили за последние 50 страниц в этом топике.  
    Провел эксперимент. Натравил дир на каталог с ~26000 файлов с подкаталогами и проч. Вот результаты замера времени:
    time=14:31:51.71 - начало эксперимента
    dir /s
    time=14:32:25.79 конец дира, начало фора
    for in ('dir /s')
    time=14:32:55.65 - конец фора.
    Фор выполняется в целом на 4 сек. меньше чем одиночный дир.
    Думаю этот выигрыш происходит из-за отсутствия переключения контекстов, или что-то типа того

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



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

    Цитата:
    Фор выполняется в целом на 4 сек. меньше чем одиночный дир.  
    а теперь поменяй команды местами, чтоб системное кэширование помогало не только фору а и голому диру.
    или просто поставь ещё один dir /s до замера времени.

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



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

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 17:12 17-07-2010
    wolf0425



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

    Цитата:
    Вот кстати на счет дира - надо найти каталог с большим количеством файлов, вложенных подкаталогов и рекурсивно на него дир натравить. Может тогда будет понятней.
    я не очень понимаю что вы меряете, но с диром понять мало что можно - у него собственно вывод очень быстрый и одноразовый, тормозить будет скан диска и отрисовка скроллинга.
     
    держите медленно печатающую команду

    Код:
    for /f "delims=" %%a in ('ping localhost') do title %%a & echo.%%a

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 20:47 17-07-2010 | Исправлено: wolf0425, 20:48 17-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