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

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

    Всего записей: 1705 | Зарегистр. 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 тут на форуме свои топики есть.
     

    Всего записей: 1705 | Зарегистр. 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
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    И все-таки остались косячки
    вот пример файла stock.txt:

    Код:
    SAGA 6,42 9,24 10,55 1,23  
    PlayGirl 8,92 15,57 20,56 4,39  
    Уфа -0,59 0,00 -7,54 0,00  
    BSC КФХ Славинка 8,60 14,78 19,31 4,02
    Raul Gonsalez 8,69 14,23 18,00 2,48  
    Last champion 8,90 14,77 18,85 2,75  
     

     
    после запуска этого кода:

    Код:
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fs = fso.OpenTextFile("stock.txt", 1, false)
    Set f = fso.OpenTextFile("new_stock.txt", 2, true)
        fsContent = fs.ReadAll
        fs.Close
     
    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

     
    получается new_stock.txt:

    Код:
    6,42 9,24 10,55 1,23  
    8,92 15,57 20,56 4,39  
    0,59 0,00 -7,54 0,00  
    8,60 14,78 19,31 4,02
    8,69 14,23 18,00 2,48  
    8,90 14,77 18,85 2,75  
     

     
    Т.е. он обрезает минус (дефис) у того числа, которое стоит рядом со словом. Помогите с этим, плиз

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



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

    Цитата:
    Как присвоить переменной путь где находится прожка и вписать её в реестр?


    Код:
     
    @echo off
    setlocal
    set cpath=%~dp0
    reg add HKLM\Software\Proga /ve /d "%cpath:~0,-1%" /f>nul
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 10:49 29-01-2007 | Исправлено: Elroir, 10:50 29-01-2007
    Maza Faka



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

    Цитата:
    set cpath=%~dp0

     
    Что тут происходит? Обьясни ПЛЗ

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:52 29-01-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    В батнике переменная %0 - это название самого батника.
    А модификатор ~dp, дает нам полный путь к файлу, имя которого находится в переменной. Соответственно %~dp0 - даст нам полный путь до того места, где находится батник. Есть одна тонкость - ~dp выдает путь с чертой в конце. Для того, чтобы ее убрать, я использую вспомогательную переменную cpath, от которой "отрезаю" последний символ.

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    Ну для приведенного тобой кусочка stock.txt вот так

    Код:

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

    Если опять что-то не то всплывет, то следующий вопрос по VBS задавай тут

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 13:53 29-01-2007 | Исправлено: igor_andreev, 13:59 29-01-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Возможно ли написать батник, который будет работать как переключатель для отображения расширения файлов и отображения скрытых файлов? т.е нужно чтобы при запуске батника, у всех файлов отображалось расширение и все скрытые файлы тоже отображались (не меняя их атрибуты), а при повторном запуске, чтобы всё возвращалось в норму (по умолчанию).
     
    Полагаю это где то в реестре делается, но я никак не могу найти где, может кто то знает, подскажите плиз, а переключатель я уже как нибудь сам забацаю  
     
    Elroir
    Твой последний пост добавил в шапку .

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 18:23 29-01-2007
    Elroir



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

    Цитата:
    добавил в шапку

    Ну раз добавил, тогда я скажу где в реестре эти значения

    Код:
     
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
    "Hidden"=dword:00000001
    "HideFileExt"=dword:00000000
     

    Hidden - показывать/не показывать скрытые файлы. 1-показывать,2-не показывать
    HideFileExt -  показывать/не показывать расширения. 0-показывать,1-не показывать
    Тут проблема может быть в том, что надо будет перезапускать эксплорер, чтобы он заново считал значения из реестра.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:37 29-01-2007
    Maza Faka



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

    Цитата:
    reg add HKLM\Software\Proga /ve /d "%cpath:~0,-1%" /f>nul

    Для чего нужно это: ":~0,-1" ?
    Вот так тоже работает: reg add HKLM\Software\Proga /ve /d "%cpath%" /f>nul

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:38 29-01-2007
    01MDM



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

    Цитата:
    т.е нужно чтобы при запуске батника, у всех файлов отображалось расширение и все скрытые файлы тоже отображались (не меняя их атрибуты)

     
    Может так:
     
    dir /b | attrib
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:55 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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru