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

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

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

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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:54 27-04-2007 | Исправлено: Elroir, 03:59 10-09-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
    Лучше вот эту choice.exe из Win2000 Resource Kit, choice.zip , синтаксис такой-же.
    По возможности в XP надо использовать 32-битные утилиты, а не древнючие 16-битные com-файлы.

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 14:45 11-05-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    igor_andreev
    Да мне она и не нужна... у меня никогда не бывает интерактивных батничков...
    А только параметры, параметры, параметры....

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 14:54 11-05-2007
    igor_andreev

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

    Цитата:

    Цитата:
    Цитата:как мне получить имя активного сетевого подключения?  
     
     
    Вопрос остается открытым...  

    Из шапки cnic.exe не пробовал? Попробуй ее поковырять. Я сам с ней толком еще не разбирался, у нее какие-то косяки были с errorlevel, когда пытался беспроводную сетку проверять, плюнул тогда на нее, а сейчас времени нет, но в общем  
    cnic.exe -l
    покажет сетевые подключения, а  
    for /l %%a in (0 1 2) do cnic.exe n:%%a -s -v
    выведет connected оно или disconnected.

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 15:03 11-05-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
    igor_andreev
    Спасибо конечно, но как я понял это будет консольное окно? У меня консольное окно скрыто и интерфейс с пользователем (если это можно так назвать) организован через утилиту nircmdc. А там только окна с одной или двумя кнопками. Ну здесь будет три выбора. Не подходит мне это. Мне бы как без окон передать информацию в батник. Может есть какая то консольная утилитка слежения за клавиатурой?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 15:29 11-05-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    GORA2
    Т.е. тебе не надо интерактивный батничек
    Тогда вызывай его так
    www.cmd l1
    www.cmd l2
    и т.д.
    а сам батничек

    Код:
     
    @Echo Off
    GoTo :%1
    GoTo :EOF
     
    :l1
    список действий в 1-м случае
    GoTo :EOF
     
    :l2
    список действий в 2-м случае
    GoTo :EOF
     

     
    Не мудри с модификаторами

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 15:41 11-05-2007
    GORA2



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

    Цитата:
    Варианты его работы (упаковка/распаковка/показ диалоговых окон и т.д.) определяются типами и содержимым файлов выбранных на панели ТС.
    Т.е. ТС передает в батник список файлов, а мне надо еще добавить туда информацию о нажатой клавише. Видимо я плохо объяснил.
    Спасибо за помощь, решение нашел (написали мне утилитку для опроса спец клавиш). Буду прилаживать  

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 17:10 11-05-2007
    Den_Klimov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто-нибудь просветите плиз.. очень нужно..
     
    Чем между собой различаются эти два батника?
     
    C:\RadminServer\RadminServer.msi /quiet
    REGEDIT.exe /S "C:\RadminServer\-Port.reg"
    REGEDIT.exe /S "C:\RadminServer\-Radmin Security.reg"
    REGEDIT.exe /S "C:\RadminServer\+Port.reg"
    REGEDIT.exe /S "C:\RadminServer\+Radmin Security.reg"
    "C:\windows\system32\rserver30\RServer3.exe" /stop
    "C:\windows\system32\rserver30\RServer3.exe" /start
    exit
     
    start /wait C:\RadminServer\RadminServer.msi /quiet
    start /wait REGEDIT.exe /S "C:\RadminServer\-Port.reg"
    start /wait REGEDIT.exe /S "C:\RadminServer\-Radmin Security.reg"
    start /wait REGEDIT.exe /S "C:\RadminServer\+Port.reg"
    start /wait REGEDIT.exe /S "C:\RadminServer\+Radmin Security.reg"
    "C:\windows\system32\rserver30\RServer3.exe" /stop
    "C:\windows\system32\rserver30\RServer3.exe" /start
    exit
     
    В чём сакраментальная разница наличия start /wait?
    Результат выполнения вроде ж одинаковый..
    Ведь насколько я понимаю.. при выполнении батника, пока не выполнена предыдущая команда, команда следующая за ней не выполнятеся.. Так?
     
    Я чего-то не доганяю? Наверное смысла команды start.. для чего она вообще может пригодиться?

    Всего записей: 317 | Зарегистр. 27-02-2006 | Отправлено: 17:38 11-05-2007
    slayer120



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

    Цитата:
    Ведь насколько я понимаю.. при выполнении батника, пока не выполнена предыдущая команда, команда следующая за ней не выполнятеся.. Так?

      Не так ты понимаешь. Боюсь что если тебе надо дождаться завершения  
    длительной работы проги а после запустить следующую, и wait  не всегда  
    помогает.  Я в свое время когда сталкивался с подобной проблемой
    решал ее так - периодически выводил список задач (tasklist) в файл и  
    сканил, если проги там нет пускал следующую. метод 100 % рабочий.
       Мне wait тогда не помог.

    Всего записей: 303 | Зарегистр. 24-01-2007 | Отправлено: 17:55 11-05-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Den_Klimov
    slayer120
    Вообще-то, ключ "/wait" нужен для того, что бы дождаться окончания работы приложения, а потом запустить следующую команду...
    Например я запускаю дефрагментацию диска на ночь и ухожу спать, машина вырубится по окончании дефрагментации:

    Код:
     
    @Echo off
    Start /wait Defrag D:
    Shutdown -s -f
     

    Если запустить этот батник без "/wait", то запуститься дефрагментация, а затем сразу "Shutdown", то есть машина вырубится не закончив дефрагментации.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 19:09 11-05-2007 | Исправлено: Maza Faka, 19:11 11-05-2007
    InSe0F



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    дык у мну скрипт этот каждые 10 минут повторяется, он там кучу всего проверяет
    почему бы и не проверять время?
    лучше скажи что я там неправильно написал, а то чтот не работает
     

    Код:
     
    :_1
    rem делаем паузу (600 ~ 10минут - время паузы в секундах)
    sleep 600
     
    rem проверяем скоко времени?
    if %var_time%==18 (
    //////запускаем скипт
    %var_time%=0
    ) else ( %var_time% = %var_time% + 1 )
     
    goto _1
     

    Всего записей: 533 | Зарегистр. 13-03-2006 | Отправлено: 22:10 11-05-2007
    Elroir



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

    Код:
     
    set "var_time=0"
    :_1  
    rem делаем паузу (600 ~ 10минут - время паузы в секундах)  
    sleep 600  
     
    rem проверяем скоко времени?  
    if %var_time%==18 (  
    //////запускаем скипт  
    set "var_time=0"  
    ) else ( set /a var_time+=1)  
     
    goto _1  
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 23:37 11-05-2007
    InSe0F



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    РЕСПЕКТ
     
    ааа, блин, балбес я

    Всего записей: 533 | Зарегистр. 13-03-2006 | Отправлено: 00:14 12-05-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравстуйте всем!
    1 Можно ли избавиться от переменной tempi в приведенном ниже примере?
    Код:
    setlocal enabledelayedexpansion
    FOR /F "eol=; delims== tokens=1,2" %%i IN (Settings.ini) DO (
        set tempi=%%i
        IF "!tempi:~0,1!"=="-" (
            IF "!tempi:~2,1!"=="v" (set copir=!copir! !tempi:~0,4!%%j) ELSE (set copir=!copir! !tempi:~0,4!"!tempi:~4!=%%j")
        ) ELSE (set %%i=%%j)
    )
     
    2 Где найти описание на все возможные способы "обрезания" переменных (типа !tempi:~0,4! !tempi:~4! и т.д.) ?
    3 Как правильно "досрочно" выйти из цикла?
    Код:
    FOR /L %%j IN (1000,-1,1) DO nircmdc cmdwait 850 beep 50 20 & tasklist | find /i "Name_SFX_Archive">nul || GOTO forsequit
    :forsequit
     
    После прекрашения процесса Name_SFX_Archive, бипы прекращаются, но в консольном окне вижу быстрое прокручивание оставшейся части цикла. Почему так происходит?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 08:49 12-05-2007
    Maza Faka



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

    Цитата:
    Можно ли избавиться от переменной tempi

    В смысле избавиться? Присвоить пустое значение? Тогда так
    Код:
    Set tempi=


    Цитата:
    ELSE (set %%i=%%j)

    Вот здесь у тебя ошибка, ты пытаешься присвоить переменной, в данном случае токену "%%i" значение токена "%j%", может ты хотел сделать так "ELSE (set tempi=%%j)"
     
    Кстати вот цитатка из книги Уильям Р. Станек "Командная строка Windows Справочник администратора Microsoft"
     
    "Помните, что оператор else всегда ссылается на ближайший  
    оператор if, который находится в том же блоке, что и опе-  
    оператор else, и не сопоставлен другому оператору else.  
    пример:  

    Код:
    if "%1"=="1" (  
    @if "2"=="2" (hostname & ver) else (ver)) else (hostname & ver & netstat -a)  
     

    Первый оператор else сопоставлен с if "%2"=="2"
    Последний оператор else сопоставлен с if "%1"=="1".  
     

    Цитата:
    Где найти описание на все возможные способы "обрезания" переменных (типа !tempi:~0,4! !tempi:~4! и т.д.)

    Set /? Там всё подробно описано.
     

    Цитата:
    Как правильно "досрочно" выйти из цикла?

    По коду возврата, например
    Код:
    if %errorlevel%==1 goto :EOF
    или при помощи символов "||" "&&"
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 10:43 12-05-2007 | Исправлено: Maza Faka, 10:53 12-05-2007
    GORA2



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

    Цитата:
    В смысле избавиться? Присвоить пустое значение?
    Нет. Как в приведенном мной коде НЕ использовать эту переменную, а производить "обрезание" непосредственно переменной %%i. Какой при этом должен быть синтаксис записи?
    Цитата:
    "Помните, что оператор else всегда ссылается на ближайший  
    оператор if, который находится в том же блоке, что и опе-  
    оператор else, и не сопоставлен другому оператору else.  
    А что, у меня там что то не так? Вроде все работает как задумано!?
    Цитата:
    Set /? Там всё подробно описано.
    Спасибо. Столько раз вроде смотрел, но не увидел .
    Собственно вопрос вот в чем?
    Цитата:
    После прекрашения процесса Name_SFX_Archive, бипы прекращаются, но в консольном окне вижу быстрое прокручивание оставшейся части цикла. Почему так происходит?

     
     
     
     
     
     
    Добавлено:
    И еще вопрос. Запускаю батник:
    Код:
    @echo off
    echo %%0    = %0
    echo %%~0    = %~0
    echo %%~f0    = %~f0
    echo %%~s0    = %~s0
    echo %%~d0    = %~d0
    echo %%~p0    = %~p0
    echo %%~n0    = %~n0
    echo %%~x0    = %~x0
    echo %%~a0    = %~a0
    echo %%~t0    = %~t0
    echo %%~z0    = %~z0
    echo %%~dp0    = %~dp0
    echo %%~nx0    = %~nx0
    echo %%~sn0    = %~sn0
    echo %%~sx0    = %~sx0
    echo %%~snx0    = %~snx0
    echo %%~ftza0    = %~ftza0
    pause>>nul
    Получаю:
    Цитата:
    %0      = "D:\totalcmd\Utilites\Create SFX\архив\преобразование переменных.bat"
    %~0     = D:\totalcmd\Utilites\Create SFX\архив\преобразование переменных.bat
    %~f0    = D:\totalcmd\Utilites\Create SFX\архив\преобразование переменных.bat
    %~s0    = D:\totalcmd\Utilites\CREATE~1\CA36~1\преобразование переменных.batt
    %~d0    = D:
    %~p0    = \totalcmd\Utilites\Create SFX\архив\
    %~n0    = преобразование переменных
    %~x0    = .bat
    %~a0    = --a------
    %~t0    = 12.05.2007 10:59
    %~z0    = 356
    %~dp0   = D:\totalcmd\Utilites\Create SFX\архив\
    %~nx0   = преобразование переменных.bat
    %~sn0   = преобразование переменных
    %~sx0   = .batt
    %~snx0  = преобразование переменных.batt
    %~ftza0 = --a------ 12.05.2007 10:59 356 D:\totalcmd\Utilites\Create SFX\архив\п
    реобразование переменных.bat
     
    Вопрос: от куда берется лишняя буква "t" в расширении файла в переменных %~s0 и %~snx0 ???

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 10:56 12-05-2007
    Maza Faka



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

    Цитата:
    Как в приведенном мной коде НЕ использовать эту переменную, а производить "обрезание"

    Как я понял, тебе нужны 4 переменные содержащие "куски" переменной "%%j"?
    Что-то вроде такого:

    Код:
     
    Set tempi1=!tempi:~0,1!
    Set tempi2=!tempi:~2,1!
    Set tempi3=!tempi:~0,4!
    Set tempi4=!tempi:~4!
     

    А лучше обьясни подробней задачу, что конкретно нужно сделать?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 13:07 12-05-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    Я не знаю как "обрезать" переменные цикла FOR, например, %%i. Как ее можно обрезать? Из-за этого и ввел временную переменную !tempi! с которой и делаю все процедуры обрезания. Все у меня в приведенном куске кода работает, но мучает вопрос: что же без временной переменной не обойтись? Нельзя как нибудь обрезать саму переменную цикла (а не временную переменную) и использовать ее куски в данном примере? Вот и весь вопрос . Может мне лучше Вам в аську стукнуть?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 13:17 12-05-2007 | Исправлено: GORA2, 13:20 12-05-2007
    Maza Faka



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

    Цитата:
    Я не знаю как "обрезать" переменные цикла FOR, например, %%i. Как ее можно обрезать?

    Никак, придётся использовать временную переменную. А, что это так критично использовать лишнюю переменную?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:12 12-05-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    Цитата:
    А, что это так критично использовать лишнюю переменную?  
    Нет. Не критично, просто хотел знать - можно или нет. Теперь знаю ,благодаря Вам.
    А по вопросам 3 и 4 не подскажите ни чего?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 14:16 12-05-2007
    Maza Faka



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

    Цитата:
     

    Код:
     
    FOR /L %%j IN (1000,-1,1) DO nircmdc cmdwait 850 beep 50 20 & tasklist | find /i "Name_SFX_Archive">nul || GOTO forsequit  
    :forsequit
     

    После прекрашения процесса Name_SFX_Archive, бипы прекращаются, но в консольном окне вижу быстрое прокручивание оставшейся части цикла. Почему так происходит?

    Просто у тебя не отключен режим "Эхо", потому команды отображаются, хотя реально уже произошёл выход из цикла. Для примера запусти батник вот так:

    Код:
     
    FOR /L %%j IN (1000,-1,1) DO nircmdc cmdwait 850 beep 50 20 & Echo %%j>> list.txt & tasklist | find /i "Name_SFX_Archive">nul || GOTO forsequit
    :forsequit
     

    и просмотри файл "list.txt"
     
    Добавлено:
    GORA2

    Цитата:
    Вопрос: от куда берется лишняя буква "t" в расширении файла в переменных %~s0 и %~snx0 ?

    Действительно интересно, по моему это происходит из-за генерации 8.3 имён пути, а конкретное обьяснение думаю дадут нам Гуру этой ветки

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:30 12-05-2007 | Исправлено: Maza Faka, 15:55 12-05-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

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


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru