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

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

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

    Код:
    mode con codepage select=1251 > nul
    Title y
    cmdow "y" /HID
    set month=092007
    for /f "usebackq tokens=2,3,5 delims=. " %%d in (`dir /t:c /s /o:d /a:-d E:\russian\`) do if %%d%%e EQU %month% call :folding "%%f"
    setlocal enabledelayedexpansion
    echo !sum!>>2.txt
    goto :eof
    :folding
    for /f "usebackq tokens=1,2,3,4" %%g in ('%~1') do (
        set "n=%sum%"
        set /a sum+=%%g%%h%%i%%j
        set m=%%g%%h%%i%%j
    )
    if %sum% LSS 0 (
        echo %n%>>2.txt
        set sum=%m%
    )

     
    Лучше использовать утилиту cmdow, чтобы не было мелькания.
    Если сумма размеров файлов превышает 2 с чем то гига, в 2.txt будут накапливаться цифры в виде:
    2056789456
    1956780051
    2100675044
     ...
     
     
    которые можно просуммировать, дописав батник.

    Всего записей: 2146 | Зарегистр. 17-07-2006 | Отправлено: 15:31 11-09-2007 | Исправлено: king_stiven, 15:32 11-09-2007
    VovaII

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди, вопрос.
    Есть сетка с виндовским доменом. Есть юзеры в домене. Есть файл-сервер с кучей папок для разных групп юзерей, и общими папками.
    Возможно ли как-то не вручную перебрать файлы и понаходить какие какому юзеру принадлежат? Или понаходить только те, что принадлежат определенному юзеру(чтоб логин задавать можно было)?

    Всего записей: 277 | Зарегистр. 20-09-2006 | Отправлено: 16:29 11-09-2007
    Elroir



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

    Цитата:
    Хотелось бы:  
    1. увеличить скорость обработки за счет, не копирования, а удаления строк в заданном файле.  
    2. возникает проблема подсчета пустых строк, во-первых они не учитываются, во-вторых вместо них в новом файле идут строки - "echo off".  
    3. не могу выйти из цикла, когда нужная строка найдена, необходимо прервать цикл, что-то типа exit for, break, exit /b ....  
     

    1. Сложно - даже с дополнительными утилитами (хотя sed наверняка может).
        В моем варианте скорость обработки достаточно высокая.  
    2. В коде ниже нет такой проблемы.
    3. Смотри код ниже.

    Код:
     
    @echo off
    setlocal
    set "before_date=02.09.2007"
    for /f "delims=[] tokens=1" %%a in ('type "%~1" ^| find /n "%before_date%"') do (set /a "line=%%a-1" & goto continue)
    :continue
    if defined line more +%line% "%~1" > "%~n1_new%~x1"
     

    Название обрабатываемого файла передается аргументом командной строки.
    Здесь строчки тоже копируются, но не по одной, а все сразу.
    В последней строке, после знака перенапровления, поставь свое название файла.


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:41 11-09-2007 | Исправлено: Elroir, 16:42 11-09-2007
    popalka



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





    спасибы — в ПМ

    Всего записей: 70 | Зарегистр. 25-06-2004 | Отправлено: 16:42 11-09-2007 | Исправлено: vu1tur, 10:16 12-09-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VovaII
    http://www.windowsitpro.com/Files/07/41504/Listing_01.txt

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 17:11 11-09-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vserd
    Выберите:
    Языковые стандарты и Форматы: Английский (США)
    Формат времени: hh:mm:ss tt
    Формат даты: dd-MMM-yy
    и запустите ваш пример вызова процедуры:

    Код:
    setlocal
    (Call :GetDateTime Dyear Dmonth Dday DHour DMinute DSec Dmsec)&&set ttt=
    Echo.
    Echo GetDateTime  Dyear=%Dyear% Dmonth=%Dmonth% Dday=%Dday% DHour=%DHour% DMinute=%DMinute% DSec=%DSec% Dmsec=%Dmsec%
    endlocal

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

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 19:45 11-09-2007 | Исправлено: GORA2, 19:47 11-09-2007
    ilovevirus

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Большое Спасибо!
     
    Добавлено:
    Еще один вопрос: Подскажите как можно послать команду по сети на определенный порт?

    Всего записей: 18 | Зарегистр. 19-09-2005 | Отправлено: 02:50 12-09-2007
    doctorZlo



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ помогите решить задачку! Никак немогу придумать, как ее решить
    Надо написать батничек, чтобы при его выполнении текстовый файл, допустим 1.txt который содержит ряд значений вида ({знач1;знач2;знач3;знач4}-переменные записаны в строчку через разделитель " ; ")-- записывал эти значения в  другой текстовый файл,допустим 2.txt, но на определенные место, тобишь повставлял на определенные строки файла?

    Всего записей: 32 | Зарегистр. 02-03-2007 | Отправлено: 18:15 12-09-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    doctorZlo
    Приведи пример файла 1.txt и файла 2.txt до и после подстановки.
     
    Добавлено:
    ilovevirus
    Видимо тебе нужна утилита вроде netcat (nc.exe). Ссылка на нее есть в шапке, в разделе "Полезные утилиты"

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:25 12-09-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    popalka
     
    Вот такое есть решение, корректно считает сумму файлов до 2 с чем то терабайт. Почему то время от время  попикивает.) Можно задать промежуток времени созданмя файлов:
    set month_begin=20070601
    set month_end=20070630
    где суммируются размеры файлов, созданных с 01 06 2007 до 15 07 2007

    Код:
    @echo off
    mode con codepage select=1251 > nul
    set month_begin=20070601
    set month_end=20070715
    del "%temp%\2.txt"
    for /f "usebackq tokens=1,2,3,5 delims=. " %%c in (`dir /t:c /s /a:-d`) do (
        if %%e%%d%%c GEQ %month_begin% (
            if %%e%%d%%c LEQ %month_end% call :folding "%%f"
        )
    )
    setlocal enabledelayedexpansion
    echo !sum!>>"%temp%\2.txt"
    call 3.bat
    goto :eof
    :folding
    for /f "usebackq tokens=1,2,3,4" %%g in ('%~1') do set /a sum+=%%g%%h%%i%%j
    echo %sum%
    if %sum% LSS 0 (
        for /f "usebackq tokens=1,2,3,4" %%g in ('%~1') do call 2.bat %%g%%h%%i%%j
        set big_size=yes
    )

     
     
                                                   2.bat

    Код:
    set /a sum-=%1
    echo %sum%>>2.txt
    set sum=%1

     
                                                   3.bat

    Код:
    if not defined big_size (
        set b=!sum!
        goto :end
    )
    for /f %%d in (%temp%\2.txt) do (
        set number=%%d
        set second=!number:~-3!
        set b2=!second:~0,1!
        if !b2! EQU 0 (
            set second=!second:~-2!
            set b3=!second:~0,1!
            if !b3! EQU 0 set second=!second:~-1!
        )
        set /a second_sum+=!second!
        set first=!number:~0,-3!
        set /a first_sum+=!first!
    )
    set /a first_sum+=!second_sum:~0,-3!
    set b=!second_sum:~-3!
    :end
    echo !first_sum!!b!

     
    Результат в байтах    !first_sum!!b!

    Всего записей: 2146 | Зарегистр. 17-07-2006 | Отправлено: 18:56 12-09-2007 | Исправлено: king_stiven, 08:53 15-09-2007
    doctorZlo



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

    Цитата:
    Приведи пример файла 1.txt и файла 2.txt до и после подстановки.

    В файле 1.txt прописы следующие значения:
    user;kovbasyuk2;10.4.145.85
    А вот эти значения после подстановки их в файл 2.txt:
    Подробнее...
     
     
    Но тут есть одино но! В зависимости от того, какое значение (user/moder) стоит в файле 1.txt айпишник этого чела в файле 2.txt в закладке [UsersAddr] должен находиться либо  за флагом g00000001= {moder}, либо за g00000000= {user}  
     
     

    Всего записей: 32 | Зарегистр. 02-03-2007 | Отправлено: 19:48 12-09-2007
    Elroir



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

    Код:
     
    @echo off
    setlocal
    del /q /f tmp.txt 2>nul
    set "input=1.txt"
    set "output=2.txt"
    for /f "delims=; tokens=1-3" %%a in (%input%) do call :write "%%a" "%%b" "%%c"
    ren "%output%" "%output%.bak"
    ren tmp.txt "%output%"  
    goto :EOF
    :write
    if /i "%~1"=="moder" (set "insert_before=g00000000=") else (set "insert_before=[Users]")
    for /f "tokens=*" %%A in (%output%) do (
    if "%%A"=="[FiltersW]" (
    echo %~3=0; 0;>>tmp.txt
    echo [FiltersW]>>tmp.txt
    ) else if "%%A"=="[UsersAddr]" (
    echo %~3=0; 0;>>tmp.txt
    echo [UsersAddr]>>tmp.txt
    ) else if "%%A"=="%insert_before%" (
    echo %~3=>>tmp.txt
    echo %insert_before%>>tmp.txt
    ) else echo.%%A>>tmp.txt
    )
    echo %~3=%~2; *; ; 0; 0; 0; 0; 0; 0; 0; 1-24/1-24/1-24/1-24/1-24/1-24/1-24/; 0; 0; 0; 0; 0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 1; 1; 0; 0; 0; 0; 0; 0; 1;>>tmp.txt
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 00:32 13-09-2007
    dardreams



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Привет !!!
    Я знаю что тут лучшие потому что не раз мне уже помогали решать мои никому нужные задачки. Вот придумал еще чем заняться надеюсь решим....
     
    допустим это find2.cmd

    Код:
     
    find /i %1 %2
     

    Если запустить с параметром ...
    find2.cmd d:\ король и шут
    он не найдет... потому что %2 только до 1 пробела...
     
    Вопрос, можно ли сделать так чтобы он читал все остальное что то вроде %2 %3 ... %n ... до бесконечности ???
    p.s. нашел параметр * но он берет все начиная от %1 а мне надо именно чтобы продолжал...
    надеюсь понятно описал проблему...

    Всего записей: 97 | Зарегистр. 29-05-2007 | Отправлено: 10:21 13-09-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    dardreams
    Если передаваемый аргумент содержит пробелы, то используй двойные кывычки:

    Код:
     
    find2.cmd d:\ "король и шут"
     

     

    Цитата:
    сделать так чтобы он читал все остальное что то вроде %2 %3 ... %n ... до бесконечности

    Смотри в справке Shift /?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:29 13-09-2007 | Исправлено: Maza Faka, 11:36 13-09-2007
    popalka



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

    Всего записей: 70 | Зарегистр. 25-06-2004 | Отправлено: 21:23 13-09-2007
    dardreams



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka
    Насчёт кавычек я знаю.. меня этот вариант не устраивает. а вот за SHIFT спасибо !

    Всего записей: 97 | Зарегистр. 29-05-2007 | Отправлено: 07:24 14-09-2007
    PAtr1ck

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ помогите пожалуйста решить такую задачу: надо чтобы по имени компа цеплялись общедоступные ресурсы и принтеры например: компьютер наз: BFU чтоб ему цеплялись личная папка BFU и принтер  

    Всего записей: 8 | Зарегистр. 22-03-2007 | Отправлено: 10:33 14-09-2007
    doctorZlo



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

    Всего записей: 32 | Зарегистр. 02-03-2007 | Отправлено: 10:42 14-09-2007
    vserd

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

    Цитата:
    Языковые стандарты и Форматы: Английский (США)  
    Формат времени: hh:mm:ss tt  
    Формат даты: dd-MMM-yy  

    Спасибо за багрепорт, исправил, обновил
    DateCMD.Bat http://www.rapidshare.ru/401179

    Всего записей: 2062 | Зарегистр. 08-05-2002 | Отправлено: 12:43 14-09-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 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

    Рейтинг.ru