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

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

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

vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 16:59 14-11-2006 | Исправлено: Elroir, 04:30 26-04-2007
    freedom83

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    народ, такое вообще возможно в батнике реализовать?
    если нет, аргументируйте пожалуйста, СРОЧНО

    Всего записей: 100 | Зарегистр. 17-01-2006 | Отправлено: 11:12 26-01-2007
    Kac



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо человеческое всем ответившим!
    2 часа назад сам допер до setX (вернее разрыл на этом форуме)  
    От себя хочу добавить... эта утилка уже идет в 2003 и токо для 2000 пришлось ее с 2003го списывать.
    Все заработало. Про реестр умно! взял на заметку.

    Всего записей: 41 | Зарегистр. 10-08-2004 | Отправлено: 11:18 26-01-2007
    uZver



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    freedom83
    xcopy /?
    /D:m-d-y     Копирует файлы, измененные либо в указанный день, либо после.
                 Если дата не указана, копируются только те файлы,
                 которые новее в исходной папке.

    Всего записей: 195 | Зарегистр. 10-10-2003 | Отправлено: 11:21 26-01-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    freedom83
    Возможно. Запусти следующий батник, дай ему в качестве аргумента какой-нибудь файл и выложи результат.

    Код:
     
    @echo off
    echo %date%
    echo %~t1
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 11:23 26-01-2007
    freedom83

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    26,01,2007
    18,01,2007 16,37

    Всего записей: 100 | Зарегистр. 17-01-2006 | Отправлено: 11:39 26-01-2007 | Исправлено: freedom83, 11:41 26-01-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    freedom83
    Только одна строчка? Там должно было быть две...
    Ну ладно, попробуем так:

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    set source=c:\dir1\
    set dest=c:\dir2\
    set cdate=%date:,=%
    for %%a in (%source%*.txt) do (
    set fdate=%%~ta
    set fdate=!fdate:~0,10!
    set fdate=!fdate:,=!
    if not !fdate!==!cdate! move "%source%%%a" %dest%
    )
     

    Выделенные директории поменять на свои.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 11:51 26-01-2007
    freedom83

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

    Всего записей: 100 | Зарегистр. 17-01-2006 | Отправлено: 11:59 26-01-2007
    ViSiToR



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

    Цитата:
    поправь пример вычисления предыдущей даты на более правильную

    Поправить? а какой пример? как называется в шапке? или добавить новый? вообще-то шапку может править каждый ...
     

    Цитата:
    Внимание! Ты можешь отредактировать это сообщение, если у тебя есть новая информация по этой теме! Подробнее..

     
    Могу и я, но я не совсем понял что там праит/добавлять    
     
    Добавлено:
    freedom83
    Попробуй так:
     

    Код:
    setlocal enabledelayedexpansion
    set source=c:\source\
    set dest=c:\dest\
    set cdate=%date:,=%
    for %%a in (%source%*.txt) do (
    set fdate=%%~ta
    set fdate=!fdate:~0,10!
    set fdate=!fdate:,=!
    if not !fdate!==!cdate! move "%source%*.txt" %dest%
    )

     
    Elroir
    Для отладки, лучше подставлять Pause, или убирать временно @echo off

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 12:07 26-01-2007
    evgeni666



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

     
    Можешь добавить такую строчку?
     
    · Использование даты на день раньше чем сегодня (Вариант, учитывающий високосные года)

    Всего записей: 367 | Зарегистр. 22-12-2005 | Отправлено: 12:36 26-01-2007
    ViSiToR



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

    Цитата:
    Можешь добавить такую строчку?

    Добавил
     


     
    Давно написал батник, который добавляет в реестер запись, позволяющая создавать батники из контекстного меню обозревателя (Прав. Кнопкой мышки - > Создать) -
    К батнику также прилагается иконка, которую можно установить (перед установкой иконки выводится запрос на подтверждение), а также прилагается небольшая утилита для организования цвета шрифта в батнике (очень красиво получается).
     
    Вот код
     
    А вот ссылка на скачку всего “установщика” (без этих файлов код нужно править, и видоизменять).
     
    Добавлено:
    P.S
    Результат будет виден после повторного открытия меню “Создать”

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 12:51 26-01-2007 | Исправлено: ViSiToR, 20:04 26-01-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    freedom83
    Извини, недоглядел
    Исправленный код:

    Код:
     
    @echo off  
    setlocal enabledelayedexpansion  
    set source=c:\dir1\
    set dest=c:\dir2\
    set cdate=%date:,=%
    for %%a in (%source%*.txt) do (
    set fdate=%%~ta
    set fdate=!fdate:~0,10!
    set fdate=!fdate:,=!
    if not !fdate!==!cdate! move "%%a" %dest%
     

    Добавлено:
    ViSiToR

    Цитата:
    Для отладки, лучше подставлять Pause, или убирать временно @echo off

    Прав на 100 процентов - я обычно так и делаю. А тут мне уходить надо было - не успел.

    Цитата:
    вообще-то шапку может править каждый  ...  

    Не каждый. Только со статусом не ниже Member, а в некоторых топиках вообще только избранные
    Добавлено:

    Цитата:
    Давно написал батник, который добавляет в реестер запись...
    echo @echo off> %windir%\SHELLNEW\BATHiK.bat  
    if not exist %windir%\SHELLNEW md %windir%\SHELLNEW  

    Э... эти строчки в коде не надо поменять местами?  

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:34 26-01-2007 | Исправлено: Elroir, 15:04 26-01-2007
    ViSiToR



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

    Цитата:
    Э... эти строчки в коде не надо поменять местами?  

    Точно!  спасибо что заметил, а я писал...
     

    Цитата:
    Давно написал батник

       
     
    Добавлено:
    Перезалил архив, и поправил код в своём посте.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 20:00 26-01-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте
     
    есть файл prices.txt:

    Код:
    SAGA    4,50    4,60    4,60    4,50            0,000   0,00    
    PlayGirl        3,74    3,94    4,04    3,99            0,000   0,00    
    Уфа     3,80    3,90    3,90    3,90            0,000   0,00    
    BSC КФХ Славинка        3,70    3,70    3,70    3,70            0,000   0,00    
    Raul Gonsalez   4,07    4,46    4,55    4,55            0,000   0,00    
    Last champion   3,69    4,20    4,30    4,24            0,000   0,00

     
    можно ли из него удалить все слова, оставив только числа:

    Код:
    4,50    4,60    4,60    4,50            0,000   0,00    
    3,74    3,94    4,04    3,99            0,000   0,00    
    3,80    3,90    3,90    3,90            0,000   0,00    
    3,70    3,70    3,70    3,70            0,000   0,00    
    4,07    4,46    4,55    4,55            0,000   0,00    
    3,69    4,20    4,30    4,24            0,000   0,00

     
    Спасибо.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 01:20 29-01-2007 | Исправлено: Tipulatoid, 01:22 29-01-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    давно есть такая задача, решение так и нашел, может кто подскажет
     
    дано:
    две огромнейшие папки, вложенность очень высокая, количество файлов очень велико, файлы меняются в одной из папок, вторая папка служит зеркалом (бекапом) первой
    улитита xcopy
    комсценарий
     
    задание:
    необходимо синхронизировать эти папки таким образом, чтобы при создании в одной из них любого файла(ов) с тем же именем но более нового (версия, дата) он бы копировался в папку синхронизации (зеркало), а при удалении одного из файлов в одной из папок-зеркал этот файл(ы) удалялся(лись) бы из другой папки
     
    другое решение этой проблемы -- удалить более старую папку и закачать на ее место более новую имеет один существенный недостаток, а именно, потерю огромного количества времени на удаление и копирование все файлов заново  
     
    мною решена только первая часть задачи, вот этим кодом
     

    Код:
    xcopy /y /e /v /c /i /h /r /k /g /d folder1 folder2
    xcopy /y /e /v /c /i /h /r /k /g /d folder2 folder1

     
    вторую часть задачи решить пока не удалось
    у кого какие есть мысли по поводу реализации отслеживания удаленных файлов в одной из папок и повторению структуры с минимальной затратой времени в папке-зеркале?

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 01:50 29-01-2007
    igor_andreev

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

    Цитата:
    можно ли из него удалить все слова, оставив только числа:


    Код:

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fs = fso.OpenTextFile("prices.txt", 1, false)
        fsContent = fs.ReadAll
        fs.Close  
    Set f = fso.OpenTextFile("new_prices.txt", 2, true)  
     
    Set regEx = New RegExp  
        regEx.Pattern = "\D*([0-9\,\s]*)$"  
        regEx.MultiLine = True  
        regEx.Global = True  
    Set Matches = regEx.Execute(fsContent)  
     For Each Match in Matches  
        RetStr = RetStr & Match.Value & vbCRLF  
        RetStr = regEx.Replace(RetStr, "$1")  
     Next    
        f.Write RetStr  
        f.Close

    Nagual
    Полное зеркалирование двух папок
    mirror.exe http://home.in.tum.de/~jain/software.php
    или robocopy.exe версия желательна не ниже XP010 или из Resource Kit Tools или, если лениво качать 12 Мб можешь отдельно ее поискать, здесь например.  
     
    Только не говори, что надо только средствами ОС , в Майкрософт не дураки сидят и robocopy они сделали именно для таких случаев: "две огромнейшие папки, вложенность очень высокая, количество файлов очень велико". К примеру у меня папку порядка 11000 файлов (около 4 Гб) robocopy синхронизирует с USB меньше двух минут.
     

    Всего записей: 1674 | Зарегистр. 08-12-2004 | Отправлено: 03:00 29-01-2007 | Исправлено: igor_andreev, 03:25 29-01-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    Спасибо
    Подозреваю, что код этот написан на VB.
     
    Не подскажете тогда уж как запускать VB-сценарий из командной строки
     
    Добавлено
    Сам разобрался Спасибо

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 03:31 29-01-2007 | Исправлено: Tipulatoid, 03:38 29-01-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    спасибо за вариант, конечно хотелось бы лучше штатными средствами
    можешь привести свой код того, чем пользуешь? раз уж ты владеешь этой темой
    Tipulatoid
    дак а что там пускать то

    Код:
    %1
    ну или
    Код:
    *.vbs

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 03:45 29-01-2007
    Tipulatoid



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

    Цитата:

    Код:
    Set fso = CreateObject("Scripting.FileSystemObject")  
    Set fs = fso.OpenTextFile("prices.txt", 1, false)  
        fsContent = fs.ReadAll  
        fs.Close  
    Set f = fso.OpenTextFile("new_prices.txt", 2, true)  
       
    Set regEx = New RegExp  
        regEx.Pattern = "\D*([0-9\,\s]*)$"  
        regEx.MultiLine = True  
        regEx.Global = True  
    Set Matches = regEx.Execute(fsContent)  
     For Each Match in Matches  
        RetStr = RetStr & Match.Value & vbCRLF  
        RetStr = regEx.Replace(RetStr, "$1")  
     Next      
        f.Write RetStr  
        f.Close

     
    Код этот глючит если в строках стоят отрицательные числа. Не исправите? Сам я в VB ни зуб ногой.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 05:12 29-01-2007
    igor_andreev

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

    Код:

    regEx.Pattern = "\D*([0-9\,\-\s]*)$"


    Цитата:
    Сам я в VB ни зуб ногой.

    Я тоже. Это я на WSH пример привел, твоя задача им быстрей и корректней решается, чем батником. О WSH,VBScript тут на форуме свои топики есть.
     

    Всего записей: 1674 | Зарегистр. 08-12-2004 | Отправлено: 05:48 29-01-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Нужно написать батник такого содержания: имеется прожка, которая не запускается, если в реестре не прописан к ней путь, например: HKLM\SOFTWARE\Proga REG_SZ "C:\Program Files\Proga", пользователь может скопировать прожку куда угодно и запускать оттуда.
    Как присвоить переменной путь где находится прожка и вписать её в реестр? То есть написать такой батник, пользователь будет запускать прогу через батник...

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:07 29-01-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 2
    vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru