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

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

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

vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Nagual



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

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<<>>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

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

  • Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:28 19-03-2008 | Исправлено: Nagual, 01:02 24-09-2008
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Karrakurt
    надо удалить разделители
     
    Код:
    @ECHO off
    CHCP 1251
    SET path=^
    C:\Documents and Settings\All Users ^
    C:\Program Files\Common Files ^
    %SYSTEMROOT%\Connection Wizard
     
     
    ECHO %path%
    FOR
    /f "delims=" %%i IN (%path%) DO (
       
    ECHO %%i
       
    )

     
    Добавлено:
    внимательно выкуривай for/? и set/?

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 14:12 18-10-2008
    Chhag



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, уважаемые.
    Надо в батнике зайти телнетом по адрессу 192.168.1.111, в ответ на запрос  
    Password:  
    ввесьти этот самый пароль, и выполнив команду  
    reload
    выйти из устройства по  
    exit
    и закрыть этот самый батник. Вроде все просто- но вот пароль вводиться не хочет...

    Всего записей: 73 | Зарегистр. 05-12-2006 | Отправлено: 16:08 18-10-2008
    virtuNBK



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    написал скриптец парсит файлик при нахождении нужной строки пишет время

    Код:
     
    :st
    @if exist *.txt del *.txt
    @ping -n 3 127.0.0.1 > NUL
    @find "искомая строка" 7E21F38Ad01 | c:\gawk\awk -f c:\gawk\t.awk
    @if exist dkor.txt (@echo "нашол " в $T|C:\gawk\curtime32) else (GOTO st4)

     
    есть бальшое желание доделать
    1. в папке из которой буду запускать (рабочая папка батника может указываться в свойствах ярлыка) найти фаил модифицированый последним.
    2. будильник что бы например
    start будильник 20 00 стартовал визуально видимый будильник с обратным отсчетом времени
    в идеале найти будильник
    start будильник "20минут" "00секунд" "5минут" "C:\beep.wav"
    суть запустить таймер на 20 минут и за 5 минут до окончания времени начать циклично играть C:\beep.wav пока пользователь не отрубит звук (отсчет времени остаеться) сам таймер висит поверх всех окон.
     
    Добавлено:
    Chhag
    в полезных утилитах есть tst должна помочь.

    Всего записей: 16 | Зарегистр. 07-06-2007 | Отправлено: 15:31 19-10-2008 | Исправлено: virtuNBK, 15:49 19-10-2008
    dj_Diesel



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    возможно этот вопрос звучал сорри
    вообщем нужно чтобы при запуске батника спрашивался пароль  
    если пароль неправильный сообщение неправильно и reboot
    если правильно то ничего дальше идут действия

    Всего записей: 1549 | Зарегистр. 09-09-2006 | Отправлено: 18:56 19-10-2008
    Craager



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите создать батник, требуется скопировать на рабочий стол ярлык и чтобы он ещё открылся... батник и ярлык будет находится в SFX архиве. Как это можно реализовать?

    Всего записей: 385 | Зарегистр. 08-06-2006 | Отправлено: 14:50 20-10-2008 | Исправлено: Craager, 14:52 20-10-2008
    SageNS

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть файл file.txt содержанием sdgsga:sdgdag:sdgsag:sdgasg:dsfgas:sdgasg: Генерируестя скриптом на питоне, таких наименований может быть до 1000, нужно разделить их и для каждого объекта между : сделать действие использую
     
    set a=1
    for /f "tokens=* delims=:" %%i in (C:\file.txt) do (
    set group=%%i
    действие над group
    )
     
    Но где-то туплю, не подскажите где именно?

    Всего записей: 12 | Зарегистр. 06-04-2008 | Отправлено: 16:04 20-10-2008 | Исправлено: SageNS, 16:05 20-10-2008
    Elroir



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

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


    Код:
     
    @echo off
    setlocal
    set /p pass="Please, enter password : "
    if not "%pass%"="12345678" (
    echo The password is wrong, rebooting....
    shutdown -r -f
    goto :EOF
    )
    ...
    ...
    ...
     

     
    Добавлено:
    Craager

    Цитата:
    требуется скопировать на рабочий стол ярлык и чтобы он ещё открылся

    Чаще всего в SFX архивы можно добавлять скрипт, который будет выполнятся при запуске файла. По моему, проще все это описать в таком скрипте.


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 17:33 20-10-2008
    Taciturn

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Можно ли как-нибудь проверить наличие у пользователя администраторских прав, желательно с помощью встроенных средств или с помощью какой-нибудь небольшой программы (килобайт 50, не больше)?

    Всего записей: 1985 | Зарегистр. 26-07-2003 | Отправлено: 23:48 20-10-2008
    igor_andreev

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

    Цитата:
    желательно с помощью встроенных средств

    В гугле набери "isadmin + vbscript"

    Цитата:
    с помощью какой-нибудь небольшой программы (килобайт 50, не больше)?

    На выбор isadmin.exe от разных производителей
    http://diamondcs.com.au/consoletools/isadmin.php
    http://www.westmesatech.com/wast.html
    http://www.otbsw.com/
     

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 00:28 21-10-2008
    Taciturn

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

    Всего записей: 1985 | Зарегистр. 26-07-2003 | Отправлено: 12:11 21-10-2008 | Исправлено: Taciturn, 12:19 21-10-2008
    monsoon



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Из шапки "Работа с текстом, датой и файлами" -> "Чтение из файлов содержащих ключи и значения (подобно структуре .ini файлов)" приводится пример ViSiToR:
    Код:
    Set FileToRead=data.cfg  
    Set Key=full  
    For /F "usebackq delims=" %%i In (`Find /I "%Key%=" %FileToRead%`) Do Set Value=%%i  
    Echo %Value:~+5%
     
    Вопрос как в переменную занести первое найденное значение?

    Код:
    For /F "usebackq delims=" %%i In (`Find /I "%Key%=" %FileToRead%`) Do (Set Value=%%i & goto continue)
    :continue
    не подходит, т.к. первое выдаваемое значение почему-то черточки с именем файла, в котором ведется поиск:
    ---------- DATA.CFG

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 16:04 21-10-2008
    igor_andreev

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

    Код:
     
    FOR /F "TOKENS=1* DELIMS==" %%A IN ('MORE %FileToRead% ^| FIND /I "%Key%"') DO IF NOT DEFINED VALUE SET "VALUE=%%B"
     


    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 16:59 21-10-2008
    monsoon



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    Так тоже получается только последнее значение.
     
    Вообщем, получилось с моим вариантом, если добавить eol=-  или  skip=2  
     
    Добавлено:
    а можно не добавлять eol  или  skip, а вместо find написать findstr

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 18:25 21-10-2008 | Исправлено: monsoon, 17:00 22-10-2008
    dj_Diesel



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
    Большое Спасибо!

    Всего записей: 1549 | Зарегистр. 09-09-2006 | Отправлено: 20:06 21-10-2008
    igor_andreev

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

    Цитата:
    Так тоже получается только последнее значение

    Ложь! Извольте обьясниться, сударь! [схватился за эфес шпаги]
     
    test.ini

    Код:

    mykey=1
    mykey=2
    mykey=3

     
    test1.cmd

    Код:

    @echo off
    for /f "tokens=1* delims==" %%a in ('more test.ini ^| find /i "mykey"') do set "value=%%b"
    echo %value%
    value равно 3
     
    test2.cmd

    Код:

    @echo off
    for /f "tokens=1* delims==" %%a in ('more test.ini ^| find /i "mykey"') do if not defined value set "value=%%b"
    echo %value%
    value равно 1
     
    [достал попкорн, устроился поудобнее...]

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 22:44 21-10-2008 | Исправлено: igor_andreev, 23:10 21-10-2008
    sL4yer



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет. Хочу попросить написать такую не хитрую "игру". Игра заключается в том, что:
    1. Компютер "загадывает" любое число от 1 до 10.
    2. Выводит мне на экран сообщение что он загадал число "Y" от 1 до 10.
    3. Просит меня ввести это число.
    4. Дале если я не угадал, то выводит на экран сообщение о том, что я не угадал. Если же угадал, пишет что я угадал и завершает програму. У меня может быть только 3 попытки, если я 3 раза не угадал, то выводит на екран сообщение что мои попытки исчерпаны и завершает програму.
     
    Буду благодарен, если организуете такое

    Всего записей: 49 | Зарегистр. 22-10-2008 | Отправлено: 01:17 22-10-2008
    SageNS

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sL4yer
    Конечно немного не в тему, но на всякий случай решение, написанное на питоне...
     
    http://fileshare.in.ua/1303059
     
    Добавлено:
    А вот это же решение для батника
     

    Код:
     
    @echo off    
       
    set i=0    
    echo Zagadyvaiu chislo...    
    :rand    
    set chislo=%random%    
    if %chislo% GTR 10 goto rand
    if %chislo% EQU 0 goto rand  
       
    echo Chislo zagadano! Est 3 popytki!  
       
    :enter    
    set /p "ent=Chislo : "    
    set /a i=%i%+1    
       
    if %ent% EQU %chislo% (    
    echo Chislo ugadano!  
    pause
    exit    
    )    
       
       
    if %i% LSS 3 (    
    goto enter    
    )    
       
    if %i% EQU 3 (    
    echo Game Over    
    pause    
    )
     

    Всего записей: 12 | Зарегистр. 06-04-2008 | Отправлено: 02:44 22-10-2008 | Исправлено: SageNS, 04:04 22-10-2008
    sL4yer



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

    Цитата:
    А вот это же решение для батника

    Премного благодарен. Только меня заинтересовали 3 строчки:

    Код:
     
    @echo off    
    cls
         
    set i=0    
    echo Setting a number...    
    :rand    
    set number=%random%    
    if %number% GTR 10 GOTO rand  
    if %number% EQU 0 GOTO rand
       
       
    echo The number is setted! You have 3 tries!    
       
    :enter    
    set /p "ent=Enter the number : "    
    set /a i=%i%+1
    if %ent% GTR 10 (
                     echo You have entered the number bigger then 10, try again!
                     GOTO enter
    )                      
     
    if %ent% NEQ %number% echo You have entered a bad number, try angain!    
    if %ent% EQU %number% (    
                           echo YOU WIN!!! Now program will exit, wait 5 seconds...    
                           ping 127.0.0.1 -n 5 >nul  
                           exit    
    )    
             
    if %i% LSS 3 GOTO enter        
         
    if %i% EQU 3 (    
                  echo Game Over! Now program will exit, wait 5 seconds...
                  ping 127.0.0.1 -n 5 >nul    
    )
     

    Значит это получается что программа рандомно загадывает число от 0 до 32767 и тогда проверяет его, если оно больше 10, то она возращается в метку "rand" и опять загадывает число от 0 до 32767 и снова проверяет его и так длится пока она не "загадает" число в диапазоне от 0 до 10? А нельзя ли указать конкретный диапазон "от и до" что бы не ждать в начале програмы...

    Всего записей: 49 | Зарегистр. 22-10-2008 | Отправлено: 07:48 22-10-2008
    01MDM



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

    Цитата:
    достал попкорн, устроился поудобнее...

     
    Если запускать из одной консоли несколько раз то так и будет: value равно 3, setlocal исправит. Или просто сделать выход из цикла for по goto.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 07:51 22-10-2008
    SageNS

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

    Всего записей: 12 | Зарегистр. 06-04-2008 | Отправлено: 08:52 22-10-2008
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 5
    vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru