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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 104 105 106 107 108 109 110 111 112 113 114 115 116 117

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    01MDM



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

    Цитата:
    что то с if не правильно

    У меня тоже как-то было криво, попробуй так: if "%xp%"=="yes " (...
    Пробел после yes. И кавычки в условии сравнения.
     
    Или вообще без записи в файл, просто его наличие, проверь:

    Код:
     
    psexec %1 -s cmd /c "ver | findstr "XP" 1>nul && cd.>file.txt"
    if exist file.txt (
         echo %1 is XP
         del file.txt  
    ) else (
         echo %1 is 2000
    )
     

     
    PS. До вечера.  

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:56 27-08-2009 | Исправлено: 01MDM, 10:58 27-08-2009
    PetrK



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    задача отслеживать убегание времени на компьютере относительно NTP-сервера в локальной сети. написал bat-файл
     

    Код:
    :start
    rem пишем в файл время проверки разбега
    echo w32tm /monitor /computers:192.168.0.1 started at %DATE% %TIME% >> w32tm_%DATE%.log
    rem проверяем разбег
    w32tm /monitor /computers:192.168.0.1 >> w32tm_%DATE%.log
    rem регулируем задержку до следующей проверки
    ping -n 10 192.168.0.1 >> server_boot_%DATE%.log
    rem идем в начало
    goto start
     

    что плохого в такой конструкции?
     
    в файл сваливается следующее:

    Код:
     
    w32tm /monitor /computers:192.168.0.1 started at 2009-08-27 11:38:12,98  
                                                                           
    Analyzing 192.168.0.1 (1 of 1)...
                                                                           
    resolving referer 83.229.210.18 (1 of 1)...
                                                                           
    192.168.0.1 [192.168.0.1]:
        ICMP: 0ms delay.
        NTP: -0.0668468s offset from local clock
            RefID: (unknown) [83.229.210.18]
    w32tm /monitor /computers:192.168.0.1 started at 2009-08-27 11:38:26,58  
                                                                           
    Analyzing 192.168.0.1 (1 of 1)...
                                                                           
    resolving referer 83.229.210.18 (1 of 1)...
                                                                           
    192.168.0.1 [192.168.0.1]:
        ICMP: 0ms delay.
        NTP: -0.0615968s offset from local clock
            RefID: (unknown) [83.229.210.18]
     

    можно ли сделать что бы в файле было так?

    Код:
     
    w32tm /monitor /computers:192.168.0.1 started at 2009-08-27 11:38:12,98  
    NTP: -0.0668468s offset from local clock
    w32tm /monitor /computers:192.168.0.1 started at 2009-08-27 11:38:26,58
    NTP: -0.0615968s offset from local clock
     

    Всего записей: 134 | Зарегистр. 27-05-2006 | Отправлено: 11:45 27-08-2009 | Исправлено: PetrK, 11:48 27-08-2009
    tolyn77



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    всё спасибо нашел пару ошибок вот так вот у меня работает

    Код:
     
    psexec %1 -s 1>file.txt cmd /c "ver | findstr "XP" 1>nul && echo yes|| echo not"
     
    set /p xp=<file.txt
    if "%xp%"=="yes" ( echo %1 is XP ) else ( echo %1 is 2000 )
    del file.txt
     

    Всего записей: 1501 | Зарегистр. 07-09-2004 | Отправлено: 11:47 27-08-2009 | Исправлено: tolyn77, 11:48 27-08-2009
    DDNMazafaka

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть задача следующего характера: необходим скрипт который будет давать пользователю домена Work права на запись и чтение в определенную папку на его локальном ПК. Алгоритм примерно такой:
    1. Пользователь зашел в домен Work
    2. Считывается логин под которым он зашел.
    3. Проверяется версия ОС, если видновс 98 - завершить скрипт, если виндовс 2000/ХР - продолжить выполнение
    4. Проверить существует ли на HDD папка c:\program files\test. Если существует то пункт 5, если нет - завершить.  
    5. От имени администратора(естественно с указанием админского пароля который как-бы видеть юзер не должен) дать данному пользователю (считанному в п.1.) права на чтение/запись в папку test по вышеуказанному пути.
    6. Завершить автоматически
     
    Заранее благодарю за помошь. Созданный батник хочу навязать через доменную политику.
    PS: Может это просто можно сделать через доменную политику разрешив всем юзерам доступ к конкретной папке?

    Всего записей: 2 | Зарегистр. 27-08-2009 | Отправлено: 12:04 27-08-2009
    aisboard

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, как узнать в батнике тип ОС (сервер или раб.станция)?
    Переменная OS и там и там дает Windows_NT, команда VER дает версию, но чтоб отличить раб. станцию (XP,Vista,Win7) от сервера (2003,2008) придется перебирать все варианты написания версий?
    Есть более простой способ?

    Всего записей: 48 | Зарегистр. 18-02-2004 | Отправлено: 12:05 27-08-2009
    oshizelly



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Цитата:
    Вот версия UnLocker без инсталлятора.  
    Для работы необходимо выполнить Register.bat, при этом unlocker , будет встроен в контекстное меню проводника.

    Большое спасибо, буду проверять.
    Это, как я понимаю, последняя версия 1.8.7 ?

    Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 12:06 27-08-2009
    aisboard

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    to DDNMazafaka
     
    1. Молодец
    2. переменная окружения USERNAME
    3. проверяем переменную окружения OS , в случае 2000/ХР она = Windows_NT
    4. if exist c:\program files\test   ... бла-бла-бла
    5. runas .... cacls ...   - примерно так, параметры команд посмотри сам
    6. сам завершится
     
     
    Ну я бы делал примерно так, думаю скрипт сам напишешь?

    Всего записей: 48 | Зарегистр. 18-02-2004 | Отправлено: 12:15 27-08-2009
    tolyn77



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

    Код:
     
    for /f %%i in (complist) do (
    set "comp=%%i"
    rem for /f "tokens=2* delims=: " %%i in ('sc %comp% query state^= all ^| findstr "SERVICE_NAME"') do (
    for /f "tokens=2* delims=: " %%i in ('sc %comp% query Messenger ^| findstr "SERVICE_NAME"') do (
        set "name=%%i"
        for /f "tokens=3* delims=: " %%k in ('sc %comp% qc %%i ^| findstr "START_TYPE"') do (
            set "starttype=%%k"
        )
        for /f "tokens=3* delims=: " %%k in ('sc %comp% query %%i ^| findstr "STATE"') do (
            set "statetype=%%k"
        )
        call:report
    )
    goto:eof
     
    :report
    echo %comp% %name% - %starttype% %statetype%
    )
     

    должен по списку компов пройтись а он на первом же останавливается
    подскажите где ошибка

    Всего записей: 1501 | Зарегистр. 07-09-2004 | Отправлено: 12:20 27-08-2009
    DDNMazafaka

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

    Цитата:
    to DDNMazafaka  
     
    1. Молодец  
    2. переменная окружения USERNAME  
    3. проверяем переменную окружения OS , в случае 2000/ХР она = Windows_NT  
    4. if exist c:\program files\test   ... бла-бла-бла  
    5. runas .... cacls ...   - примерно так, параметры команд посмотри сам  
    6. сам завершится  
     
     
    Ну я бы делал примерно так, думаю скрипт сам напишешь?  

     
    Ну если бы я помнил синтаксис, то тут бы вопрос не задавал

    Всего записей: 2 | Зарегистр. 27-08-2009 | Отправлено: 12:58 27-08-2009
    NIKZZZZ



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

    Цитата:
    последняя версия 1.8.7 ?

    Да.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 18:19 27-08-2009
    postullat

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрий день. Меня интересует следующая задача.
    Есть много изображений. Их всех нужно перевернуть против часовой стрелки і по 5 штук загнать у вордовские документи, которие нужно перед тем создать в нужном количестве. Можно ли на батнике такое зделать? Помогите плиз. Я чото пробивал но не работает. А пробивал вот так:
     
     
    echo Ctrl D | j.jpg
    rem ето типа оно должно перевернуть картинку
    copy d.doc j.jpg
    rem ето оно должно копировать картинку у ворд. воно и копирует токо у ворде не отображает ее

    Всего записей: 1 | Зарегистр. 27-08-2009 | Отправлено: 20:26 27-08-2009
    fd1136

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    oshizelly
    Ты проверил действие hidcon?
     
    Добавлено:

    Цитата:
    echo Ctrl D | j.jpg
    rem ето типа оно должно перевернуть картинку
    copy d.doc j.jpg
    rem ето оно должно копировать картинку у ворд. воно и копирует токо у ворде не отображает ее

    Это бред ....

    Всего записей: 49 | Зарегистр. 09-11-2006 | Отправлено: 22:15 27-08-2009
    niko7

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

    Всего записей: 2429 | Зарегистр. 23-09-2004 | Отправлено: 09:09 28-08-2009
    Tathree

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите , есть задача - не регулярная  остановка и старт сервиса (рендер к 3Д пакету) . Возможно реализовать через .bat ?

    Всего записей: 2 | Зарегистр. 28-08-2009 | Отправлено: 11:29 28-08-2009
    fd1136

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

    Цитата:
    надо из всех этих папок удалить *.ini . Подскажите, как это сделать на bat?

     

    Код:
     
    del /F /Q /S *.ini
    или
    erase  /F /Q /S *.ini

    удаляет все файлы .ini из текущей папки и глубже.  
     
    Добавлено:
    Tathree

    Цитата:
    не регулярная  остановка и старт сервиса (рендер к 3Д пакету)

    Это служба? Имя у нее есть?
    Если есть, то

    Код:
     
    net stop <имя_службы>
    или  
    net pause <имя_службы>

    в зависимости от задачи.
    А потом  

    Код:
     
    net start <имя_службы>

    Всего записей: 49 | Зарегистр. 09-11-2006 | Отправлено: 11:32 28-08-2009 | Исправлено: fd1136, 11:38 28-08-2009
    PetrK



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

    Код:
    w32tm /stripchart /computer:192.168.0.1 /period:3 /dataonly

     
     
    Добавлено:
    каталог содержит файлы вида
    20090828.speeddial
    20090827.speeddial
    ...
    20090321.speeddial
    20090219.speeddial
     
    как определить самый последний и скопировать его в другую папку?

    Всего записей: 134 | Зарегистр. 27-05-2006 | Отправлено: 11:45 28-08-2009 | Исправлено: PetrK, 11:46 28-08-2009
    Tathree

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    fd1136
    Спасибо , получилось .  

    Всего записей: 2 | Зарегистр. 28-08-2009 | Отправлено: 13:13 28-08-2009
    Alukardd



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    впринципе все так и было в режиме отладки, но для работы все привел в должный вид...  
    и pause было и @echo off было в коменте... call работает вроде как надо, если вводить целые числа или буквы... если же ввести число с плавающей точкой тогда он от него воспримет только целую часть... а если с ,  то он просто бесследно исчезает!!!  
    setlocal добавил, exit заменил на pause  
    вот она суть дела-то!  
     
    вопрос о причине вылета при отсутсвии 'call' и наличии вложенных 'if' по прежнему очень интересует... от чего это зависит? блок выглядит так без call

    Код:
     
    if %when%==1 (  
        set /p a=Введите время таймера в минутах:  
        set /a buf=a*1  
        if %a% NEQ 0 (  
                 if %buf%==0 (  
                         goto err  
                 ) else (  
                         set /a b=a*60  
                         goto time  
                 )  
         ) else (  
                 if not defined b set b=0  
                 goto time  
         )  
    )
     

    Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 13:56 28-08-2009
    RcT

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть файл со списком строк. Этот файл подается на вход батнику который для каждой строки этого файла выполняет определенную команду. Как вывести на экран процесс выполнения работы срипта? Например чтобы были сообщения типа:
    Код:
    Выполнено (1 из 100)
    Выполнено (1 из 100)
    Выполнено (2 из 100)
    Выполнено (3 из 100)
    .....
    Выполнено (100 из 100)
     

    или что-то наподобие прогресс-бара и процент выполнения.
    Количество строк в файле посчитали, а дальше как?
    При обработке  

    Код:
     
    set /a i=0
    for /F in (%1) do (
    set /a i+=1
    echo %i%
    )
     

    выводится всегда 0.

    Всего записей: 4 | Зарегистр. 28-08-2009 | Отправлено: 15:43 28-08-2009 | Исправлено: RcT, 15:45 28-08-2009
    anachrom

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Как можно одновременно вывести результаты и на монитор и в файл.
    Например:
    ping 192.168.0.1
    показывает результат, а
    ping 192.168.0.1 >> fail.txt
    записывает результат в fail.txt.
    А вот одновременно и то и другое? Дублирование команды не подходит (т.к. простым пингом дело не кончается, и время работы батника увеличивается вдвое).

    Всего записей: 179 | Зарегистр. 18-11-2008 | Отправлено: 16:15 28-08-2009
       

    Страницы: 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 104 105 106 107 108 109 110 111 112 113 114 115 116 117

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru