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

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

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

evle (19-03-2008 19:44): Лимит страниц.
Задачи на bat-файлах 5
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 15:21 11-09-2007 | Исправлено: Elroir, 01:52 26-02-2008
    01MDM



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

    Код:
     
    @echo off
    set /p fact="Factorial: "
    set /a fact-=1
    set res=1
    for /l %%i in (0,1,%fact%) do set /a res*=%%i+1
    echo %res%
     

     
    Ряд Фибоначчи

    Код:
     
    @echo off
    set /p fib="Fibonacci: "
    set a=0
    set b=1
    :next
    if %b% leq %fib% (
        set /a a=b-a
        set /a b=a+b
        set /p=%b% <nul
        goto:next
    )
     
     

     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:06 04-12-2007
    SapSat

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
     
    Спасибо за красивый код. Сам написал?
     
    Но там нет рекурсии.  
    В моем примере я хотел изящно рекурсию обыграть...

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 10:25 04-12-2007 | Исправлено: SapSat, 10:27 04-12-2007
    01MDM



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

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:28 04-12-2007
    SapSat

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





    респекты — в ПМ

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 10:33 04-12-2007 | Исправлено: vu1tur, 10:40 04-12-2007
    Elroir



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

    Цитата:
    локальная сеть и мне нужен такой батник с помощью которого можно было пропинговать компы (работает комп или нет) с последующим условием к примеру если комп работает то выведет сообщение что он работает и наоборот

    Предположим, что в файле computers.txt есть список всех компьютеров в сети (адреса и названия, названия необязательны), примерно так:

    Код:
     
    192.168.0.1 Vasya
    192.168.0.2 Petya
    192.168.0.3  
    192.168.0.1 Vanya
     

    Тогда делаем так:

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    for /f "tokens=1*" %%a in (computers.txt) do (
    ping -n 1 - w 1000 %%a | find "TTL=">nul
    if !errorlevel!==0 (echo %%a %%b is online) else (
    echo %%a %%b is offline
    )
    )
     

     


    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:20 04-12-2007
    SapSat

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, плз, разобраться -
    написал шапку к своему факториалу,
    в которой проверяется - запустился ли батник с параметром или нет,
    и если нет - то запускает сам себя с параметром -
     

    Код:
     
    @echo off  
    if "%1"=="" (
    set /p d=Factorial:  
    call %~nx0 %d%  
    Exit
    )
    set /a f=1
    :Fact  
    set /a i=%1-1
    if %i% GTR 1 call:Fact %i%
    set /a f*=%1
    echo %f%
     

     
    Почему здесь он просит дважды вводить параметр?
     
    ?

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 13:22 04-12-2007 | Исправлено: SapSat, 13:26 04-12-2007
    Elroir



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

    Цитата:
    Почему здесь он просит дважды вводить параметр?

    Потому что ты пытаешься дать батнику параметр, установленный внутри скобок if-a.
    A для батника такого параметра не существует, поэтому он и вызывается второй раз без параметра. Используй "setlocal enabledelayedexpansion" и команду "call %~nx0 !d!".

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:12 04-12-2007
    kotLeon

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Спасибо за предложенное решение, на сколько я понял здесь в цикле будут перебираться те айпишники что указаны в .тхт файле.
    А можно попросить если не очень затруднительно, показать как можно реализовать данную проверку для одного компьютера, не используя циклы, и айпи указать в самом батнике (к примеру такой айпи 192.168.0.1).
     
    Спасибо за помощь!!!

    Всего записей: 6 | Зарегистр. 03-12-2007 | Отправлено: 14:33 04-12-2007
    Vladimir312



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

    Цитата:
    Vladimir312  
    Чтобы определить каталог запуска батника (плюс вывести его короткий путь), вовсе не надо использовать for.  
    Можно так:

    Спасибо.
    Это идеальный вариант - всего одна строчка:

    Код:
    @echo off
    echo %~dps0
    pause

    Всего записей: 151 | Зарегистр. 25-10-2006 | Отправлено: 14:42 04-12-2007
    SapSat

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Спасибо.
    Я сделал вариант без  setlocal enabledelayedexpansion
     

    Код:
     
    @echo off  
    if "%1"=="" (
    set /p d=Factorial:  
    call %~nx0 %%d%%  
    Exit
    )
    set /a f=1
    :Fact  
    set /a i=%1-1
    if %i% GTR 1 call:Fact %i%
    set /a f*=%1
    echo %f%
     

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 15:22 04-12-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir  
    Как ты догадался, что имел в виду Vladimir312 ?

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 15:32 04-12-2007
    Elroir



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

    Код:
     
    @echo off
    setlocal
    set "ip=192.168.0.1"
    ping -n 1 -w 1000 %ip% | find "TTL=">nul
    if %errorlevel%==0 (echo %ip% is online) else (
    echo %ip% is offline)
     

     
     
    king_stiven

    Цитата:
    Как ты догадался, что имел в виду Vladimir312 ?

    Я догадливый
     
     

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:11 04-12-2007
    whitecherep

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужен батник, который бы сканировал папку с музыкой в mp3 (например Music на диске J) и удалял без подтверждения все композиции, длительность которых больше 8 минут (предусмотреть что названия песен могут быть в кирилице)

    Всего записей: 38 | Зарегистр. 14-02-2006 | Отправлено: 19:16 04-12-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    whitecherep
    Как-то уже обсуждалось
    Стандартными средствами нельзя, найди утилиту tag.exe и положи рядом с батником

    Код:
     
    @echo off
    if exist list.tmp del /q list.tmp
    setlocal enabledelayedexpansion
    tag --hidetags "J:\Music\*.mp3" --recursive --tofilen list.tmp
    set count=0
    for /f "tokens=*" %%i in (list.tmp) do (
        set /a count+=1
        if !count!==1 set "file=%%i"
        if !count!==3 set "len=%%i"
        if !count!==4 set count=0 && call:check !len:~-5,2!  
    )
    del /q list.tmp
    goto:eof
    :check
    if %1 gtr 0x07 del /q "%file%"
     

     
    PS. http://www.synthetic-soul.co.uk/files/tag_2.0.52.zip
    PSS. Если длительность больше часа, возможны ошибки, т.е останутся файлы от часа до часа и 8 мин. Проверить не на чем.  

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:04 04-12-2007 | Исправлено: 01MDM, 23:42 04-12-2007
    Serge2005

    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Помогите, пожалуйста, реализовать:
    Есть папка MainDir. В ней около 60 папок. В них есть файлы, среди содержимого каждой есть файл: "sbo"+dirname+".htm". Нужно, чтобы скрипт создавал файл, следующего содержимого:
    (i:=1)

    Итем: [i]. <----первый кусочек
    некоторый текст (везде одинаковый)
    директория[i]: Dir1Name
    Файл[i]: Dir1Name+"/sbo"+Dir1Name+".htm"
    некоторый текст2

    i++

    Итем: [i]. <---- второй кусочек и тд....
    ...

    Помогите, пожалуйста..

    Всего записей: 554 | Зарегистр. 11-02-2006 | Отправлено: 00:25 05-12-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Serge2005
    Я например не понял, что надо.  

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 00:34 05-12-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Тут и я не понял
     
    Serge2005
    Приведи конкретный пример с названиями файлов и директорий (можно не один)

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 00:58 05-12-2007 | Исправлено: Elroir, 01:00 05-12-2007
    Ilyansk

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    а че тут думать?! прыгать надо

    Код:
     
    @echo off
    if exist outfile.txt del outfile.txt
    setlocal enabledelayedexpansion
    set "i=0"
    FOR /D %%A IN (*.*) DO @call :maker %%A %0
    goto :eof
    :maker
    if exist %1\sbo*.htm (
    for %%N in (%1\sbo*.htm) do "set FN=%%N"
    set /a i+=1
    echo Item: !i! >>outfile.txt
    echo везде одинаковый текст >> outfile.txt
    echo  Директория: %1 >>outfile.txt
    echo  Файл: %1/!FN! >>outfile.txt
    echo некоторый текст2 >>outfile.txt
    )
     

    помесить этот батник в папку MainDir, оттуда и запустить. Результат в виде файла outfile.txt должен появиться в этой же папке. Файл создастся в кодировке DOS (866) и notepad покажет кракозябры. Можно сделать и в кодировке ANSI, тогда после setlocal ... вставить строку chcp 1251 . Код не отлажен, сами попробуйте,
    здесь уместнее давать направления. параметр %0 в DO @call :maker %%A %0 по идее несет имя самого запускаемого батника с полным путем. Его можно разобрать и делать строки  
    echo  Директория: %1 >>outfile.txt
    echo  Файл: %1/!FN! >>outfile.txt
    более правильными, т.к. сейчас они будут без путей,например
    Директория: dir_with_file
      Файл: dir_with_file/sbodir_with_file.htm

    a надо бы
    Директория: диск:\путь\dir_with_file
      Файл: диск:\путь\dir_with_file/sbodir_with_file.htm

    Вот эти диск:\путь\ можно взять из параметра %0. Наберите в cmd for /?, поможет
    батник несколько кривоват, берет имя последнего sbo*.htm, если он вдруг в директории не один, не включает в отчет имена директорий, в которых нет sbo*.htm
    нет предела совершенству, дерзайте.
    p.s.
    Вольтер как-то сказал (или не Вольтер?) "Покажите мне того, кто написал хотя бы пару строк (кода?!) и я доведу его до самоубийства"
    О, как!
     
    Добавлено:
    Кста, попутно вопрос
    Есть ли решение на ВАТ файле у задачи
    спрашиваем у юзера параметр, если в течение N сек. нет ответа, берем по умолчанию
    ?

    Всего записей: 70 | Зарегистр. 27-07-2006 | Отправлено: 06:53 05-12-2007 | Исправлено: Ilyansk, 07:10 05-12-2007
    Camelot107

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди ХЕЛП МИ! Нужен bat-ник для 7-Zip, который будет архивировать файлы с расшир. *.bkf  
    Пробовал такой:  
    "C:\Program Files\7-Zip\7z.exe" a -r -y -t7z -mx=9 -ms=on -mf=on -mhc=on -mhcf=on -mhe=on -mmt=on -m0=BCJ2 -m1=LZMA:d=640m -m1=LZMA:fb=96 -m1=LZMA:lc=3 -m2=LZMA:d=4m -m2=LZMA:fb=96 -m2=LZMA:lc=3 -m3=LZMA:d=4m -m3=LZMA:fb=96 -m3=LZMA:lc=3 -mb0:1 -mb0s1:2 -mb0s2:3 -v4g srez *.bkf
    Серваки повисли подскажите плз можт кто-то уже с таким сталкивался

    Всего записей: 1 | Зарегистр. 05-12-2007 | Отправлено: 09:02 05-12-2007
    Elroir



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

    Цитата:
    Есть ли решение на ВАТ файле у задачи  
    спрашиваем у юзера параметр, если в течение N сек. нет ответа, берем по умолчанию  

    Есть. В Windows 2003 (или в Resource Kit-ах NT или 2000) есть утилита choice.exe.

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 09:53 05-12-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 101 102 103

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4
    evle (19-03-2008 19:44): Лимит страниц.
    Задачи на bat-файлах 5


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru