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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RomanF
    Ты привел пример с не из батника (в ком строке), где переменная цикла %i. Для батника надо использовать %%i.
    Т.е:

    Код:
     
    @echo off
    for /f %%i in ('findstr /c:"[key]" file.txt') do echo %%i
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:43 28-02-2008
    JekaRus

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите как решить задачу. Хочу подключится к удаленному компу после его перезагрузки не угадывая момент когда это станет возможным. Для этого использую батник
     
    @echo off
    ING
    Ping -n 1 %1 >Nul
    If ErrorLevel 1 (Goto ING)
    If ErrorLevel 0 (Goto :VSETI)
    :VSETI
    Ping -n 25 %1 >Nul
    start Mstsc.exe /v:%1 /w:1024 /h:768
    :END
     
    25 ответов на пинг это время когда запустится служба для подключения тк она запускается позднее чем пойдет пинг. Проблема в том, что при отправлении в перезагрузку комп еще некоторое время пингуется и если этот батник запустить сразу, то он отсчитает 25 пингов и начнет подключаться. Как сделать что-то вроде цикла, при котором будет происходить соединение только после 25 непрерывных эхо ответов?

    Всего записей: 1046 | Зарегистр. 10-08-2005 | Отправлено: 16:37 28-02-2008
    Elroir



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

    Цитата:
    Как сделать что-то вроде цикла, при котором будет происходить соединение только после 25 непрерывных эхо ответов?


    Код:
     
    @echo off
    setlocal
    :PING
    Ping -n 1 %1 >Nul
    If ErrorLevel 1 (Goto :PING)
    If ErrorLevel 0 (Goto :VSETI)
    :VSETI
    set "count=0"
    for /f %%a in ('Ping -n 25 %1 ^| find /i "TTL="^>Nul') do set /a "count+=1"
    if not %count%==25 goto PING
    start Mstsc.exe /v:%1 /w:1024 /h:768
    :END
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 00:52 29-02-2008
    MammothDEL

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

    Цитата:
    Можно  

    А без доп. утилит?

    Всего записей: 272 | Зарегистр. 22-11-2005 | Отправлено: 03:02 29-02-2008
    JekaRus

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
    Где-то ошибка. Консольное окно висит. Пробелы на конце убирал.

    Всего записей: 1046 | Зарегистр. 10-08-2005 | Отправлено: 06:16 29-02-2008
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JekaRus а так попробовать:
    Код:
    start Mstsc.exe /v:%1 /w:1024 /h:768 & EXIT



    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 09:56 29-02-2008
    Elroir



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

    Цитата:
    Где-то ошибка. Консольное окно висит. Пробелы на конце убирал

    Извини - действительно ошибка. Замени строчку for-a:

    Код:
     
    for /f %%a in ('Ping -n 25 %1 ^| find /i "TTL="') do set /a "count+=1"
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 10:19 29-02-2008
    Igore4eg

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет! Сразу скажу я новичок в этом деле, но гдето в этой теме вычитал про нахождение наиболее нового файла в папке и копировании его в другую с сообщением об этом по почте.
    Попробовал переделать код, который был приведен в этом сообщении-не получилось, ниже сам код.
    Условие моей задачи: есть папка на сетевом ресурсе в которой лежат много файлов с именем sb0822020000.html (имя файла это дата его создания), надо копировать файл с нынешней датой,когда появится новый файл не известно
    итак, создаю батничек brak.bat

    Код:
    @echo off
    setlocal enabledelayedexpansion
    FOR %%a IN (\\asusrv\exchange\edocs\sb*.html) DO (
    set tmp=%%~ta
    set tmp=!tmp:~0,13!
    if "!tmp!" EQU "%DATE%" (call mail.bat)
    )

     
    далее создаю еще батник mail.bat для отправки сообщения на почту
     
    brak.bat по идее должен найти файл равный дате и запустить mail.bat, иначе ни чего не далать
    Но у меня не получается, помогите пожалуйста
    Икак прикрутить копирование этого файла например в папку c:\brak
     
     
     

    Всего записей: 1 | Зарегистр. 29-02-2008 | Отправлено: 17:06 29-02-2008
    wolf0425



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

    Цитата:
    if "!tmp!" EQU "%DATE%" (call mail.bat)  
    сделай echo %date% и посмотри результат - может это подтолкнет размышления?
     
    А вообще, самый свежий файл легче вычислять по
    for /f "delims=" %%a in ('dir /b /o-d \\asusrv\exchange\edocs\*.html') do set "file=%%a" & goto :endoffor
    :endoffor
     
     
    А у меня вот какой вопрос: надо из батника отключить переключатель клавиатуры (стандартный XP), а в соседнем батнике - наоборот, восстановить.
    Кто-нить чего-то умное посоветует?

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 17:52 29-02-2008 | Исправлено: wolf0425, 17:54 29-02-2008
    RomanF



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1) Есть файл. Нужно найти в нём строку "name1=KEY55" и заменить эту строку на другую. По вопросам замены строк нашёл пару способов, один из них более менее подходит (через асм утилиту sbs2.com).
    Есть ли другой способ замены строк?
     
    2) Существут ли команда генерации случайных чисел?
     
    3) Следующей строкой я дописываю из временного файла данные в главный файл
    Код:
    for /f %%j in (file.txt) do @echo %%j>>main.txt

    Но требуется из всего что я перезаписываю заменить 1 строчку, поэтому я её отслеживаю и распечатываю (чтобы в будущем отредактировать), но к сожалению строчка НЕ отслеживается, почему?

    Код:
    for /f %%j in (file.txt) do if %%j EQU "name1=AA66" ( @echo __[%%j]__ ) else ( @echo %%j>>main.txt )

    Всего записей: 67 | Зарегистр. 13-07-2007 | Отправлено: 00:59 01-03-2008 | Исправлено: RomanF, 01:20 01-03-2008
    Elroir



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

    Цитата:
    Есть ли другой способ замены строк?

    Есть - с помощью сторонних утилит, типа gsar.exe или копированьем строчки за строчкой всего файла в новый файл, с заменой нужной строчки - этот способ намного хуже, так как батники очень ограничены в работе с текстом. Так что вариант с sbs2.com, на мой взгляд, тут подходит очень хорошо.
     

    Цитата:
    Существут ли команда генерации случайных чисел?

    Существует переменная среды random, которая выводит случайное число:

    Код:
    echo %random%

     
    Добавлено:

    Цитата:
    if %%j EQU "name1=AA66"

    В файле file.txt, строчка name1=AA66 идет с кавычками?

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

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



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

    Цитата:
    В файле file.txt, строчка name1=AA66 идет с кавычками?

    нет

    Код:
    test=11
    name1=AA66
    test=11
    test2=22

    Всего записей: 67 | Зарегистр. 13-07-2007 | Отправлено: 02:42 01-03-2008
    Astron



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

    Всего записей: 790 | Зарегистр. 28-12-2003 | Отправлено: 02:48 01-03-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RomanF
    Поставь кавычки вокруг %%j в сравнении - if %%j EQU "name1=AA66":

    Код:
    for /f %%j in (file.txt) do if "%%j" EQU "name1=AA66" ( @echo __[%%j]__ ) else ( @echo %%j>>main.txt )
     


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

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго дня.
     
    Подскажите, можно ли стандартными средствами командной оболочки XP определить наличие постоянного маршрута? route print x.x.x.x mask y.y.y.y z.z.z.z в любом случае возвращает errorlevel=0, даже если маршрута не существует через указанный шлюз z.z.z.z

    Всего записей: 474 | Зарегистр. 20-06-2006 | Отправлено: 12:40 02-03-2008
    Astron



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

    Цитата:
    Господа, если я хочу сделать так: щелкая правой кнопкой по файлу или папке с именем, например, 'Microsoft Word Addon v3.31.28' в контекстном меню или как-то иначе, чтобы получить переименование файла или папки в вид 'Microsoft_Word_Addon_v3.31.28', что мне нужно сделать? Посоветуйте софтину...

     
    Elroir

    Цитата:
    Как один из вариантов - создаешь батник следующего содержания:  
     
    Код:  
    @echo off  
    setlocal  
    set "name=%~nx1"  
    set "name=%name: =_%"  
    ren "%~1" "%name%"  
     
    называешь его replace_spaces.cmd и кладешь в Windows\System32  директорию.  
    После этого, создаешь .reg файл такого содержания:  
     
    Код:  
    Windows Registry Editor Version 5.00  
     
    [HKEY_CLASSES_ROOT\*\shell\Replace spaces with underscores]  
     
    [HKEY_CLASSES_ROOT\*\shell\Replace spaces with underscores\command]  
    @="replace_spaces.cmd \"%L\""  
     
    [HKEY_CLASSES_ROOT\Folder\shell\Replace spaces with underscores]  
     
    [HKEY_CLASSES_ROOT\Folder\shell\Replace spaces with underscores\command]  
    @="replace_spaces.cmd \"%L\""  
     
    и импортируешь его в реестр.

     
    Поторопился на радостях - что-то у меня данный способ способ не работает. Контекстного меню не появляется...

    Всего записей: 790 | Зарегистр. 28-12-2003 | Отправлено: 15:06 02-03-2008
    Elroir



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

    Цитата:
    Поторопился на радостях - что-то у меня данный способ способ не работает. Контекстного меню не появляется...

    Только что проверил еще раз - скопировал текст .reg файла из форума, создал новый .reg файл, внес в него этот текст, сохранил. Импортировал его в реестр, кликнув по нему 2 раза мышкой. Меню появилось и на файлах и на директориях.
    Проверь, что у тебя есть права на редактирование реестра.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 15:25 02-03-2008
    474837

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, есть ли в windows аналог линуксовой команды time? Виндовая time делает совсем не то, что мне надо. Мне нужно получить время, затраченное для выполнения определеной команды. То есть, если мне в линуксе надо узнать сколько времени займет копирование файла file1 я могу написать что то типа:  
    time cp file1 subfolder/file1
    и получить на выходе время в секундах.
    Вопрос: как это же сделать в windows?

    Всего записей: 3 | Зарегистр. 16-09-2007 | Отправлено: 00:33 03-03-2008
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    474837
    command_time.cmd
    Код:
    @echo off
    chcp 1251>nul
     
    title
    Определение времени выполнения команды...
    set "ctime1=%time:~0,-3%"
    set /a "sec1=36000*%time:~0,1%+3600*%time:~1,1%+600*%time:~3,1%+60*%time:~4,1%+10*%time:~6,1%+%time:~7,1%"
    echo Сейчас: %ctime1%
     
    :: Команда
    ping loopback
     
    :: Расчёт времени команды
    set "ctime2=%time:~0,-3%"
    set /a "sec2=36000*%time:~0,1%+3600*%time:~1,1%+600*%time:~3,1%+60*%time:~4,1%+10*%time:~6,1%+%time:~7,1%"
    set /a "math=%sec2%-%sec1%"
    echo Сейчас: %ctime2%. Время выполнения команды: %sec2%-%sec1%=%math% секунд.
     
    pause

    если надо, на основе кода можешь сделать расчёт времени выполнения команды в милисекундах

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 00:57 03-03-2008 | Исправлено: Nagual, 01:06 03-03-2008
    realister12



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    проблема, поднятая Astron актуальна и для меня. Сделал всё по инструкции, меню появилось, но вот батник переименовывать папки не хочет. То есть запускается из меню replace_spaces.cmd, но увы не переименновывает. The system cannot find the file specified. Пробелы убрал

    Всего записей: 507 | Зарегистр. 10-03-2005 | Отправлено: 01:10 03-03-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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru