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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 2

Модерирует : KLASS, IFkO

vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачи на bat-файлах (часть 1)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0
     
    Невозможности — что нельзя сделать с помощью командных файлов:
    · изменть конфигурацию IP на удаленной машине (без помощи rcmd.exe) [добавил ALEF]
     
    Старая версия первого сообщения

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 16:59 14-11-2006 | Исправлено: Elroir, 04:30 26-04-2007
    K6



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
     
    Спасибо за батник, не мог быть написать как он выполняется в командной строке..?

    Всего записей: 7 | Зарегистр. 19-02-2007 | Отправлено: 12:37 21-02-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    K6
    Набираешь Имя_Батничка.bat и жмешь Ентер
    или что ты именно спрашивал?

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 12:46 21-02-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Казус со мной случился. Длинный путь к папке был в клипбоарде, напечатал в cmd.exe:
    copy filename "C:\Documents and Settings\USER\My Documents\
    и случайно жмакнул Enter. Завершающую кавычку не успел написать. А файл скопировался . Попробовал из батника - тоже работает без завершающей кавычки, если папка с пробелами в имени написана последней в строке. Недокументированная фича? Это под XP.

    Всего записей: 1671 | Зарегистр. 08-12-2004 | Отправлено: 13:04 21-02-2007 | Исправлено: igor_andreev, 13:07 21-02-2007
    Smitis



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

    Цитата:
    и случайно жмакнул Enter. Завершающую кавычку не успел написать. А файл скопировался . Попробовал из батника - тоже работает без завершающей кавычки, если папка с пробелами в имени написана последней в строке. Недокументированная фича? Это под XP.

    Это давно было. Чуть-ли не из ДОСа.

    Всего записей: 2473 | Зарегистр. 09-02-2003 | Отправлено: 13:13 21-02-2007
    igor_andreev

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

    Всего записей: 1671 | Зарегистр. 08-12-2004 | Отправлено: 13:15 21-02-2007
    Smitis



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

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

    У меня работает. Может у тебя вообще задержки на пинг нет и задержка только за счёт количества команд?
    Кстати, в конце может goto :eof нужен, а не goto eof ?

    Всего записей: 2473 | Зарегистр. 09-02-2003 | Отправлено: 13:18 21-02-2007
    igor_andreev

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

    Цитата:
    Кстати, в конце может goto :eof нужен, а не goto eof ?

    А цитируемая часть и так в конце батника. И вдобавок в самом конце еще метка :eof вставлена.
     
     
    Добавлено:
    Nagual
    А ты из идеологических побуждений не хочешь пользоваться sleep.exe? Тогда средствами винды можно задержку vbscript-ом делать. В начале батника вставляешь:
    echo wscript.sleep wscript.arguments(0)>sleep.vbs
    и в батнике, где нужна пауза, используй вместо пинга:
    cscript sleep.vbs 500 > nul
    Вместо 500(это время задержки в миллисекундах) пиши, сколько тебе надо. В конце батника del sleep.vbs
    [offtop]
    Про пинг в таких количествах - анекдот какой-то старый напоминает, типа в чат входит кулхацкер и вопрошает: "Дайте ай-пи какого нибудь чайника, просканить-завесить систему кому-нибудь хочу.". Ему говорят:"127.0.0.1". И со словами "Ща этот ламер умрет млин.." кулхацкер сваливает из чата...
    [/offtop]

    Всего записей: 1671 | Зарегистр. 08-12-2004 | Отправлено: 13:49 21-02-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    да, ашипачке грыматическее быле, но это не страшно, проработал на предмет заголовка, цветов, закольцевал и тд и тп

    Код:
    @echo off
    chcp 1251 >nul
    color 0A & title _ _ _ _ _ _ _ _ _ .T. .H. .E. . .M. .A. .T. .R. .I. .X. _ _ _ _ _ _ _ _ _
    mode con cols=80 lines=25
     
    set _1_=Call trans opt: received. 2-19-98 13:24:18 REC:Log
    set _2_=The Matrix has you, %username% ...
    set _3_=Follow the white rabbit ...
    set /a _i=1 && ping -n 6 -w 1000 loopback >nul
     
    :_1_loop
    call :_write %%_1_:~0,%_i%%%
    set /a _i=%_i%+1 && cls if not "%_i%"=="52" goto _1_loop
    call :_p0 && cls wait 300 && set /a _i=1 && goto _2_1_loop
     
    :_2_1_loop
    set /a _i=%_i%+1
    echo ^
     %random:~0,1%  %random:~0,1%  %random:~0,1%  %random:~0,1%^
     %random:~0,1%  %random:~0,1%  %random:~0,1%  %random:~0,1%^
     %random:~0,1%  %random:~0,1%  %random:~0,1%  %random:~0,1%^
     %random:~0,1%  %random:~0,1%  %random:~0,1%  %random:~0,1%^
     %random:~0,1%  %random:~0,1%  %random:~0,1%  %random:~0,1%^
     %random:~0,1%  %random:~0,1%  %random:~0,1%  %random:~0,1%^
     %random:~0,1%  %random:~0,1%  %random:~0,1%  %random:~0,1%
    call :_p0
    if not "%_i%"=="30" goto _2_1_loop
    set /a _i=1 && goto _2_2_loop
     
    :_2_2_loop
    set /a _i=%_i%+1
    echo ^
     %random:~0,2% %random:~0,2% %random:~0,2% %random:~0,2%^
     %random:~0,2% %random:~0,2% %random:~0,2% %random:~0,2%^
     %random:~0,2% %random:~0,2% %random:~0,2% %random:~0,2%^
     %random:~0,2% %random:~0,2% %random:~0,2% %random:~0,2%^
     %random:~0,2% %random:~0,2% %random:~0,2% %random:~0,2%^
     %random:~0,2% %random:~0,2% %random:~0,2% %random:~0,2%^
     %random:~0,2% %random:~0,2%
    call :_p0
    if not "%_i%"=="30" goto _2_2_loop
    set /a _i=1 && goto _2_3_loop
     
    :_2_3_loop
    set /a _i=%_i%+1
    echo ^
     %random:~0,3% %random:~0,3% %random:~0,3% %random:~0,3%^
     %random:~0,3% %random:~0,3% %random:~0,3% %random:~0,3%^
     %random:~0,3% %random:~0,3% %random:~0,3% %random:~0,3%^
     %random:~0,3% %random:~0,3% %random:~0,3% %random:~0,3%^
     %random:~0,3% %random:~0,3% %random:~0,3% %random:~0,1%
    call :_p0
    if not "%_i%"=="30" goto _2_3_loop
    set /a _i=1 && goto _2_4_loop
     
    :_2_4_loop
    set /a _i=%_i%+1
    echo ^
     %random:~0,2%%random:~0,2% %random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2% %random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2% %random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2% %random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2% %random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2% %random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2% %random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2% %random:~0,1%%random:~0,1%
    call :_p0
    if not "%_i%"=="30" goto _2_4_loop
    set /a _i=1 && goto _2_5_loop
     
    :_2_5_loop
    set /a _i=%_i%+1
    echo ^
     %random:~0,2%%random:~0,2%%random:~0,1%^
     %random:~0,2%%random:~0,2%%random:~0,1%^
     %random:~0,2%%random:~0,2%%random:~0,1%^
     %random:~0,2%%random:~0,2%%random:~0,1%^
     %random:~0,2%%random:~0,2%%random:~0,1%^
     %random:~0,2%%random:~0,2%%random:~0,1%^
     %random:~0,2%%random:~0,2%%random:~0,1%^
     %random:~0,2%%random:~0,2%%random:~0,1%^
     %random:~0,2%%random:~0,2%%random:~0,1%^
     %random:~0,2%%random:~0,2%%random:~0,1%^
     %random:~0,2%%random:~0,2%%random:~0,1%^
     %random:~0,2%%random:~0,2%%random:~0,1%^
     %random:~0,2%%random:~0,2%%random:~0,1%
    call :_p0
    if not "%_i%"=="30" goto _2_5_loop
    set /a _i=1 && goto _2_6_loop
     
    :_2_6_loop
    set /a _i=%_i%+1
    echo^
     %random:~0,2%%random:~0,2%%random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2%%random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2%%random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2%%random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2%%random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2%%random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2%%random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2%%random:~0,2%%random:~0,2%^
     %random:~0,2%%random:~0,2%%random:~0,2%%random:~0,1%
    call :_p0
    if not "%_i%"=="30" goto _2_6_loop
    cls && ping -n 6 -w 500 loopback >nul && set /a _i=1 && goto _3_loop
     
    :_3_loop
    call :_write %%_2_:~0,%_i%%%
    set /a _i=%_i%+1 && if not "%_i%"=="53" goto _3_loop
    call :_p0 && cls && call :_p0 && set /a _i=1 && goto _4_loop
     
    :_4_loop
    call :_write %%_3_:~0,%_i%%%
    set /a _i=%_i%+1 && if not "%_i%"=="52" goto _4_loop
    call :_p0 && cls && call :_p0 && set /a _i=1 && goto _2_1_loop
     
    :_write
    color 0A
    set p1=ping -n 1 -w 1000 loopback ^>nul ^&^&  
    cls && echo %* & %p1%%p1%%p1%%p1%%p1%%p1%%p1%%p1%%p1%%p1%%p1%goto eof
     
    :_p0
    ping -n 1 -w 1000 loopback >nul
     
    :tl0
    set /a rnd1=%random%%%10
    set /a rnd2=%random%%%10
    set /a rnd3=%random%%%10
    set /a rnd4=%random%%%10
    set /a rnd5=%random%%%10
    set /a rnd6=%random%%%10
    set /a rnd7=%random%%%10
    set /a rnd8=%random%%%10
    set /a rnd9=%random%%%10
    set tl1=%rnd1% %rnd2% %rnd3% %rnd4% %rnd5% %rnd6% %rnd7% %rnd8% %rnd9%
    set tl2=%rnd8% %rnd5% %rnd1% %rnd9% %rnd2% %rnd7% %rnd3% %rnd6% %rnd4%
    if %rnd1%==0 color 0A
    if %rnd1%==1 color 02
    title %tl1% .T. .H. .E. . .M. .A. .T. .R. .I. .X. %tl2%
     
    :eof
    естественно, при копировании с этого кривого форума код работать не будет, для этого удаляем все пробелы на концах строк, кроме строки 119, там пробел должен стоять
     
    Добавлено:
    igor_andreev
    анекдот прикольный, наверное, к тебе относится, к теме никакого отношения, хочешь подколоть, давай в личку
    средсвами vbs не хочу лишний раз пользоваться, когда можно обойтись стандартными средствами, а за способ спс

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 16:12 21-02-2007 | Исправлено: Nagual, 17:12 21-02-2007
    Elroir



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

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

    Если ты про то, как его запускать, то так как написал KapralBel.
    А если про что-то другое - сформулируй вопрос конкретнее.
     
    Smitis

    Цитата:
    Это давно было. Чуть-ли не из ДОСа.

    А там были длинные имена с пробелами?
     
    Nagual
    В чем смысл стольких ping-ов подряд, если можно регулировать параметр -n?

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:37 21-02-2007 | Исправлено: Elroir, 17:16 21-02-2007
    igor_andreev

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

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

    Ну в общем-то да, localhost в моем варианте был

    Цитата:
    vbs не хочу лишний раз пользоваться, когда можно обойтись стандартными средствами
    cscript.exe - самое, что ни на есть стандартное средство, всегда лежит в папке system32 вместе с cmd.exe, ping.exe, chcp.com и прочими ...
     

    Всего записей: 1671 | Зарегистр. 08-12-2004 | Отправлено: 16:52 21-02-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    все просто: у меня лично не получилось достичь желаемого эффекта, а именно, рукописного письма, играл всеми параметрами со всеми возможными значениями, поэтому решил сделать несколько пингов, в чем, собсна, проблема? один пинг или несколько? какая разница, главное, результат достигнут: используется чистый комсценарий и выводит рукописное письмо с нужной реалистичной задержкой
    n пробовал, ставишь значение 2 и задержка становится непомерно большой, не говоря уж о больших значениях, промежуточного значения между целыми числами n нет
    если есть способ застваить работать скрипт с использованием всего одного пинга длительностью примерно такой, какой я получил серией пингов, жду с нетерпением

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 16:59 21-02-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
    Давно хотел спросить, откуда такие знания по командным сценариям? Поделись литературой, если есть...

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 17:20 21-02-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    Мда... в ping.exe видимо встроен механизм паузы между пингами. То есть если пинг один - выполняется очень быстро, а вот если их несколько, даже ограничивая время с помощью -w, все равно возникает задержка примерно в секунду. Так что я поторопился с одним ping-ом.

    Цитата:
    поэтому решил сделать несколько пингов, в чем, собсна, проблема? один пинг или несколько?  

    Да нет никакой проблемы - просто хочется красивого решения.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 17:25 21-02-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka
    Достаточно встроенной справки
    и писать, писать, писать батнички

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:36 21-02-2007
    Elroir



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

    Цитата:
    Давно хотел спросить, откуда такие знания по командным сценариям?

    Опыт В далеком 1994-ом году, компьютера у меня еще не было, но я очень интересовался всем, что с ним было связано. И попалась мне книжка по MSDOS 6.20, с подробным описанием всех команд. Так я ее чуть-ли не наизусть выучил. До сих пор помогает. Потом уже, когда появился компьютер, начал писать батники для себя. Литературы как таковой не было и до сих пор нет. Чаще всего пользовался встроенной помощью по командам. Когда появился интернет - поиском. Залезал(и продолжаю залезать) в разные форумы - смотрел, как люди делают разные полезные и интересные вещи. Когда наткнулся на этот топик на ru-board, прочитал его вдоль и поперек.
     
    Добавлено:
    KapralBel

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 17:39 21-02-2007
    ViSiToR



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

    Цитата:
    Нужно написать bat-ник, который удалит файлы из папки созданные не сегодня

    По идее должно это сработать:
     

    Код:
    @Echo off
    Set Papka=C:\test
    For %%I in (%Papka%\*.*) do (
    Set FDate=%%~tI
    Set FDate=%FDate:~-0,5%
    If Not "%FDate%"=="%date%" del "%%I"
    )

     
    Но почему то переменной FDate всегда присваевается пустое значение...

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 21:35 21-02-2007
    Smitis



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

    Цитата:
    А там были длинные имена с пробелами?

    Длинных имён, конечно не было. Но пробелы могут быть не только в именах.
     
    Добавлено:
    ViSiToR

    Цитата:
    По идее должно это сработать:

    Ты забыл setlocal enabledelayedexpansion

    Всего записей: 2473 | Зарегистр. 09-02-2003 | Отправлено: 23:08 21-02-2007
    ViSiToR



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

    Цитата:
    Ты забыл setlocal enabledelayedexpansion

    Неа, оно и с этим не работает, переменной %FDate% опять же присваевается пустое значение.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 04:46 22-02-2007
    Elroir



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

    Цитата:
    переменной %FDate% опять же присваевается пустое значение

    А если использовать "!" вместо "%"?
     
    Добавлено:

    Код:
     
    @Echo off  
    setlocal enabledelayedexpansion
    Set Papka=C:\test  
    For %%I in (%Papka%\*.*) do (  
    Set FDate=%%~tI  
    Set FDate=!FDate:~-0,5!  
    If Not "!FDate!"=="%date%" del "%%I"  
    )  
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 04:49 22-02-2007 | Исправлено: Elroir, 04:52 22-02-2007
    K6



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
     
    Да я бы хотел узнать какая команда что выполняет...т.е. подробное описание каждого жага в батнике....а то у нас учитель придерётся и загрузит

    Всего записей: 7 | Зарегистр. 19-02-2007 | Отправлено: 06:49 22-02-2007
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 2
    vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru

    Рейтинг.ru