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

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka, неудобно если будем менять путь надо его править во всём файле
     
    такой вопрос: а можно как нить запуск файла на переменную на запуск файла?
    чо нить типа:
    file = Start /HIGH "" "C:\ПУТЬ\hlds.exe"

    Всего записей: 533 | Зарегистр. 13-03-2006 | Отправлено: 16:25 14-04-2007
    NIKZZZZ



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

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

    Ответить на вопрос, можно например из файла
    hlds.exe < no.txt (текстовой файл со словом No)
    или перенаправив вывод Команды Echo No
    Echo No| hlds.exe
     
    будут ли работать эти команды с hlds.exe, сказать сложно.
    Но  taskkill /f должна убивать процесс независимо от ответа.
    По поводу приоритета-

    Цитата:
    C:
    cd "C:\ПУТЬ к файлу"
    start /HIGH "hlds.exe"

     
    Без Start это бесполезно.
    Поробуй использовать вместо этого hstart с соответствующим ключом.
     
     

    Цитата:
    чо нить типа:
    file = Start /HIGH "" "C:\ПУТЬ\hlds.exe"
     

     
    set MeProga=C:\ПУТЬ\hlds.exe
    Start /HIGH "" "%MeProga%"
     
    или
    Set MePath=C:\ПУТЬ
    Start /HIGH "" "%MePath%\hlds.exe"
     
    или
    Set MeProga = Start /HIGH "" "C:\ПУТЬ\hlds.exe"
    %MeProga%

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 16:35 14-04-2007 | Исправлено: NIKZZZZ, 16:53 14-04-2007
    InSe0F



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

    Цитата:
    будут ли работать эти команды с hlds.exe, сказать сложно.  

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

    Код:
    echo wscript.sleep wscript.arguments(0)>%Temp%/sleep.vbs
    C:
    cd "C:\ПУТЬ"
    Set _START=start /HIGH "" "hlds.exe"
    %_START%
    :_1
    tasklist | find /i "hlds.exe">nul
    if not %errorlevel%==0 %_START%
    cscript sleep.vbs 500 > nul
    goto _1

    т.к. у меня после "hlds.exe" идут аргументы, поэтому чёт глючило, тем более так удобнее будет править путь и всё. этот файл там по любому должен лежать
     
    только осталось одна главная проблемка, в общем скрипт почему-то
    очень быстро работает, ну я про
    Код:
    cscript sleep.vbs 500 > nul

    какие аргументы не пробовал... даже 5000000000 и 0,0000000005 всё равно выполняется с одинаковой(на глаз) скоростью и очень быстро!, что загружает процессор на 15-20%, вот это совсем не дело.. особенно при моих нагрузках на машину
     
    может кто посоветует менее ресурсоёмкое решение паузы?
    ЗЫ: пинговать себя не хочу, боюсь это может отразиться на пинге игровых сервов и апаче  

    Всего записей: 533 | Зарегистр. 13-03-2006 | Отправлено: 17:15 14-04-2007
    NIKZZZZ



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

    Цитата:
    может кто посоветует менее ресурсоёмкое решение паузы?  

     
    100 sec. 0% загрузки.

    Код:
    echo wscript.sleep 100000>"%Temp%/sleep.vbs"
    cscript "%Temp%\sleep.vbs"> nul
     

     
    Посмотри, у тебя ошибка в пути

    Код:
    echo wscript.sleep wscript.arguments(0)>"%Temp%/sleep.vbs"
    C:
    cd "C:\ПУТЬ"
    Set _START=start /HIGH "" "hlds.exe"
    %_START%
    :_1
    tasklist | find /i "hlds.exe">nul
    if not %errorlevel%==0 %_START%
    cscript "%Temp%/sleep.vbs" 100000 > nul
    goto _1

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 18:30 14-04-2007
    Maza Faka



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

    Цитата:
    структура следующая:  
    D:\temp\serv1\folder1\11.04.27   - очистить  
    D:\temp\serv1\folder2\11.04.27 - очистить  
    D:\temp\serv1\.....\11.04.27 - очистить  
    D:\temp\serv2\......\11.04.27 - очистить  
    D:\temp\fujik\........\11.04.27 - пропустить

    А не проще ли тогда вот так:

    Код:
     
    @Echo off  
    For /R D:\Temp %%a in (.) do (  
    If /i  not "%%~nxa"=="fujik" rd /s /q %%a)
     

     
    Добавлено:
    InSe0F
    А не проще ли для паузы использовать Виндовую утилиту sleep.exe?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:46 14-04-2007 | Исправлено: Maza Faka, 18:56 14-04-2007
    Elroir



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

    Цитата:
    А не проще ли тогда вот так

    Ты же так сотрешь вообще все папки отличные от "fujik"
     
    testir

    Цитата:
    вот это то что нужно!!! )

    Рад, что наконец заработало

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



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ещё такой вопросик, как учитывать выходные дни при расчете даты в примере приведенном  тут ?http://forum.ru-board.com/topic.cgi?forum=62&bm=1&topic=9040&start=647&limit=1
    Возможно ли вообще их учитывать ?

    Всего записей: 15 | Зарегистр. 14-02-2007 | Отправлено: 20:32 14-04-2007 | Исправлено: testir, 20:33 14-04-2007
    Elroir



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

    Цитата:
    Ещё такой вопросик, как учитывать выходные дни при расчете даты в примере приведенном  тут ?

    Насколько  я понимаю - встроенными средствами командной строки это сделать очень сложно (можно, при определенном формате системной даты). Посмотри в шапке пример получения предыдущего дня с помощью VBScript.
    Если добавить туда строчку "wscript.echo WeekDayName(weekday(date))", то будет выдаваться день недели. Таким образом можно проверять выходные.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 20:44 14-04-2007 | Исправлено: Elroir, 21:06 14-04-2007
    InSe0F



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Elroir
    Maza Faka
    ВСЕМ ОГРОМНЕЙШЕЕ ПАСИБА :)
     
    вот что в итоге получилося, может кому пригодится. ;)
    file - start.bat

    Код:
    copy c:\windows\system32\cmd.exe "%temp%\cmd2.exe"
    hstart /NOWINDOW /IDLE "%Temp%\cmd2.exe /c "script.bat"

    file - script.bat

    Код:
     
    echo wscript.sleep wscript.arguments(0)>%Temp%\sleep.vbs
    C:
    cd "C:\ПУТЬ"
    Set _START=start /HIGH "" "hlds.exe"
    %_START%
    :_1
    cscript "%Temp%\sleep.vbs" 600000 > nul
    tasklist | find /i "hlds.exe">nul
    if not %errorlevel%==0 %CS_START%
    goto _1

    file - exit.bat

    Код:
     
    taskkill /f /im cmd2.exe
    taskkill /f /im hlds.exe
    del /q "%Temp%\cmd2.exe"
    del /q "%Temp%\sleep.vbs"

     
    и последний вопросик про потоки остался не решённым, может кто знает? - полазил по справкам нигде не нашёл...

    Всего записей: 533 | Зарегистр. 13-03-2006 | Отправлено: 20:50 14-04-2007
    AZJIO



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

    Цитата:
    RMDIR /f /Q "%SystemRoot%\Temp\*"
    RMDIR /f /Q "%UserProfile%\Local Settings\Temp\*"
    RMDIR /f /Q "%UserProfile%\Local Settings\Temporary Internet Files\*"

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 21:34 14-04-2007
    Elroir



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

    Код:
     
    pushd
    cd /d "%SystemRoot%\Temp"
    rd /s /q "%SystemRoot%\Temp">nul  2>nul
    cd /d "%UserProfile%\Local Settings\Temp"
    rd /s /q "%UserProfile%\Local Settings\Temp">nul 2>nul
    cd /d "%UserProfile%\Local Settings\Temporary Internet Files"
    rd /s /q "%UserProfile%\Local Settings\Temporary Internet Files">nul 2>nul
    popd
     

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

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

    Цитата:
    Если добавить туда строчку "wscript.echo WeekDayName(weekday(date))", то будет выдаваться день недели. Таким образом можно проверять выходные.

    Кстати, в vbscript есть удобная фича для использования в батниках - можно при выходе из скрипта, в зависимости от условий задать произвольное число(errorlevel).  
    WScript.Quit(число). То есть вот такой test.vbs

    Код:
    If WeekDay(Date)=vbSaturday or WeekDay(Date)=vbSunday then WScript.Quit (666)
    будет в выходные заканчивать свою работу с кодом 666. Вместо vbSaturday можно писать 7, а вместо vbSunday можно писать 1, воскресенье по умолчанию считается первым днем недели, это всех устраивает .  
    Можно в батниках пользоваться по усмотрению, типа:

    Код:
     
    @ECHO OFF
    CHCP 1251 >NUL
    ECHO If WeekDay(Date)=7 or WeekDay(Date)=1 then WScript.Quit (666)>"%TEMP%\tmp.vbs"
    CSCRIPT //Nologo "%TEMP%\tmp.vbs"
    IF ERRORLEVEL 666 (
      ECHO Будем клубицца, будем веселицца
      REM Тут EXIT /B
    ) ELSE (
      ECHO Работу на работе работаем
      REM Делаем что-нить полезное
    )
    PAUSE
     


    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 00:30 15-04-2007 | Исправлено: igor_andreev, 00:38 15-04-2007
    Elroir



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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 00:34 15-04-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Факт, я люблю подкрадываться к топику про батники с предложениями поюзать vbscript

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 00:51 15-04-2007
    Smitis



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Microsoft выпустила обновлённый Support Tools для Windows 2003 с установленным SP2
    http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90
    Небольшой наборчик утилит, в том числе работающих из командной строки. У некоторых обновилась версия, у некоторых только дата. В общем, может кто найдёт в нём для себя что-нибудь нужное.
    Примечателен один момент - в архиве 4 командный файла. Три из них - те самые гибридные (CMD+PERL).

    ----------
    Разум когда-нибудь победит

    Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 01:20 15-04-2007
    Maza Faka



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

    Цитата:
    структура следующая:  
    D:\temp\serv1\folder1\11.04.27   - очистить  
    D:\temp\serv1\folder2\11.04.27 - очистить  
    D:\temp\serv1\.....\11.04.27 - очистить  
    D:\temp\serv2\......\11.04.27 - очистить  
    D:\temp\fujik\........\11.04.27 - пропустить

     
    Не могу успокоиться! Вот так ещё проще:

    Код:
     
    For /F %%a in ('Dir /b /s D:\Temp ^| Find /i /v "fujik"') do (
    If /i "%%~nxa"=="11.04.27" rd /s /q %%a>NUL)
     

     
    P.S. testir Надеюсь, будешь изредка пользоваться моим батником ...Не в обиду Elroir-у

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:00 15-04-2007 | Исправлено: Maza Faka, 11:06 15-04-2007
    NIKZZZZ



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

    Цитата:
    я люблю подкрадываться к топику про батники с предложениями поюзать vbscript

    Тогда маленький вопросик, как правильно и красиво передать передать VBS скрипту значение значение переменной, содержащей "плохие" символы  - ."<> b и т.д. не использую временный файл?  

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 12:01 15-04-2007
    Elroir



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

    Цитата:
    Не могу успокоиться!  Вот так ещё проще

    Тогда добавь к dir-у "/ad", а то если он (батник) найдет файл с именем 11.04.27, он его попытается удалить командой rd

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 12:09 15-04-2007 | Исправлено: Elroir, 12:10 15-04-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    И с учетом добавки Elroir и моим нежеланием пользоваться в этом случае IF можно так
     
    for /f "tokens=*" %%a in ('dir /a:d /b /s D:\Temp ^| find /i /v "fujik" ^| find "11.04.27"') do rd /s /q "%%a"
     
    NIKZZZZ

    Цитата:
    правильно и красиво передать передать VBS скрипту значение значение переменной, содержащей "плохие" символы  - ."<> b и т.д. не использую временный файл?  

    Ты про что? Пример приведи.
     
     
     

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 13:07 15-04-2007 | Исправлено: igor_andreev, 13:09 15-04-2007
    NIKZZZZ



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

    Цитата:
    Пример приведи.

    Есть строка, прочитанная, например из HTML файла , и присвоенная переменной . В строке используются символы <>|",  и т.п. Передать из батника такую строку vbs скрипту для обработки , как параметр командной строки нельзя.  Как это можно сделать, не создавая временный файл и не используя сам HTML файл (в принципе VBS скрипту можно передать только номер строки и имя  файла - но это частное решениe)?  
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 15:30 15-04-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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru