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

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

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

vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Nagual



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

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

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

  • Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:28 19-03-2008 | Исправлено: Nagual, 01:02 24-09-2008
    01MDM



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

    Код:
     
    @echo off
    for /l %%i in (1,1,255) do (
       ping -n 1 192.168.1.%%i | findstr "TTL=" 1>nul && (
          echo 192.168.1.%%i is UP
          ) || (
          echo 192.168.1.%%i is DOWN
          )
    )
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:41 28-10-2008
    dimpase

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

    Цитата:
    Приве6т люди!!Как делишки?  
    Скажмите как сделать ввод пользователя по маске.  
    Например надо чтобы пользователь ввел телефон в таком формате х ххх ххх ххх ххх  
    или 8(код)ххх ххх ххх  
    Если не подходит то переходим к ошибке и возвращаемся к вводу.  
    Заранее спасибо.


    Всего записей: 130 | Зарегистр. 29-09-2008 | Отправлено: 09:52 29-10-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dimpase
    Повторять то вопрос зачем на каждой странице? Регулярное выражение пиши для grep  
    Для X XXX XXX XX XX(8 921 725 00 00)

    Код:
     
    @echo off
    :loop
    set /p "phone_number=Write here:"
    cls
    echo %phone_number% | grep -q -E "[0-9]{1} [0-9]{3} [0-9]{3} [0-9]{2} [0-9]{2}" || goto :loop
    echo %phone_number%
    pause
     


    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 10:29 29-10-2008
    dimpase

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreevПасибочки большое.Вы просто не представляете как мне помогли.Мне некогда было просто искать.

    Всего записей: 130 | Зарегистр. 29-09-2008 | Отправлено: 14:36 29-10-2008
    godemode

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.
     
    У меня небольшая проьблема.Веду backup своей базы данных.ежедневный
     
    "%PROGRAMFILES%\WinRar\rar" a -r c:\Bakup_baza\ -¤Ґаа ©вЁ-Ј.rar -ag+DD-MMM-YYYY-HH-MM -m5 -dh -t -idc "c:\Bakup_baza\ -¤Ґаа ©вЁ-Ј.mdb"
     
    т.е. получается 29-Oct-2008-14-39андеррайтинг.rar  
     
    с помощью нее создаю архив с датой и временем.Проблема в том что чистить его в ручную очень не удобно.
     
    Возможно ли создание батника для удаления всех архивов в именах которых стоит дата отстающая от сегодняшней на 10 дней?  
     
    Заранее спасибо.

    Всего записей: 1 | Зарегистр. 29-10-2008 | Отправлено: 15:10 29-10-2008 | Исправлено: godemode, 16:09 29-10-2008
    monsoon



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В теме встречаются примеры с random для конкретного случая, например,  %random% %% 4   -  генерация чисел от 0 до 3
    Вопрос к гуру:
    можно сделать использование random более универсальным, заданием диапазона для генерируемых значений или хотя бы max значения?
    Дополнительно, при вызове в цикле добавив возможность исключить повторяющиеся значения.

    Всего записей: 1252 | Зарегистр. 30-01-2003 | Отправлено: 18:24 29-10-2008
    U235

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    monsoon
    Вот пример арифметических операций, с помощью которых можно генерировать случайные числа  в заданом диапазоне и присваивать их  переменной var, см. справку по set:

    Код:
    set /a var=2-%random%/6000

    Всего записей: 725 | Зарегистр. 14-12-2005 | Отправлено: 18:56 29-10-2008
    sheko1k

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

    Цитата:
    Возможно ли создание батника для удаления всех архивов в именах которых стоит дата отстающая от сегодняшней на 10 дней?  

     
    Таже проблема.Бился об нее недели 2 результата никакого(( Меж тем для backup па штука очень полезная....

    Всего записей: 1 | Зарегистр. 29-10-2008 | Отправлено: 20:19 29-10-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    godemode
    sheko1k
    Угадайте, вам первым в голову пришла такая гениальная идея - удалять старые бэкапы?  Читайте  несколько частей тем "Задачи на bat-файлах" и "Командная строка, батники, сценарии", ссылки в шапке.  Найдете варианты с dir, forfiles, vbscript, раз *надцать уже спрашивали. Можно просто у гугля тупо спросить "delete files older then + batch", на первой же странице ответы будут и не надо две недели бицца...
    Добавлено
    Хренасе, я англичанин, однозначно... Правильно то "older than"... Но гугль даже с грамматическими ошибками находит примеры батников

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 21:02 29-10-2008 | Исправлено: igor_andreev, 02:15 30-10-2008
    Shadowland

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2Nagual
    rar/? посмотрел...  
    понятнее не стало
     
    напомню - требовалось :

    Цитата:
    в папке Svalka есть куча *.rar файлов и их описаний *.rar.txt  
    в некторых *.rar файлах есть папка "заработок в интернете" или "ЗАРАБАТЫВАЙ с НАМИ!!!"  или "+" или "Как заработать в интернете"  
    или  
    файлы "GOLD-аккаунт на Depositfiles.doc" и "03.04.08.jpg" или "Прочитайте меня!!!.doc" и "Thumbs.db"  
    требуется (если они есть) удалить все эти пакпки и файлы из архивов оставив остальное содержимое


    Всего записей: 451 | Зарегистр. 14-11-2005 | Отправлено: 00:50 30-10-2008
    Hirurg111



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здесь представлен код который я нашел здечь на форуме. Он переименовывает файл на дату создания файла и в конц добавляет номер (чтобы файлы не совпадали). Никак не могу придумать как дату создания файла добавлять к существующему имени если точное имя неизвестно. а расширение константа.  
    И каким образом сделать так чтобы после переименования файл копировался в папку по дням (т.е. год\месяц\день не создавая папки в ручную и не прописывая пути в файле)  
     
     
     
     
     
    @Echo Off  
     
    Set fExt=dat  
    Set fCount=0  
    For %%a In (*.%fExt%) Do @Call :Rena %%a %%~ta  
    GoTo :EOF  
       
    :Rena    
    Set /a fCount=%fCount%+1  
    Set fName=%1  
    Set fDate=%2  
    Set fDay=%fDate:~0,2%  
    Set fMonth=%fDate:~3,2%  
    Set fYear=%fDate:~6,4%  
    Set fNewName=%fYear%%fMonth%%fDay%%fCount%  
    If Exist %fNewName%.%fExt% Set fNewName=%fNewName%%fCount%  
    Ren %fName% %fNewName%.%fExt%  
    GoTo :EOF  

    Всего записей: 2 | Зарегистр. 29-10-2008 | Отправлено: 10:21 30-10-2008
    Joolz

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужна помосч
    Нужно изменить параметры IE, чтобы обращения к серверу 192.168.10.10 не проходило через прокси, фактически нужно изменить запись в реестре, дописав в вонец парамтра этот адрес. Но на втором цикле что-то все вылетает. Т.Е. если oldval=%%d - все нормально, если пытаться сделать oldval=%%e - вылетает. В чем трабл?

    Код:
    @echo off
    set pc=%1
    if "%pc:~0,2%"=="\\" set pc=%pc:~2%
    if /i "%pc%"=="" set pc=%computername%
    Ping -n 1 %pc% >Nul
    If ErrorLevel 1 (
    ECHO Компьютер %pc% не доступен по сети.
    ping -n 2 127.0.0.1 >Nul
    goto :EOF
    )
     
    set dpath=Software\Microsoft\Windows\CurrentVersion\Internet Settings
     
    for /f "tokens=*" %%a in ('reg query \\%pc%\HKU ^| findstr "HKEY_USERS\S-1-5-21" ^| findstr /V "Classes"') do set rpath=%%a\%dpath%
     
    for /f "tokens=3,*" %%d in ('reg query "\\%pc%\%rpath%" /v ProxyOverride ^| findstr /i "ProxyOverride"') do set oldval=%%d
    echo %oldval%
    pause
    rem set newval=%oldval%;192.168.10.10
    rem reg add \\%pc%\%rpath% /v ProxyOverride /t REG_SZ /d %newval% /f
     

    Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 12:29 30-10-2008
    01MDM



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

    Цитата:
    Т.Е. если oldval=%%d - все нормально, если пытаться сделать oldval=%%e - вылетает. В чем трабл?

     
    Покажи что должно выводить `reg query ..... /v ProxyOverride`. У меня похожего параметра в реестре нет.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:11 30-10-2008
    monsoon



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    U235
    Арифметических операций гораздо больше и о команде set я читал до того, как задал вопрос.  
    Вот пример решения задачи на clipper c указанием не диапазона, а лишь max значения:
    Код:
    FUNCTION Random(max)  
    Local ttx,ttj,tty,ttk,ttl,ttz,ttt  
    ttx = seconds() / 100  
    ttj = (ttx - int(ttx)) * 100  
    tty = log(sqrt(seconds() / 100))  
    ttk = (tty - int(tty)) * 100  
    ttl = ttj * ttk  
    ttz = ttl - int(ttl)  
    ttt = int(ttz * (max+1))  
    return(ttt)
     
    Не знаю насколько здесь соблюдается случайность, но результат вполне удовлетворительный.  Повторить в батнике такое не получится. Вопрос как реализовать что-то похожее использовав доступные арифметические операторы команды set.
    Ну и еще было бы вообще супер, если с проверкой в переменной  на неповторяющиеся значения (т.е. без записи генерируемых значений в файл),  при вызове random в цикле .

    Всего записей: 1252 | Зарегистр. 30-01-2003 | Отправлено: 16:06 30-10-2008
    01MDM



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

    Цитата:
    можно сделать использование random более универсальным, заданием диапазона для генерируемых значений или хотя бы max значения?
    Дополнительно, при вызове в цикле добавив возможность исключить повторяющиеся значения.

     
    Т.е, допустим надо сгенерировать случайную последовательность от 0 до 99:

    Код:
     
    @echo off
    setlocal
    for /l %%i in (0,1,99) do call:rand %%i
    for /f "tokens=3 delims=_=" %%i in ('set rand_') do echo %%i
    goto:eof
     
    :rand
    set rand_%random%%random%=%1  
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:41 30-10-2008
    monsoon



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

    Всего записей: 1252 | Зарегистр. 30-01-2003 | Отправлено: 18:47 30-10-2008
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Shadowland
    Код:
    @echo off&chcp 1251>nul
    set
    ft="заработок в интернете" "ЗАРАБАТЫВАЙ с НАМИ!!!" "+" "Как заработать в интернете" "GOLD-аккаунт на Depositfiles.doc" "03.04.08.jpg" "Прочитайте меня!!!.doc" "Thumbs.db"
    for %%a in (*.rar) do rar d %%a %ft%

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 18:55 30-10-2008
    01MDM



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

    Цитата:
    Но нужен не весь дипазон чисел, а определенное количество случайных значений из этого диапазона.  

     
    Например нужно 5 значений из диапазона 0-99:

    Код:
     
    @echo off
    setlocal
    for /l %%i in (0,1,99) do call:rand %%i
    for /f "tokens=3 delims=_=" %%i in ('set rand_') do call:res %%i
    goto:eof
     
    :rand
    set rand_%random%%random%=%1
    goto:eof
     
    :res
    set /a cnt+=1
    if %cnt% leq 5 echo %1
     

     
    Или тоже самое, но работает пошустрей:

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    for /l %%i in (0,1,99) do call:rand %%i
    for /f "tokens=3 delims=_=" %%i in ('set rand_') do (
        set /a cnt+=1
        if !cnt! leq 5 (echo %%i) else (goto:eof)
    )
    goto:eof
     
    :rand
    set rand_%random%%random%=%1
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:46 30-10-2008
    Shadowland

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2Nagual
    спасибо большое
    а можно както сделать чтобы он русские имена раров понимал ?
    и запароленные пропускал...

    Всего записей: 451 | Зарегистр. 14-11-2005 | Отправлено: 00:04 31-10-2008 | Исправлено: Shadowland, 08:54 31-10-2008
    monsoon



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    просто класс!!!      спасибо!!!
    интересно, что  for /f отбирает переменные set rand_.....  по возрастанию значения в имени.
     
    Вообще, получилось универсальное использование random и мне кажется, ему место в шапке.  
     
    Для большей наглядности в свой батник я добавил переменные:  
    set minr=0
    set maxr=99
    set maxcnt=1
    и их использование в строках:

    Код:
    for /l %%i in (%minr%,1,%maxr%) do call:rand %%i
    ...
    if !cnt! leq !maxcnt! (echo %%i) else (goto:eof)
    ...
     

    можно добавить еще проверку, если maxcnt  больше maxr-minr+1, но это пожалуй, уже лишнее.

    Всего записей: 1252 | Зарегистр. 30-01-2003 | Отправлено: 11:43 31-10-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 5
    vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru