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

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425, mugil_cephalus, СПАСИБО БОЛЬШОЕ!
     
    воспользовался кодом mugil_cephalus. Только не понял в этом месте:
     
    echo.%%~i|1>nul 2>&1 find /i "tables=" &&(echo.tables=%var%) ||(echo.%%~i)
     
    у меня создался файл со строчкой через запятую, но там нет текста tables= - так и должно быть?

    Всего записей: 5 | Зарегистр. 20-04-2010 | Отправлено: 17:35 20-04-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mediate
    вот мой файл 3.txt
    MOP
    LOST
    HIGH
    LOW
    вот 3_.txt
    MOP, LOST, HIGH, LOW
    вот batch.cmd
    ACTS
    ACTSVOLS
    ADDR
    ADDRFOLD
    ADDRRECIP
    tables=a
    ACTS
    ACTSVOLS
    ADDR
    ADDRFOLD
    ADDRRECIP
    вот batch_.cmd
    ACTS
    ACTSVOLS
    ADDR
    ADDRFOLD
    ADDRRECIP
    tables=MOP, LOST, HIGH, LOW
    ACTS
    ACTSVOLS
    ADDR
    ADDRFOLD
    ADDRRECIP

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 17:48 20-04-2010
    mediate

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus, спасибо. Методом тыка разобрался с 5 попытки куда и что, я не создавал cmd - потом создал и все получилось, большое спасибо еще раз, помогли ребята!

    Всего записей: 5 | Зарегистр. 20-04-2010 | Отправлено: 17:52 20-04-2010
    mugil_cephalus

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

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 17:57 20-04-2010
    mediate

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus, вопрос еще появился - файлик создается с одной большой строкой - открываю виндовским нотпадом - нет переноса слов, но строк 3 штуки (названий через запятую много достаточно), обрывается на NOMENCLA и со след. строки TURE и дальше через запятую перечисления идут.
     
    И новый batch_.cmd создается с этим обрубком первой строки -т.е. там tables=...., NOMENCLA   - и все, как быть? как снять ограничения на длину?  
     

    Код:
    tables=A, AA, ACTS, ACTSVOLS, ADDR, ADDRFOLD, ADDRRECIP, AGENTS, ARCHIVEFUNDS, ARCHIVEMOVEMENT, ARCHIVERS, ATTRIB, AUTONUM, BLANKS, BLANKS_DELIVERY, BLANK_DOCS, BOARD_ACL, BOSS_ASSISTANT, BRIEFCASE, CALENDAR, CAMERAS, CARDINCARDVAL, CARDLINK, CARDPAGES, CARDS, CARDS_ACCESS, CARDS_BODY, CARDS_EDIT, CARDS_FOLDERS, CARDS_OLE, CARDS_REPORTS, CARDTARIF, CARDTARIFGRID, CARDTEMPLATE, CARDVAL, CATEGORY, CHAPTER, CHECKINCHECKOUT, CHIEFS_DEPS, CONFIG, CTRL_MSG, CTRL_OWNER, DOCLOG, DOCSIGN, DOCSNOMS, DOCUMENT, DOCUMENT_CTRL, DOC_DISPATCH, DOC_HIST, DSBINDER, DSDATA, DSFOLDER, EMPLOYEE, EMPL_CHIF_DEPT, EVENTLOG, EVENTLOGDETAIL, EXECUTIONREPORTS, EXECUTOR, FATHERFIELD, FGL, FIELDLIST, FILEBALANCE, FILTERS, FLIST, FOLDER, FOLDERLEVEL, FOLDER_AD, FOLDER_CARD, FOLDER_LEVELS, FOLD_EDIT, FOLD_EMPL, FOLD_MESSAGE, FOLD_PROF, FREE_SCRIPTS, FULLDOCPATH, GL, GROUP_ADDRESS, GROUP_FOLDER, GROUP_LIST, IERARCH, INDEXBASE, INDEXPATHS, INSP_FOLDERS, INSTATTACH, INSTINSPECTORS, INSTRUCTIONS, JOURNAL, LINKCOLUMN, LINK_TEXT, MSGTEMPLATE, NOMENCLA

    Всего записей: 5 | Зарегистр. 20-04-2010 | Отправлено: 18:17 20-04-2010 | Исправлено: mediate, 18:24 20-04-2010
    wolf0425



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

    Цитата:
    как присвоить переменной (выделить из %%i получившейся строки) все что находится левее %Key% но до первого же символа ":"  
    наверно так:

    Код:
    Set Key=@mail.ru
    setlocal enabledelayedexpansion
    For /F "usebackq delims=" %%i in (`Find /I "%Key%" %path_ACCOUNT_VCF%`) Do Set "Value=%%i" & for /f "delims=:" %%j in ("!Value:%Key%=:!") do set "Value=%%j"
    @Echo.%Value%  

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 19:13 20-04-2010
    king_stiven

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

    Цитата:
    Даже, если подскажете как фалик со строкой одной создать

    ещё способ

    Код:
    FOR /F "tokens=* delims=" %%a IN (files.lst) DO SET /p=+"%%~a"<nul>>result.txt

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 19:20 20-04-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mediate
    Цитата:
    как снять ограничения на длину?  
    для упрощения кода чуть поменял промежуточную строку

    Код:
    @echo off
    for /f "tokens=*" %%i in (.\in.txt) do 0>nul 1>.\string.txt set /p="table=%%~i" & goto:loop
    :loop
    for /f "skip=1 tokens=*" %%i in (.\in.txt) do 0>nul 1>>.\string.txt set /p=", %%~i"
    1>>.\string.txt echo.
    for /f "tokens=*" %%i in ('type ".\batch.cmd"') do  (
        echo.%%~i | 1>nul 2>&1 find /i "tables=" && ( 1>>.\batch_new.cmd type .\string.txt) || (1>>.\batch_new.cmd echo.%%~i)
    )
    pause  

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 21:06 20-04-2010 | Исправлено: wolf0425, 21:08 20-04-2010
    mediate

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425, king_stiven, спасибо, помогли - создается все верно теперь!
     

    Всего записей: 5 | Зарегистр. 20-04-2010 | Отправлено: 22:02 20-04-2010
    freewood



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Имеется такой вопрос. Как правильно записать деление с остатком в команде SET?

    Код:
    set /a x=a%b

    Не прокатывает, как и всевозможные вариации кавычек.

    Всего записей: 307 | Зарегистр. 28-12-2008 | Отправлено: 22:10 20-04-2010
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    freewood
    а так не хочешь:
    Код:
    set /a "x=a-a/b*b"
    оно конечно некрасиво, но зато работает...

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

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 22:17 20-04-2010 | Исправлено: yurkesha, 22:19 20-04-2010
    freewood



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нет, так не хочу. =)
    Мне просто любопытно почему не работает хотя должно. =)

    Код:
    set /a "x=a-a/b*b"  

    Рискую нарваться на освистывания, но как это работает? =)

    Всего записей: 307 | Зарегистр. 28-12-2008 | Отправлено: 22:20 20-04-2010 | Исправлено: freewood, 22:29 20-04-2010
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    freewood
    Хорошо. Но так как ты хочешь еще некрасивее получится:
    Код:
    SET /a "x=%a%%%b%"

     
    Добавлено:
    А кстати я не совсем прав. Так вот тоже работает:
    Код:
    SET /a "x=a%%b"


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

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 22:29 20-04-2010
    freewood



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Т.е. запись должна быть именно в таком виде, с предопределением переменных a и b?
    А вот так сделать нет возможности?

    Код:
    set /a "x=3%5"

    Ибо так оно не хочет работать почему то.

    Все, теперь понял как это должно выглядеть. Последняя пара вопросов. Почему требуется двойной символ "%"?
    И как все таки работает
    Код:
    set /a "x=a-a/b*b"

    Не могу понять.

    Всего записей: 307 | Зарегистр. 28-12-2008 | Отправлено: 22:33 20-04-2010 | Исправлено: freewood, 22:36 20-04-2010
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    freewood
    Ну одинарный процент "съедается" по способу обработки - там допустимо использование переменных окружения без обрамления этими символами... Стандартная экранировка символом "^" почему-то не отрабатывает. Ну вобщем сделай "ECHO ON" и посмотри как транслируется команда в процессе выполнения.
    А первый приведенных вариант работает по простой причине:
    - все вычисления выполняются последовательно с учетом приоритета обработки операций
    - все вычисления целочисленные

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

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 22:42 20-04-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Подробнее...
     
    Помогите пожалуйста решить проблемы, связанные с выше представленным:
    1. как сделать, чтобы код понимал кирилицу;
    2. у меня GIFLITE.EXE открывается на все окно, как можно сделать чтобы открывалось не на все окно;
    3. у меня не работает, где надо переписать файл на место прежнего и удалить мусор.

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



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

    Цитата:
    1. как сделать, чтобы код понимал кирилицу;  
    а какое место кода её не понимает то?
     

    Цитата:
    2. у меня GIFLITE.EXE открывается на все окно, как можно сделать чтобы открывалось не на все окно;  

    попробуй заменить вызов на start ''" /wait /min GIFLITE ...
     

    Цитата:
    3. у меня не работает, где надо переписать файл на место прежнего и удалить мусор.

    проверь что у тебя строки не побились, FOR там выглядит крайне подозрительно.
    и когда постишь код - не ленись обрамлять в [ code][ /code]

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



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

    Цитата:
    а какое место кода её не понимает то?  

    если в адресе (путь к gif картинкам или к GIFLITE.EXE) есть кириллица то код просто не запускается

    Цитата:
    попробуй заменить вызов на start ''" /wait /min GIFLITE ...  

    не помогло, просто приложение свернуто,и к тому же пока не восстановишь не работает

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

    там все нормально
     
    Высылаю сам батник и программу
    http://webfile.ru/4441412

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 19:26 21-04-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто знает, можно ли как-нибудь через командную строку запросить права Администратора?
    Заранее спасибо

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 20:03 21-04-2010
    wolf0425



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

    Цитата:
    если в адресе (путь к gif картинкам или к GIFLITE.EXE) есть кириллица то код просто не запускается  
    гонишь ты, все запускается.
    Хотя сохранять код в 1251 кодировке и не прописывать chcp 1251 - это обычно некомильфо.
     

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

    Цитата:
    там все нормально  
    да где ж нормально?

    Код:
    FOR /F "usebackq skip=3" %%R IN (`DIR /B /O-S GIFLITE.$$$`) ?
    DO @CALL :getresult %%R %1
     
    по твоему эти две строки должны как работать???

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 20:10 21-04-2010 | Исправлено: wolf0425, 20:11 21-04-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