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

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    cluster
    Там попытка организовать проверку на предмет одекватности личности правильности поданых для обработки символов. Не судьба. По ходу логика написания как конструкции if - else осталась для меня недоступной... Ссылку не подкинете, где бы почитать? А то чёт Яндегз не сильно делится инфой...
     
    Добавлено:
    SLIDER999
    Так проще всего...

    Всего записей: 406 | Зарегистр. 06-12-2007 | Отправлено: 18:16 28-05-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ...Доброго дня всем.  
     
    Кто подскажет как реализовать такой батник -  
     
    Есть папка "Log" на серевере \\server\C:\Log в ней еще 10 папок типа log1, log2 и тд., в каждой из них по 10-30 txt файлов (сами логи) с названием текущей даты созданного лога.  
    Нужно 30 числа каждого месяца в 00:00 перемещать все подпапки с \\server\C:\Log в другую вновь созданную папку в корень диска C:\ того же сервера с названием текущей даты на момент перемещения...  
    То есть так -  
    30.05.2010 и вней все папки с логами log1, log2 и т.д...  
    30.06.2010 и вней все папки с логами log1, log2 и т.д...  
    30.07.2010 и вней все папки с логами log1, log2 и т.д...  
    Надеюсь вашу помощь гуру...  
     
    Заранее благодарю...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 20:08 28-05-2010
    cluster

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

    Цитата:
    if %answer%==y goto Exit  
    else reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\888 /f  

    т.е. при нажатии на любую клавишу, кроме "y", будет выполняться указанная команда.
     
    us0r
    мне достаточно внутренней справки IF /? + готовые примеры из сети.

    Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 21:46 28-05-2010
    BagaBaga

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно ли (с помощью sed?) преобразовать строчку вида
     
    1234 фыва олд, йцук шщз, вап ить
     
    в кучку строчек
    1234 фыва олд
    1234 йцук шщз
    1234 вап ить
     
    т.е. строка начинается с числа (целого), затем идет пробел, затем - текстовые строки; взять это число и дописать перед каждым последующим элементом, разделитель элементов - запятая.
     
    решение в виде такой строки
    1234 фыва олд, 1234 йцук шщз, 1234 вап ить
    тоже устроит (т.е. без "разрывания на строки")

    Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 00:24 29-05-2010
    king_stiven

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

    Цитата:
    Не судьба. По ходу логика написания как конструкции if - else осталась для меня недоступной... Ссылку не подкинете, где бы почитать?  

    В справке к команде
    if /?
     или в справке виндовской
    Использование оператора else  
    Оператор else должен размещаться в той же строке, что и команда if. Пример:
     
    IF EXIST имя_файла. (
    del имя_файла.
    ) ELSE (
    echo имя_файла. отсутствует.
    )
    Приведенный ниже пример не будет работать, поскольку команда del должна заканчиваться новой строкой:
     
    IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. отсутствует
    Приведенный ниже пример не будет работать, поскольку команда else должна находиться в той же строке, что и команда if:
     
    IF EXIST имя_файла. del имя_файла.
    ELSE echo имя_файла. отсутствует
    Если необходимо разместить всю инструкцию в одной строке, можно использовать следующую правильную форму исходной инструкции:
     
    IF EXIST имя_файла. (del имя_файла.) ELSE echo имя_файла. отсутствует

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 01:44 29-05-2010
    mbku14

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как сранить 2 текстовых файла, если различий будет больше 100 строк, может и 1000.
     
    Всяко разно пробовала командой fc, больше 100 чтрок не выводит. Параметр /lb не работает.
     
    Тут увидела несколько ответов с командой sed.
    Что за команда? Чувствую она мне нужна для для полного счастья.
    Дайте ссылку на её описание, пожалуйста.

    Всего записей: 6 | Зарегистр. 09-05-2010 | Отправлено: 10:56 29-05-2010
    mugil_cephalus

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

    Цитата:
    Дайте ссылку на её описание,

    http://ru.wikipedia.org/wiki/Sed

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 11:15 29-05-2010
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Почему в данной конструкции при нажатии НЕ y, n, появляется сообщение "Непредвиденное появление: goto."

    Цитата:
    @echo off
    cls
    TITLE Џ®¦ «г©бв , Ї®¤®¦¤ЁвҐ!
     
    
    cls
    ping -n 2 127.0.0.1 >Nul
    
    cls
     
    otNET
    reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\777
    if %ERRORLEVEL%==1 goto Office
    set /p answer="•®вЁвҐ гбв -®ўЁвм .NET Framework? („  - y | ЌҐв - n) : "
    if %answer%==y goto Office
    if %answer%==n reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\777 /f
    cls
     
    ffice
    reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\888
    if %ERRORLEVEL%==1 goto Exit
    set /p answer="•®вЁвҐ гбв -®ўЁвм MS Office 2007? („  - y | ЌҐв - n) : "
    if %answer%==y goto Exit
    if %answer%==n reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\888 /f
    cls
     
    :Exit
    Exit

    Всего записей: 261 | Зарегистр. 16-03-2005 | Отправлено: 11:16 29-05-2010 | Исправлено: SLIDER999, 12:20 29-05-2010
    mbku14

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus  
     
    А где взять sed?

    Всего записей: 6 | Зарегистр. 09-05-2010 | Отправлено: 14:04 29-05-2010 | Исправлено: mbku14, 14:04 29-05-2010
    king_stiven

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

    Цитата:
    Почему в данной конструкции при нажатии НЕ y, n, появляется сообщение "Непредвиденное появление: goto."

    Не надо давать меткам имена. совпадающие с командами

    Цитата:
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\888  
    if %ERRORLEVEL%==1 goto Exit  
     


    Цитата:
    :Exit  
    Exit  


    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 14:16 29-05-2010 | Исправлено: king_stiven, 14:18 29-05-2010
    us0r



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вылет без предупреждения.

    Код:
    @echo off
    chcp 1251
    cls
    set /p answer="Choose your destiny? (y|n): "  
    IF %answer% == "y" (
    goto ready
    ) ELSE (
    IF %answer% == "n" (
    echo XD
    )) ELSE (echo А вы что, собственно, имели ввиду?)
    :ready
    echo FIGHT!
    pause > nul

    А что не так?

    Всего записей: 406 | Зарегистр. 06-12-2007 | Отправлено: 14:45 29-05-2010 | Исправлено: us0r, 14:48 29-05-2010
    ComradG



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mbku14
    Можно как вариант использовать опенсорсные тулзы с sourcefoge.het вроде diff, как вариант в support tools'ах, что на диске с виндой есть парочка достойных тулз (кажись windiff и еще чего-то там), в Windows Server 2k3 Resource Kit лежат несколько тулз - словом, есть где развернуться. Но лично я бы советовал установить PowerShell - хоть и не по теме, зато тамошний командлет для сравнения файлов выявляет более 10k различий и это не предел. Тем паче, что встроенная справка на русском.

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 15:04 29-05-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    us0r
    во первых так корректнее
    "%answer%"=="y"
    во вторых напутано надо так
     
    @echo off
    chcp 1251
    cls
    set /p answer="Choose your destiny? (y|n): "  
    IF "%answer%"=="y" (
        goto ready
    ) ELSE (
        IF "%answer%"== "n" (
            echo XD
        ) ELSE (
        echo А вы что, собственно, имели ввиду?
        )
    )
    :ready
    echo FIGHT!
    pause > nul
     

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 15:28 29-05-2010
    ComradG



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    [b]us0r[/]
    Попробуй так:

    Код:
    @echo off
    set /p answer="Хочите секса? (y|n): "  
    if %answer% == y (
      goto ready
    ) else if %answer% == n (
      echo Тридцать минут сеска с самим собой
      goto end
    )
    :ready
    echo Их есть у меня
    :end
     

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 15:29 29-05-2010
    01MDM



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

    Код:
     
    @echo off
    1>nul chcp 1251  
    setlocal
    cls
     
    set "answer=y"
    set /p answer="Choose your destiny? (Y|n): "  
    if /i "%answer%"=="y" (
        goto:ready
    ) else (
        if /i "%answer%"=="n" (
            echo XD
        ) else (
            echo А вы что, собственно, имели ввиду?
        )
    )
     
    goto:eof
     
    :ready
    echo FIGHT!
    1>nul pause
     

     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:43 29-05-2010
    ComradG



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

    Код:
     
    set "answer=y"
     

    в кавычки?
    Ди потом, зачем усложнять батник дополнительным условием в контексте else?
    А вот относительно

    Код:
     
    1>nul chcp 1251  
    setlocal
     

    полностью солидарен. Это грамотный подход (без доли сарказма).

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ComradG
    В кавычки, это чтоб в переменной случайно не затесался концевой пробел.
     

    Цитата:
    зачем усложнять батник дополнительным условием в контексте else?  

    Человек спросил, я ответил, можно конечно вывести `if /i "answer"=="no"` наружу.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:25 29-05-2010
    ComradG



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

    Цитата:
    В кавычки, это чтоб в переменной случайно не затесался концевой пробел.

    Тоже верно.
    По поводу else я имел ввиду следующее:

    Код:
     
    ...
    ) else (  
        if /i "%answer%"=="n" (
    ...
     

    Я просто не совсем догоняю зачем if делать вложенным. На мой взгляд конструкция else if и проще и быстрее в обработке. Да потом так можно избежать недостачи в скобках
     
    Добавлено:
    01MDM
    Да, дружище! Ты кстати не знаешь как с помощью батника создать ярлык? А то на vbs-ке то я это сделать могу запросто, а вот через обычный cmd никак пока (если, конечно такое вообще возможно).

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 16:46 29-05-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ComradG
    Можно вообще не вкладывать второй if в первый. Просто переделывал исходный вариант. Можно:

    Код:
     
    @echo off
    1>nul chcp 1251  
    setlocal
    cls
     
    set "answer=y"
    set /p answer="Choose your destiny? (Y|n): "  
    if /i "%answer%"=="y" goto:ready
    if /i "%answer%"=="n" echo XD && goto:eof
    echo А вы что, собственно, имели ввиду?
    goto:eof
     
    :ready
    echo FIGHT!
    1>nul pause
     

     
     
    Добавлено:

    Цитата:
    кстати не знаешь как с помощью батника создать ярлык?

    Могу только посоветовать незаменимую утилиту NirCmd. Если не ошибаюсь, она обязана быть в шапке. Она умеет все, включая ярлыки.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:53 29-05-2010 | Исправлено: 01MDM, 16:55 29-05-2010
    ComradG



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

    Код:
     
    @echo off  
    1>nul chcp 1251    
    setlocal  
    cls  
       
    set "answer=y"  
    set /p answer="Choose your destiny? (Y|n): "    
    if /i "%answer%"=="y" goto:ready  
    if /i "%answer%"=="n" echo XD && goto:eof  
    echo А вы что, собственно, имели ввиду?  
    goto:eof  
       
    :ready  
    echo FIGHT!  
    1>nul pause
     

    Именно про это я и говорил - по крайней мере не надо предохраняться при сексе со скобками.
     
    А за NirCmd спасибо, но чай не сабж, хотелось бы все ручками. А в сети только и советуют, что vbs-ки

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 17:05 29-05-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