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

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

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

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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:54 27-04-2007 | Исправлено: Elroir, 03:59 10-09-2007
    KapralBel



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

    Код:
    RoboCopy \\Server1\Price \\Server2\NewPrice Price1.doc price2.doc Price6.doc /mir

     

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 15:33 01-06-2007 | Исправлено: KapralBel, 15:34 01-06-2007
    SerP and MoloT

    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    чёто неполучается...
    вот так вот написал, попытался хотя бы один изменённый файлик перенести... нифига...
    RoboCopy C:\dstr\C.doc \\Mbp\Новая папка\C.doc /mir

    ----------
    save your planet, kill yourself
    "Turn on, tune in, drop out"

    Всего записей: 421 | Зарегистр. 07-07-2005 | Отправлено: 16:07 01-06-2007
    Elroir



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

    Цитата:
    чёто неполучается...

    И не получится. Ты хотя бы справку по RoboCopy почитал. Не поддерживает он такой синтаксис, как ты ему дал.  


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:27 01-06-2007
    KapralBel



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

    Код:
    RoboCopy C:\dstr\ \\Mbp\Новая папка\ C.doc /mir

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 16:29 01-06-2007
    Maza Faka



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

    Цитата:
    У меня в батнике стоит setlocal enabledelayedexpansion

    Посмотри справку "SET /?" для чего нужно применять "setlocal enabledelayedexpansion"
     

    Цитата:
    значения %w% при включенном и отключенном delayedexpansion будут различны

    У меня они одинаковы и при включенном и при выключенном...
     

    Цитата:
    hk_batch.zip, а это от туда

    В этом архиве есть файл "weekday_om-xp.bat", просмотри его, там такое же вычисление, но нет никакого упоминания про "setlocal enabledelayedexpansion".

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 16:50 01-06-2007 | Исправлено: Maza Faka, 16:52 01-06-2007
    01MDM



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

    Код:
     
    set /a i=(%y%-1901)*365 + (%y%-1901)/4 + %d% + (!(%y% %% 4))*(!((%m%-3)^&16))
    set /a i=(%i%+(%m%-1)*30+2*(!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))%%7+1
     

     
    как понять вот это: ...)^&16.. ?
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:44 01-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Символ "&" используется в вычислениях внутри "set /a .. " в качестве побитового (bitwise) оператора "И" (AND). Знак "^" введен, чтобы CMD воспринимал "&" как арифметический оператор, а не как разделитель консольных команд.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:32 01-06-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    Цитата:
    Посмотри справку "SET /?" для чего нужно применять "setlocal enabledelayedexpansion"  
    Поверьте на слово, для чего я применяю "setlocal enabledelayedexpansion" я знаю. Можно бы было не применять - не стал бы этого делать.
    Цитата:
    У меня они одинаковы и при включенном и при выключенном...  
    По умолчанию "delayedexpansion" ОТКЛЮЧЕНЫ и добавление в батник "setlocal disabledelayedexpansion", если до этого не было "setlocal enabledelayedexpansion" конечно ничего не изменит! Я с большим уважением отношусь к Вам и не ставлю под сомнение ваши знания, но истина, как говорят, дороже...
    Вот тест код:
    Код:
    @echo off
    setlocal enabledelayedexpansion
    set fstbilddat=17.12.2006
    set dat=%date%
    call ate2day
    echo.
    set autobuild=%w%
    set dat=%fstbilddat%
    call ate2day
    set /a autobuild=%autobuild%-%w%
    echo %%autobuild%%=%autobuild%
    pause>nul
    goto :eof
     
    ate2day
    set /a y=%dat:~6,4%&set /a m=1%dat:~3,2%-100&set /a d=1%dat:~0,2%-100
    set /a w=(%y%-1901)*365+(%y%-1901)/4+%d%-1+(!(%y% %% 4))*(!((%m%-3)^&16))  
    echo %d% %m% %y% %w%
    set /a w=(%w%+(%m%-1)*30+2*(!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))
    echo %d% %m% %y% %w%
    goto :eof
    Результат его таков:
    Цитата:
    1 6 2007 38716
    1 6 2007 38899
     
    17 12 2006 38367
    17 12 2006 38699
    %autobuild%=200
     
    Теперь закомментируем строку "setlocal enabledelayedexpansion" и результат будет:
    Цитата:
    1 6 2007 38716
    1 6 2007 38867
     
    17 12 2006 38367
    17 12 2006 38701
    %autobuild%=166
     
    И Вы будете настаивать, что разницы нет!?
    Цитата:
    но нет никакого упоминания про "setlocal enabledelayedexpansion"
    Зато там есть "setlocal" !!! К сожалению в описании нет варианта использования этой команды без параметров . Я ее трактую как сброс "enabledelayedexpansion" в исходное состояние т.е. в "setlocal disabledelayedexpansion". Не стану настаивать на своей правоте, но, приведенный выше, пример заставляет меня думать, что я все таки прав. Да и как будут восприниматься символы '!' (восклицательный знак) при "enabledelayedexpansion"!? Ведь это может быть и "признак" переменной! Незря же автор указал в начале своего батника "setlocal disabledelayedexpansion" !!!
    Обидеть Вас, не было моей задачей . Просто хотел узнать как/чем можно заменить "двоичную" математику в последних двух строках set /a w=... !?
    С уважением...
     

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 23:01 01-06-2007
    FAPSUK



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Друзья, помогите пожалуйста!  
     
    Есть текстовыйфайл. Необходимо раздербанить его на части с именами  
    даты из текста (01.01.2007_XXXXX)  
     
    Это как-то реализуемо? Помогите, пожалуйста!  
     
     
    Текстовыйфайл вида :  
    __________________________________________________________________
     
    Район: чччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
     
    01.01.2007 чччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
    чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
    чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
    чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
    чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
    чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
    __________________________________________________________________
     
    Район: чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
     
    01.01.2007 ччччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
    чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
    чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
    чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
    чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
    чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч  
    __________________________________________________________________  
     
    премного благодарен !

    Всего записей: 18 | Зарегистр. 02-03-2006 | Отправлено: 00:29 02-06-2007
    Elroir



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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    set fdate=17.12.2006
    set sdate=02.06.2007
    call :JDate 2007 06 02
    set fdays=%JDate%
    call :JDate 2006 12 17
    set sdays=%JDate%
    set /a dif=fdays-sdays
    echo Difference is %dif%
    goto :EOF
     
    :JDate
    :: Convert date to Julian
    :: Arguments : YYYY MM DD
    :: Returns   : Julian date
    ::
    :: First strip leading zeroes
    SET MM=%2
    SET DD=%3
    IF %MM% lss 10 SET MM=%MM:~-1%
    IF %DD% lss 10 SET DD=%DD:~-1%
    ::
    :: Algorithm based on Fliegel-Van Flandern
    :: algorithm from the Astronomical Almanac,
    :: provided by Doctor Fenton on the Math Forum
    :: (http://mathforum.org/library/drmath/view/51907.html),
    :: and converted to batch code by Ron Bakowski.
    SET /A Month1 = ( %MM% - 14 ) / 12
    SET /A Year1  = %1 + 4800
    SET /A JDate  = 1461 * ( %Year1% + %Month1% ) / 4 + 367 * ( %MM% - 2 -12 * %Month1% ) / 12 - ( 3 * ( ( %Year1% + %Month1% + 100 ) / 100 ) ) / 4 + %DD% - 32075
    FOR %%A IN (Month1 Year1) DO SET %%A=
    GOTO:EOF  
     

    "setlocal enabledelayedexpansion" я ввел для примера. На работу кода это не влияет.
    Идея и часть кода взята отсюда.

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

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



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

    Код:
     
    @echo off
    chcp 1251>nul
    set count=1
    for /f "delims=" %%a in (list.txt) do (
    echo %%a | find /i "район">nul && set /a count+=1
    call :sort_ "%%a")
    pause
    goto :eof
     
    :sort_
    echo %~1>> %count%.txt
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 09:18 02-06-2007
    GORA2



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

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 12:38 02-06-2007
    Robby

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как с помощью батника распаковать во всех имеющихся подкаталогах RAR архивы? Распаковка должна производиться в тот же каталог, где находится исходный архив. После распаковки исходный архив должен удаляться. Желательна обработка ошибок распаковки с записью в log файл. При ошибке распаковки исходный архив не должен быть удален.

    Всего записей: 881 | Зарегистр. 28-09-2003 | Отправлено: 13:14 03-06-2007
    melyash



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Помогите написать BAT файл, который будет выводить список из двух пунктов. При выборе 1-го запускаеться одна прога, а при выборе 2-го - другая

    Всего записей: 84 | Зарегистр. 05-05-2007 | Отправлено: 13:36 03-06-2007
    Elroir



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

    Код:
     
    @echo off
    setlocal
    echo 1 - Choice 1  
    echo 2 - Choice 2  
    set /p ch=Enter your choice -  
    if %ch:~0,1%==1 program1.exe
    if %ch:~0,1%==2 program2.exe
     

     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:41 03-06-2007
    melyash



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
    спасибо
     
    Добавлено:
    а можно ли как-нить выводить сообщения в кириллице?

    Всего записей: 84 | Зарегистр. 05-05-2007 | Отправлено: 13:46 03-06-2007
    Elroir



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

    Код:
     
    @echo off
    chcp 1251>nul  
    setlocal
    echo 1 - Выбор 1  
    echo 2 - Выбор 2  
    set /p ch=Ваш выбор -  
    if %ch:~0,1%==1 program1.exe
    if %ch:~0,1%==2 program2.exe
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:57 03-06-2007
    melyash



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

    Цитата:
    Можно

    Кракозяблы получаються

    Всего записей: 84 | Зарегистр. 05-05-2007 | Отправлено: 14:01 03-06-2007
    mitrichbel

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Сюда, наверно
     
    Есть много текстовых файлов (в нескольких папках), имена у которых состоят из двух частей - текстовой и числовой, разделенных пробелами. В текстовой тоже могут быть и пробелы, и цифры, и любые другие символы, допускаемые файловой системой.
    Мне нужно найти все файлы, у которых совпадает числовая часть их названий (то есть всё после последнего пробела в названии).  
     
    Например, имеем:
    sd 15.txt
    sd sd 15.txt
    15 15.txt
    sd 25.txt
    Здесь результатом должны быть первые три файла - совпадающая числовая часть 15.
     
    При этом местонахождение файлов в папках меняться не должно, насколько я понимаю.
    Как можно поступить?  
     
    Спасибо заранее

    Всего записей: 1380 | Зарегистр. 30-04-2003 | Отправлено: 14:03 03-06-2007
    Elroir



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

    Цитата:
    Кракозяблы получаються  

    Попробуй убрать строчку "chcp 1251>nul"

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:04 03-06-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

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


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru