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

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



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

    Цитата:
    и расскажи что будет в файлах ok.txt и err.txt.

    err.txt - пустой
    ok.txt - то же, что и раньше (по 2 строки)

    Цитата:
    кодировка файла-источника UTF-8, может тут где-то собака зарыта?


    Всего записей: 67 | Зарегистр. 07-08-2007 | Отправлено: 13:20 03-07-2010
    res2001



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

    Цитата:
    Ну и еще в качестве эксперимента, сделай другой батник с любым выводом echo.
    Будут в этом случае двойные строки?
     

     
     
    Добавлено:
    Engraf
    попробуй такой вариант:

    Код:
    @echo off
    setlocal ENABLEDELAYEDEXPANSION
    set "strNum="
    set "strAcc="
    for /F "usebackq tokens=1* delims=:" %%A in (`findstr /l "user_pref(\"mail.accountmanager.accounts\"" temp.txt`) do (
        set strNum=%%A
        set strAcc=%%B
    )
    set /A strNum=%strNum%-1
    set /a "count=1"
    set /a "count1=1"
    for /L %%i in (1,1,%strNum%) do (
        set /a "count+=1"
        for /F "usebackq tokens=1* delims=:" %%A in (`findstr /B /L %%i: temp.txt`) do (set /a "count1+=1" & call :DELNUM "%%B" temp2.txt !count! !count1!)
    )
    goto :EOF
    :DELNUM
    echo %*

    И выложи вывод.
     
    Добавлено:

    Цитата:
    кодировка файла-источника UTF-8, может тут где-то собака зарыта?  

    Думаю, кодировка не при чем.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:24 03-07-2010 | Исправлено: res2001, 13:33 03-07-2010
    Engraf



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

    Цитата:
    Ну и еще в качестве эксперимента, сделай другой батник с любым выводом echo.  

    Тут все норм.
    bat'ник:
    Код:
    @echo off
    for /f "usebackq tokens=1 delims==" %%A in (`set`) do call :VIVOD %%A
    goto :EOF
    :VIVOD
    echo %1

    вывод:
    Код:
    ALLUSERSPROFILE
    APPDATA
    CLIENTNAME
    CommonProgramFiles
    COMPUTERNAME
    ComSpec
    FP_NO_HOST_CHECK
    HOMEDRIVE
    HOMEPATH
    ну и т.д


    Цитата:
    попробуй такой вариант:

    Тут опять дублируются:
    Вывод...

    Всего записей: 67 | Зарегистр. 07-08-2007 | Отправлено: 13:53 03-07-2010 | Исправлено: Engraf, 13:53 03-07-2010
    res2001



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

    Цитата:
    Тут опять дублируются:

    Не дублируется! Почему то внутренний цикл отрабатывает 2 раза.

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



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

    Всего записей: 67 | Зарегистр. 07-08-2007 | Отправлено: 14:08 03-07-2010
    res2001



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

    Код:
    @echo off
    setlocal ENABLEDELAYEDEXPANSION
    set "strNum="
    set "strAcc="
    for /F "usebackq tokens=1* delims=:" %%A in (`findstr /l "user_pref(\"mail.accountmanager.accounts\"" temp.txt`) do (
        set strNum=%%A
        set strAcc=%%B
    )
    set /A strNum=%strNum%-1
    set /a "count=0"
    for /F "usebackq tokens=1* delims=:" %%A in (temp.txt) do if !count! lss %strNum% (
        set /a "count+=1"
        call :DELNUM "%%B" temp2.txt
    ) else goto:eof
    goto :EOF
    :DELNUM
    echo %1

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Похоже, дело все же в кодировке.
    Я перекодировал в ANSI и строки перестали дублироваться.
    res2001

    Цитата:
    попробуй такой вариант:

    Да, этот вариант работает. Правда вывод в файл сохраняется в другой кодировке - отсюда проблемы с русскими словами. Плюс там еще проблемы со спец символами, в основном с " и ()... Но это уж, буду дальше разбираться.
     
    Спасибо.
     
    Добавлено:
     
    P.S. До VBS руки пока не дошли

    Всего записей: 67 | Зарегистр. 07-08-2007 | Отправлено: 14:25 03-07-2010 | Исправлено: Engraf, 14:33 03-07-2010
    res2001



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

    Цитата:
    Похоже, дело все же в кодировке.
    Я перекодировал в ANSI и строки перестали дублироваться

    Перекодировал в UTF8 - не дублируется полтергейст
     
    Добавлено:
    Engraf

    Цитата:
    Правда вывод в файл сохраняется в другой кодировке

    добавь вначало скрипта команду:
    chcp 65001
    это включит для батника кодировку UTF8, и включи в для консоли шрифт Lucida Console, чтоб русские буквы нормально выводились.
    Только говорят батники могут работать как-то неадекватно в UTF8.

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если честно, то ДОСТАЛА МЕНЯ КЛАВИША WIN!!!
    В итоге я навлял Подробнее...

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 19:31 03-07-2010 | Исправлено: ComradG, 19:35 03-07-2010
    wolf0425



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

    Цитата:
    В итоге я навлял
    ну и нафиг этот резидент и висящее консольное окно ?

    Код:
    REGEDIT4
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
    "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,00,00,5b,e0,00,00,00,00,\
      00,00,00,00
     
    полная блокировка левой Win, ставил из-за того что с какой-то игрушкой бесила.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 20:12 03-07-2010
    ComradG



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

    Цитата:
    ну и нафиг этот резидент и висящее консольное окно ?

    О каком консольном окне ты говоришь? там же start /b - ничего висеть не должно. А через реестр всякий раз отрубать - так затрахаешься перезагружаться.
     
    Добавлено:
    Кстати, ты батник запускал не через консоль? Если не через консоль, то да, бага есть.

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 20:20 03-07-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ComradG
    Чем же тебя так достала эта клавиша?
    Меня, помнится, она тоже раздражала, лет 10 назад. А сейчас уже привык, даже пользуюсь иногда
    А код надо в ветку по С# отправить.

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



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

    Цитата:
    А код надо в ветку по С# отправить.

    Ну не знаю, хотя идея была.

    Цитата:
    Чем же тебя так достала эта клавиша?

    Представь, сидишь за отладчиком, надо нажать Ctrl+Alt+X, а вместо Alt случайно жмешь Win. Раньше на буках Win хоть делели повыше, а теперь также как и на клаве десктопов. Не все правда, но все же. А батником код представлен для людей, которые не прогают на CиШарпе, но кого тоже бесит Win. То, что wolf0425 предлагает, требует перезагрузки, а туе - повисел процесс WinKey.exe на определенное время, а после его прихлопнул командой taskkill или просто kill, если Debugging Tools в наличи имеются. Кстати, на счет "висящего окна", res2001 у тебя та же бага?

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 20:42 03-07-2010
    res2001



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

    Цитата:
    у тебя та же бага?

    Да окно есть. Если запускать через консоль или через фар, то нет, но когда закроешь косоль/фар, то и winkey закрывается.
     
    Почему то мне всегда казалось, что вещи типа перехватчиков системных вызовов надо на Си делать. Шарпы не для этого все же.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 21:01 03-07-2010
    ComradG



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

    Цитата:
    А сейчас уже привык, даже пользуюсь иногда

    Ну а я ей полузуюсь постоянно: Win+E, Win+F, Win+D, Win+M, - и это далеко неполный список.

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 21:02 03-07-2010
    res2001



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

    Цитата:
    Ну а я ей полузуюсь постоянно: Win+E, Win+F, Win+D, Win+M, - и это далеко неполный список.  

    ну вот и я о том же

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



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

    Цитата:
    Шарпы не для этого все же.

    Просто не хотелось заморачиваться с WinAPI и далеко не у всех установлена MS VS (а .NET Framework стоит у каждого - это что-то софта де-факто ), а

    Цитата:
    но когда закроешь косоль/фар, то и winkey закрывается

    так и задумывалось. У меня консоль всегда открыта. И потом, WinKey.exe загенеренный батом останется в любом случае - ничего не мешает его запускать вручную А на счет консольного окна - что можешь предложить? Я смотрел хелп по start'у, но чего-то ничего не надумалось.
    P.S>На счет шарпов ты зря, там такое можно навалять, что волосы будут шевелиться в неприличных местах.

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 21:09 03-07-2010
    res2001



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

    Цитата:
    P.S>На счет шарпов ты зря, там такое можно навалять, что волосы будут шевелиться в неприличных местах.

    Не сомневаюсь. Но все же останусь при своем мнении.

    Цитата:
    А на счет консольного окна - что можешь предложить? Я смотрел хелп по start'у, но чего-то ничего не надумалось.  

    Со стартом ничего не выйдет - какое-то консольное окно все равно останется.
    Посмотри страницу назад пост boy999 он как раз борется со скрытием окон.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 21:20 03-07-2010
    ComradG



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    Блин, похоже в скрипт придется добавить генератор INF файла и строчку с rundll32.exe, запускающую его. Пока только такие идеи.
    P.S>Весь Берлин сходит с ума! Хоть и терпеть не могу футбол, все же 4:0 в пользу немцев - это что-то. Вы бы видели, что сейчас в лечебке творится!!!

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 21:27 03-07-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ComradG
    сори за офтоп , но тоже смотрел игру. Немцы отлично играли. Финал Германия - Голландия будет убойное зрелище.

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