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

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Nagual
    А чем мой вариант гибридного файла для паузы не нравился?

    Код:
     
    @set @x=0 /*
    @echo off
     
    :: Пауза в миллисекундах (3000)
    cscript //nologo /e:jscript "%~f0" 3000
     
    exit /b
    */
    WScript.Sleep(WScript.Arguments(0))
     

    Или в секундах

    Код:
     
    @set @x=0 /*
    @echo off
     
    :: Пауза в секундах (3)
    cscript //nologo /e:jscript "%~f0" 3
     
    exit /b
    */
    WScript.Sleep(WScript.Arguments(0)*1000)
     

     
    При желании можно добавить в js часть проверку типа аргумента, но это, имхо, лишнее.  
     
    Добавлено:
    Вот самый минимальный вариант для паузы (с простейшей проверкой):

    Код:
     
    @set @x=0 /*
    @echo off
     
    cscript //nologo /e:jscript "%~f0" 3000
     
    goto:eof */ if(isFinite(WScript.Arguments(0))) WScript.Sleep(WScript.Arguments(0))
     


    Всего записей: 2393 | Зарегистр. 09-02-2003 | Отправлено: 16:03 07-01-2008 | Исправлено: Smitis, 16:31 07-01-2008
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Smitis, не видел этого
     
    SymA
    многовато % у тебя
     
    set file=%systemroot%\example.bat
    set "ASDF=$%date:~-10,2%%date:~-7,2%%date:~-4,4%%time:~-11,2%%time:~-8,2%%time:~-5,2%$"
    echo %ASDF%>%file%

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 16:51 07-01-2008
    Smitis



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

    Цитата:
    Smitis, не видел этого  

    Щас поищу...
    Да, ещё во второй части топика писал
    http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=1800#5
     
    П.С.
    Кстати, в моём варианте не выводится на экран лишний текст.

    Всего записей: 2393 | Зарегистр. 09-02-2003 | Отправлено: 17:09 07-01-2008 | Исправлено: Smitis, 17:11 07-01-2008
    SymA



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual помогло
     
     
    окрываем "Мой Компьютер"; на C:\ например стоит автозапуск; кликаем по нему и в новом окне открывается прописанный в файле autorun.inf батник

    Код:
    explorer \some_folder\  

     
     
     
    вопрос: можно сделать так, чтобы C:\some_folder\ открывалось в том же окне что и "Мой Компьютер" ?

    Всего записей: 56 | Зарегистр. 10-12-2007 | Отправлено: 21:24 07-01-2008
    Smitis



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Оформил для вставки в шапку
     
    Делаем паузу в командном файле стандартными средствами Windows
    (Для NT систем старше NT 4.0 - 2000, XP, 2003, Vista...)
     
    Чаще всего для этих целей предлагают команду ping. Лично мне совершенно не нравится этот способ. Задержка, даваемая командой ping очень неточна. Более того, она очень зависит от настроек сети. У меня был случай, когда из-за файрвола пауза получалась какая угодно, но только не та, что была задана в команде.
     
    Есть вариант с использованием утилит sleep.exe, choice.com, choice.exe. Их можно взять из Resource Kit, а choice.com из Win9x. Но ни одна из них не входит в "стандартную поставку" XP и 2000.
     
    Предлагаемый мной способ - использование WSH, в частности jscript
     
    Вариант 1. Файл sleep.js

    Код:
     
    if(isFinite(WScript.Arguments(0))) WScript.Sleep(WScript.Arguments(0))
     

    Вызов:
    sleep.js ms
    или
    cscript //nologo sleep.js ms
    Где:
    ms - пауза в миллисекундах
    Второй вариант вызова предпочтительнее, т.к. система может быть настроена на вызов wscript вместо cscript и паузы не получится.
     
    Вариант 2. Делаем гибридный файл - основной файл cmd со вставкой jscript
    Минимальный вариант:

    Код:
     
    @set @x=0 /*
    @echo off
     
    cscript //nologo /e:jscript "%~f0" 10000
     
    goto:eof */ if(isFinite(WScript.Arguments(0))) WScript.Sleep(WScript.Arguments(0))
     

     
    То же с коментариями:

    Код:
     
    @set @x=0 /* Это строка должна быть первой. Далее идёт основной текст командного файла
    @echo off
     
    ::
    :: Сдесь что-то делаем до паузы
    ::
     
    :: Сдесь делаем паузу, для примера, 10 секунд (10000 миллисекунд)
    cscript //nologo /e:jscript "%~f0" 10000
     
    ::
    :: Сдесь продолжение текста командного файла
    :: В нём опять могут быть паузы, например, пол секунды
    cscript //nologo /e:jscript "%~f0" 500
    ::
    :: И ещё что-нибудь
    ::
     
    :: Следующая строка должна быть последней
    goto:eof */ if(isFinite(WScript.Arguments(0))) WScript.Sleep(WScript.Arguments(0))
     


    Всего записей: 2393 | Зарегистр. 09-02-2003 | Отправлено: 22:07 07-01-2008 | Исправлено: Smitis, 22:30 07-01-2008
    SPY



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    сижу учусь писать bat файлы
    пытаюсь использовать choice, по человечески не получается никак.. (
    что не выбираю при выборе, 1 или 2 или 3
    всегда запускается "calc.exe"
    в чем причина, подскажите?
    (ниже кусок кода..)

    Код:
     
    set TXT="Delaem vibor Elementa Menu"
    choice /c 123 /M %TXT%
    if errorlevel 1 goto :cl
    if errorlevel 2 goto :np
    if errorlevel 3 goto :mp
    :cl
    C:\Windows\System32\calc.exe
    goto :end
    :np
    C:\Windows\System32\notepad.exe
    goto :end
    :mp
    C:\Windows\System32\Mspaint.exe
    goto :end
    :end
     

     
    Добавлено:
    PS: уже задавал в разделе "глупые вопросы", но все же..  
    Что, действительно никак не возможно перемещаться по экрану cmd в полноэкранном режиме?

    Всего записей: 635 | Зарегистр. 07-11-2003 | Отправлено: 22:18 07-01-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SPY
    Что, действительно никак не возможно перемещаться по экрану cmd в полноэкранном режиме?  
     
     
    В смысле курсор перемещать?
    Где то в шапке есть  "Пакет утилит для организации интерфейса в BAT(CMD)-программах"
     
    Добавлено:
    choice
    У меня xp, такой команды нет

    Всего записей: 2165 | Зарегистр. 17-07-2006 | Отправлено: 22:31 07-01-2008
    Smitis



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

    Цитата:
    что не выбираю при выборе, 1 или 2 или 3  
    всегда запускается "calc.exe"  
    в чем причина, подскажите?  

    Потому что условие if errorlevel 1 это больше или равно. Т.е., надо либо писать условие точно, либо располагать условия в обратном порядке:
    if errorlevel 3 goto :mp  
    if errorlevel 2 goto :np  
    if errorlevel 1 goto :cl  
     
     
    Добавлено:
    king_stiven

    Цитата:
    choice  
    У меня xp, такой команды нет

    Стандартно в ХР такой команды нет

    Всего записей: 2393 | Зарегистр. 09-02-2003 | Отправлено: 22:36 07-01-2008 | Исправлено: Smitis, 22:49 07-01-2008
    SPY



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Действительно в XP нет (сижу сейчас за ноутом с вистой)
     
    Тогда подскажите как организовать краткое меню из выбора соответствующих элементов (нажимая на соотв. клавиши), т.е. Запрос - Выбор - Выполнение..
     
    Добавлено:
    Smitis
    Спасибо..
     
    2ALL:
     в итоге мне все равно под XP необходимо писать..

    Всего записей: 635 | Зарегистр. 07-11-2003 | Отправлено: 22:41 07-01-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SPY
     
    Set /p var="Enter 1 or 2: "
    if %var%==1 calc
    if %var%==2 mspaint
     

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    все хорошо, только пока не закрою приложение, bat файл далее не выполняется..
     
    (сорри, если туплю, но я никак это не исправлю..)

    Всего записей: 635 | Зарегистр. 07-11-2003 | Отправлено: 01:23 08-01-2008
    Elroir



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

    Код:
     
    if %var%==1 start calc
    if %var%==2 start mspaint
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 06:03 08-01-2008
    Katina

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    На сервере есть папка, расшаренная для конкретных пользователей (только они выбраны в Свойствах папки на закладках Sharing и Security).
    Нужно с помощью bat-файла отрубить доступ, сделать архивирование (это я знаю как), а потом снова вернуть доступ, какой он был.
     
     
    Попробывала  
    net share PAPKA /delete  
    net share PAPKA C:\PAPKA
     
    Это так можно убрать и сделать обратно, но вот только мне нужно расшарить только для конкретных пользователей

    Всего записей: 2 | Зарегистр. 10-01-2008 | Отправлено: 10:24 10-01-2008
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    добрый день  
    всех с новым годом
     
    есть вопрос
    есть txt файл с подобными содержимым

    Код:
     
    EmailAddresses : {smtp:V.V.Ivanov@domain.ru, SMTP:Ivanov-VV
                              @domain.ru, smtp:Ivanov-VV@domain.local}
     
    EmailAddresses : {smtp:A.A.Petrov@domain.ru, SMTP:Petrov-AA
                              @domain.ru, smtp:Petrov-AA@domain.local}
     

     
    это выход из консоли exchange2007, формат текста такой что по достижении 111 символов в строке происходит перевод строки и 17 пробелов, видимо для красоты, после перечисления ящиков одного пользователя следут пустая строка и тд
     
    как избавиться от этого перевода и 17 пробелов
     
    далее необходимо избавиться от  
    EmailAddresses : {
    smtp:
    Ivanov-VV@domain.local   - адреса которые содержат @domain.local
    }
     
    а далее заменить ", "  на перевод строки, чтобы получился такой вид
     
    V.V.Ivanov@domain.ru
    Ivanov-VV@domain.ru
     
    A.A.Petrov@domain.ru
    Petrov-AA@domain.ru
     
    и удалить пустые строки между разными адресами, чтобы в каждой строке был один адрес
     
    подкинте пожалуйста идею, чем обработать лучше или примерчик какой
     
    спасибо
     

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 11:54 10-01-2008 | Исправлено: JohnRD, 12:27 10-01-2008
    01MDM



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

    Цитата:
    чтобы получился такой вид
     
    V.V.Ivanov@domain.ru
    Ivanov-VV@domain.ru
     
    A.A.Petrov@domain.ru
    Petrov-AA@domain.ru
     
    и удалить пустые строки между разными адресами, чтобы в каждой строке был один адрес

     

    Код:
     
    @echo off
    for /f "tokens=*" %%a in (log.txt) do (
        if not "%%i"=="" set "line=%%a" && call:line
        )
    goto:eof
    :line
    if not %line:~0,1%==@ set "line1=%line%
    if %line:~0,1%==@ set "string=%line1%%line%"
    if defined string (
        for /f "tokens=3,5 delims=:," %%a in ("%string%") do (
            echo %%a>>result.txt
            echo %%b>>result.txt
        )
        set line1=
        set string=
    )
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:06 10-01-2008
    Katina

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    На сервере есть папка, расшаренная для конкретных пользователей (только они выбраны в Свойствах папки на закладках Sharing и Security).  
    Нужно с помощью bat-файла отрубить доступ, сделать архив всей папки, а потом снова вернуть доступ, какой он был.  
    если файл из каталога занят пользователем, об этом выводится сообщение и требует ответа Y/N. Мне нужно вырубить всех, сделать архив и потом всех присоединить без зависающих сообщений и с сохранением всех файлов, даже тех, которые были заняты. Вот что я сделала:
     
     
    net share TestAMBA /delete    
    "C:\Program Files\WinRAR\rar" a -r -agYYYY-MM-DD_HH-MM-SS -ep1 "C:\BACKUP_AMBA\Zpl_net " "C:\TestAMBA\Raschet\zpl_net\*.*"
    net share TestAMBA=C:\TestAMBA ^
    /grant:gd-usi\Administrator,full ^

    Всего записей: 2 | Зарегистр. 10-01-2008 | Отправлено: 13:50 10-01-2008
    SymA



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    неужели никто не подскажет ?
     
    окрываем "Мой Компьютер"; на C:\ например стоит автозапуск; кликаем по нему и в новом окне открывается прописанный в файле autorun.inf батник  
     

    Код:
    explorer \some_folder\
     
    вопрос: можно сделать так, чтобы C:\some_folder\ открывалось в том же окне что и "Мой Компьютер" ?
     

    Всего записей: 56 | Зарегистр. 10-12-2007 | Отправлено: 18:13 10-01-2008 | Исправлено: SymA, 18:14 10-01-2008
    king_stiven

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

    Всего записей: 2165 | Зарегистр. 17-07-2006 | Отправлено: 19:12 10-01-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SymA
    Наверное нельзя. Нужно использовать какие-нибудь другие скрипты, которые эмулируют нажатие клавиш\мыши. А из батника откроется новое окно.  

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:36 10-01-2008
    king_stiven

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

    Всего записей: 2165 | Зарегистр. 17-07-2006 | Отправлено: 20:58 10-01-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 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.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru