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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как определить версию винды в батнике, типа 9x или NT?
    Пробовал такой код:
     

    Код:
    if c:\%os%==c:\ goto win9x
    if not c:\%os%==c:\ goto winnt
     
    :winnt
    .................
     

     
     
    Пишет имя команды или файла указанно неправильно...
     
     
    Добавлено:
     
    Извиняюсь, разобрался. Не на ту строчку скрипт ругался...

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 18:02 05-02-2008 | Исправлено: Lovec, 18:48 05-02-2008
    Sk09



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

    Цитата:
    Sk09  
    Придётся все равно после вставки диска запускать батник, как скрытно запустить поищи в шапке, будет что то типа  
    xcopy "E:\" c:\%date% /s /e /h /r /i

     
    Спасибо огромное, но может кто нибудь подскажет поподробнее, а то я сам в этом совсем не смыслю.......
     
    А насчет придеться запускать - нельзя например зациклить и вставить в автозапуск например чтоб каждые 30 секунд например проверяла привод ?

    Всего записей: 389 | Зарегистр. 15-09-2005 | Отправлено: 18:38 05-02-2008
    king_stiven

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

    Код:
    Title y
    "E:\split\cmdow" "y" /HID
    :begin
    ping -n 16 -w 1000 localhost > nul
    for /f "tokens=*" %%c in ('dir k:\ /b') do (
        for /f "tokens=1,2* delims=:" %%e in ("%time%") do (
            xcopy k:\ "c:\34\%date%_%%e.%%f.%%g" /s /e /h /r /i
            goto :eof
        )
    )
    goto :begin

    меняй цифру 16 при необходимости для частоты проверки дисковода
    где k:\    дисковод
    c:\34\     куда копируем
    E:\split\cmdow    полный путь к cmdow, cmdow поищи в шапке в Полезные утилиты [?]  
    положи в автозагрузку,
    после копирования диска батник закроется
     

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 21:46 05-02-2008 | Исправлено: king_stiven, 21:48 05-02-2008
    Sk09



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Спасибо огромное
    Попробую дома вечерком - если возникнут вопросы - напишу.
     
    Добавлено
    Скачал сейчас cmdow, в анотации написано Cmdow v1.4.3 for Windows NT4/2000/XP, а он пойдет под windows server 2003 c sp2 ? а то проверять как то немного боязно, всетаки рабочий сервак - за него на части порвут.....

    Всего записей: 389 | Зарегистр. 15-09-2005 | Отправлено: 08:33 06-02-2008 | Исправлено: Sk09, 08:45 06-02-2008
    king_stiven

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

    Цитата:
    Скачал сейчас cmdow, в анотации написано Cmdow v1.4.3 for Windows NT4/2000/XP, а он пойдет под windows server 2003 c sp2 ?

    не знаю, вопрос к гуру
    добавь ещё в начало батника:
    @echo off
    chcp 1251 > nul

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 09:25 06-02-2008
    Sk09



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Спасибо - попробовал на рабочем компе с XP - работает отлично - но хотелось немного можно доработать в части: чтобы после копирования сценарий не выключался, а например включалась пауза 10 - 20 минут, а потом проверка продолжалась и так по кругу.
    Запустить то раз не трудно - вопрос в том, что уезжаю на сессию и 3 недели меня не будет.....

    Всего записей: 389 | Зарегистр. 15-09-2005 | Отправлено: 11:02 06-02-2008
    ipmanyak



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sk09 Дык делай цикл , кто тебе мешает? Ждать  20 сек - утилита sleep из рескит, или ping 127.0.0.1 -n 20  
    Впрочем отдельно sleep можешь взять здесь: http://www.windowsfaq.ru/images/stories/files/sleep.exe
     
    :test
    ....  
    sleep 20
    или  
    ping 127.0.0.1 -n 20  
    goto test
    :go
     


    ----------
    В сортире лучше быть юзером, чем админом...

    Всего записей: 11735 | Зарегистр. 10-12-2003 | Отправлено: 11:25 06-02-2008
    king_stiven

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

    Код:
    @echo off
    chcp 1251 > nul
    Title y
    "E:\split\cmdow" "y" /HID
    :begin
    ping -n 16 -w 1000 localhost > nul
    for /f "tokens=*" %%c in ('dir k:\ /b') do (
        for /f "tokens=1,2* delims=:" %%e in ("%time%") do (
            xcopy k:\ "c:\34\%date%_%%e.%%f.%%g" /s /e /h /r /i
            ping -n 640 -w 1000 localhost > nul
            goto :begin
        )
    )
    goto :begin

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 11:27 06-02-2008
    Sk09



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

    Всего записей: 389 | Зарегистр. 15-09-2005 | Отправлено: 13:22 06-02-2008
    ferapontov

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет!  
    У меня такой вопрос: мне каждый день надо грузить файлы за вчерашний день,которые находятся в папках : \\server\YYYY\MM\YSTD ,где YYYY -текущий год,MM -месяц,YSTD -вчерашнее число.
    Я нашел команду for /f "tokens=1,2,3,4* delims=. " %%i in ('date /t') do set TDDAY=%%i&set TDMM=%%j&set TDYY=%%k , при этом переменной TDDAY присваивается значение равное сегодняшнему дню,кто нибудь может подсказать как получить вчерашнюю дату?
    Я пробовал завести переменную YSTD ,равную TDDAY-1 ))))) но такая хрень работает только с 11 по 31-е число))
     
    Please help ))))))  

    Всего записей: 5 | Зарегистр. 06-02-2008 | Отправлено: 14:43 06-02-2008
    vRU

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

    Код:
     
    l:
    cd l:\7zip
     
    del base01.7z
     
    ren base02.7z base01.7z
    ren base03.7z base02.7z
    ren base04.7z base03.7z
    ren base05.7z base04.7z
    ren base06.7z base05.7z
    ren base07.7z base06.7z
    ren base08.7z base07.7z
    ren base09.7z base08.7z
    ren base10.7z base09.7z
    ren base11.7z base10.7z
    ren base12.7z base11.7z
    ren base13.7z base12.7z
    ren base14.7z base13.7z
    ren base15.7z base14.7z
    ren base16.7z base15.7z
    ren base17.7z base16.7z
    ren base18.7z base17.7z
    ren base19.7z base18.7z
    ren base20.7z base19.7z
    ren base21.7z base20.7z
    ren base22.7z base21.7z
    ren base23.7z base22.7z
    ren base24.7z base23.7z
    ren base25.7z base24.7z
    ren base26.7z base25.7z
    ren base27.7z base26.7z
    ren base28.7z base27.7z
     
    7za.exe a base28.7z -r m:\base\ -x@l:\7zip\_exclude.txt -ssw -ms=off
    rem -mx=3
     

     
    содержимое _exclude.txt
     

    Код:
     
    *.cdx
    *.tmp
    *.bak
    *.zip
    *.rar
    *.arj
    ~$*.*
    NEW_STRU
     

     
    через 1,5 часа архивирования получаем файл base28.7z содержащий три папки, вместо одной:
     

    Код:
     
    #
    Base
    VEDA
     

     
    это 3 из 39 девяти папок диска m: а хотелось бы тока одну Base
    честное слово, озадачен сильно

    Всего записей: 33 | Зарегистр. 17-01-2006 | Отправлено: 16:27 06-02-2008
    01MDM



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

    Цитата:
    подсказать как получить вчерашнюю дату?

    Например так

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
     
    set d=%date:~0,2%
    set m=%date:~3,2%
    set y=%date:~6,4%
     
    if %d:~0,1%==0 set d=%d:~1%
    if %m:~0,1%==0 set m=%m:~1%
     
    set /a feb=y%%4
    if %feb%==0 (set feb=29) else (set feb=28)
     
    set /a tok=m-1
    if %tok%==0 set tok=12
    for /f "tokens=%tok%" %%i in ("31 %feb% 31 30 31 30 31 31 30 31 30 31") do (
        set /a d-=1
        if !d!==0 (
            set d=%%i
            set m=%tok%
            if !m!==12 set /a y-=1
        )
    )
     
    set d=0%d%
    set m=0%m%
    set yesterday=%d:~-2%.%m:~-2%.%y%
     
    echo %yesterday%
     


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

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

    Код:
     
    @ECHO OFF
    Title Вывод списка установленных программ
    setlocal enabledelayedexpansion  
    SET /a cnt=1
    ECHO Составляю список установленного ПО.  Ждите...
    ECHO ╤яшёюъ ╧╬ эр ъюья№■ЄхЁх %computername%:>\\MyComp\PROGRAMS\%computername%.txt
    SET UNISTALL=HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
    FOR /f "tokens=7 delims=\" %%a IN ('reg query "%UNISTALL%"') DO (
            FOR /f "tokens=1,2,*" %%b IN ('reg query "%UNISTALL%\%%a" ^| FIND /I "DisplayName"') DO (
                    ECHO !cnt!. %%d >>\\MyComp\PROGRAMS\%computername%.txt
    set /a cnt=!cnt!+1
            )
    )
    ECHO Спасибо
     

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

    Program                                    Count                        PC
    Acrobat Reader                              5                         PC1, PC2, PC12, WS4, WS7
    MS Office 2003                               2                         PC3,PC12
    MS Office XP                                  5                         PC1, PC2, PC4, WS0, WS2
    .........................................................
    и т.д.

    Кто подскажет как удобней сделать?

    Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 15:04 07-02-2008
    Wise_Kaa



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

    Цитата:
     
    set counter=0
    for %%T in (*.*) do set /a counter=%counter%+1
    echo %counter%
     

    Значение counter равно 1.

    Всего записей: 59 | Зарегистр. 04-01-2006 | Отправлено: 16:48 07-02-2008
    wolf0425



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

    Цитата:
    Друзья, а как можно подсчитать кол-во файлов в папке?  

    если файлов много, то лучше так: for /f %%a in ('dir /b /a-d ^| find /c /v ""') do set "counter=%%a"
    проследить за правильными ключиками у dir - на предмет правильного учета/игнорирования скрытых файлов.
     
    а у тебя проблема в том, что в do set /a counter=%counter%+1  
    %counter% раскрывается при инициализации цикла, а не на каждом проходе.
    в твоем варианте писать надо было или
    Код:
    for %%T in (*.*) do set /a counter+=1

    или  

    Код:
    setlocal enabledelayedexpansion
    set counter=0
    for %%T in (*.*) do set /a counter=!counter! + 1
    echo %counter%  

     

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

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Joolz
    Приведи примеры текстовых файлов все варианты.
    01MDM
    Скорость твоего батника впечатляет.
     
    Добавлено:
    Wise_Kaa

    Код:
    @echo off
    for /f "tokens=*" %%c in ('dir /b /a:-d') do set /a counter+=1
    echo %counter%

     
    Добавлено:
    есть ещё вариант разбор команды dir, всё это было в прошлых постах.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 17:58 07-02-2008
    Wise_Kaa



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

    Всего записей: 59 | Зарегистр. 04-01-2006 | Отправлено: 18:52 07-02-2008
    gamebit73

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть задача. Имеется папка с файлами логов *.log. Надо узнать дату последнего изменения всех файлов, узнать какие изменены сегодня и получить их имена для последующего отправления по e-mail. Отправку осуществляю программой zerat.

    Всего записей: 6 | Зарегистр. 08-02-2008 | Отправлено: 05:45 08-02-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gamebit73
    В папке E:\split 1\ лежат логи

    Код:
    @echo off
    for /f "usebackq tokens=*" %%c in (`dir "E:\split 1\*.log" /t:w /o:-d /a:-d /b`) do (
        for /f "tokens=1*" %%d in ("%%~tc") do (
            if "%%d"=="%date%" (
                echo E:\split 1\%%c>> 1.txt
            ) else (
                сюда написать команду для отправкам списка из 1.txt по e-mail
                goto :eof
            )
        )
    )

     
    В  1.txt будут полные имена всех нужных файлов

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 06:25 08-02-2008 | Исправлено: king_stiven, 06:48 08-02-2008
    gamebit73

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Странно, у меня не формируется файл 1.txt.  
    Вот я немного подправил под себя:

    Код:
     
    for /f "tokens=*" %%c in ('dir f:\log\*.log /t:w /o:-d /a:-d /b') do (
       for /f "tokens=1*" %%d in ("%%~tc") do (
           if "%%d"=="%date%" (
               echo %%c > c:\backup\1.txt
           ) else (
               %PWD%zeratssl\zerat smtphost:boggk.ru from:niv@boggk.ru to:niv1@boggk.ru subject:"Log" %%PUT="c:\backup\1.txt"
               goto :eof
           )
       )
    )
     

     
    И как я понял, тут просто формируется список файлов. Мне же надо отправить сами лог-файлы на почту. Подскажите как сделать.

    Всего записей: 6 | Зарегистр. 08-02-2008 | Отправлено: 07:03 08-02-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