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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Simoid
    Проверять CRC тоже просто, берешь fsum и проверяешь. Так прям, как у тебя, в батнике и будет:

    Код:

    FSUM проверить контрольную сумму из xxx.CRC
    Если сумма==правильная (то удалять части) если нет - удалять склеенный "недодел".

    только английскими буквами...
     

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 17:40 14-03-2007
    NIKZZZZ



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

    Цитата:
    copy /b xxx.001+xxx.002+xxx.003 xxx.rar

    Total разбивает нормально, такой строкой я пользовался.
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 17:59 14-03-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    NIKZZZZ
    Я тоталом не пользуюсь поэтому:
    1. Мне надо разбить им файл что бы посмотреть как,что и что в файле *.crc (уже сделал)
    2. (и самое главное) количество частей может быть разное - поэтому надо писать батничек, который анализирует количество частей, расширение файла и т.д.
    А то если ручками эту строку набирать - ничемс не будет отличаться от той-же работы в тотале
     

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 18:14 14-03-2007
    stegmatik



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
        помогите мне  плиз с батничком. зациклился на одном моменте... как создать папку имя которой будет текущая дата в формате DDMM
    помогите чем сможите,заранее благодарен!!!

    Всего записей: 19 | Зарегистр. 14-03-2007 | Отправлено: 21:58 14-03-2007
    ViSiToR



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

    Цитата:
    как создать папку имя которой будет текущая дата в формате DDMM

     
    Можно так:
     

    Код:
    MD "%date:~0,-4%"

     
    Хотя полагаю это зависит от формата времени в системе.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 22:06 14-03-2007
    stegmatik



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ViSiToR
     
     
    спасибо,попробовал создало мне папку с именем 14.03..но нада чтоб папка называлась 0314 ....

    Всего записей: 19 | Зарегистр. 14-03-2007 | Отправлено: 22:19 14-03-2007
    ViSiToR



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

    Цитата:
     нада чтоб папка называлась 0314  

    Можно так:
     

    Код:
    Set DirName=%date:~0,-5%
    MD %DirName:~3%%DirName:~0,-3%

     
    Но опять таки, сильно зависит от формата установленного в системе.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 22:57 14-03-2007
    stegmatik



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    пасибки,ты мне жизнь спас!!!
     

    Всего записей: 19 | Зарегистр. 14-03-2007 | Отправлено: 23:17 14-03-2007 | Исправлено: stegmatik, 00:00 15-03-2007
    Elroir



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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    set "command_string=copy /b"
    del /q "%temp%\file_list" 2>nul
    for /l %%a in (1,1,1000) do (
    if %%a LSS 100 set "ext=0%%a"
    if %%a LSS 10 set "ext=00%%a"
    if exist "%~n1.!ext!" (
    set found=yes
    set "command_string=!command_string! "%~n1.!ext!" +"
    echo "%~n1.!ext!">>"%temp%\file_list"
    )  
    )
    set command_string=%command_string:~0,-1% "%~n1.rar"
    if not defined found goto :EOF
    %command_string%>nul
    if not exist "%~n1.crc" (
    echo CRC file not found - unable to check integrity
    goto :EOF
    )
    for /f "skip=2 delims== tokens=2" %%b in (%~ns1.crc) do echo %~n1.rar %%b>_crc.sfv
    fsum -c _crc.sfv>nul 2>nul
    if not "%errorlevel%"=="0" (
    del /q "%~n1.rar" 2>nul
    echo Merge failed
    ) else (
    for /f "tokens=*" %%A in (%temp%\file_list) do del /q %%A
    del /q "%~n1.crc" 2>nul
    echo Merge succeeded
    )
    del /q "%temp%\file_list" 2>nul
    del /q _crc.sfv 2>nul
     

    Батник запускается с одним аргументом - именем одной из частей. Пример: merge.bat part.001. Если не найден файл .crc, батник создает архив, но не стирает части. При работе используется утилита fsum, про которую написал igor_andreev.
     
     
    Добавлено:
    stegmatik

    Цитата:
    с датой разобрался...но вот сразу возник ещё один вопрос как создать эту папку в  каталоге D:\temp\ и как скопировать в неё  папку test из D:\temp\test


    Код:
     
    Set DirName=%date:~0,-5%  
    MD d:\temp\%DirName:~3%%DirName:~0,-3%
    xcopy D:\temp\test d:\temp\%DirName:~3%%DirName:~0,-3%\test /s
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 23:40 14-03-2007 | Исправлено: Elroir, 05:53 15-03-2007
    WSQ

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    По поводу замены текста в файле (пример в шапке)
    ещё есть утилита sed - Windows версия
    Примерное использование:    
    sed -e "s/строка-поиска1/строка-замены1/g"  "s/строка-поиска2/строка-замены2/g" file1 > file2
    способна при одном проходе делать сразу несколько замен. При больших объёмах текста и количества замен способна сэкономить время.

    Всего записей: 47 | Зарегистр. 14-06-2006 | Отправлено: 00:08 15-03-2007
    stegmatik



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    чёт у меня не получается...
     
     
    xcopy D:\temp\test d:\temp\%DirName:~3%%DirName:~0,-3%\test /s  
     
    не копируется папка test в %DirName:~3%%DirName:~0,-3% может потому что  папка пустая?? но я прбовал  с  /e вместо /s  тоже самое...

    Всего записей: 19 | Зарегистр. 14-03-2007 | Отправлено: 00:27 15-03-2007
    Elroir



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

    Цитата:
    не копируется папка test в %DirName:~3%%DirName:~0,-3% может потому что  папка пустая??

    Именно поэтому и не копируется. Попробуй так:

    Код:
     
    Set DirName=%date:~0,-5%
    MD d:\temp\%DirName:~3%%DirName:~0,-3%\test
    xcopy D:\temp\test d:\temp\%DirName:~3%%DirName:~0,-3%\test\ /s
     


    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 00:33 15-03-2007
    stegmatik



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    получилось!!!!  
    а как создать  папку ,чтоб её имя было   вчерашняя дата???

    Всего записей: 19 | Зарегистр. 14-03-2007 | Отправлено: 00:38 15-03-2007 | Исправлено: stegmatik, 00:41 15-03-2007
    Elroir



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

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

    Посмотри примеры в шапке - http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=0&limit=1&m=3#1

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 00:43 15-03-2007
    ViSiToR



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

    Цитата:
    ещё есть утилита sed - Windows версия

    А она регистрозависема? (регистр букв играет роль).
     

    Цитата:
    способна при одном проходе делать сразу несколько замен.

    Да вроде и та что в шапке это умеет.

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

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



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

    Цитата:
    Батник запускается с одним аргументом - именем одной из частей...

    Крутой код  Есть чему поучиться.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 04:03 15-03-2007
    euheny



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
    Да имя компа у меня как раз уникальное , а вот юзверь на всех компах один - system.
    На этом форуме как нигде работает принцип две головы.
    Однако как с этим
    Цитата:
    в зависимости от свободной виртуальной памяти

    Сюда подойдёт и общий размер RAM , который в свойствах светится.

    Всего записей: 3925 | Зарегистр. 22-11-2006 | Отправлено: 04:17 15-03-2007
    Maza Faka



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

    Цитата:
    В зависимости от свободной виртуальной памяти

     
    Вот:  

    Код:
     
    @Echo off
    For /F "Tokens=*" %%a in ('SystemInfo') do (
    For /F "Tokens=1,2,3,4" %%k in ("%%a") do (
    If "%%m"=="доступно:" (
    Set "freeMem=%%n"
    )
    )
    )
    If "%freeMem%" gtr "1 000" Copy MyFile.exe C:\MyProgram
    If "%freeMem%" lss "1 000" Echo Error!!
     

     
    Единственное но, сохранять батник надо в кодировке DOS, иначе в русской Винде работать НЕ будет! ("Chcp 1251" не помогает), значения "1 000" заменишь на свои, оператор "gtr"- больше, оператор "lss"- меньше

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:41 15-03-2007 | Исправлено: Maza Faka, 13:53 15-03-2007
    KapralBel



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

    Код:
    @Echo Off
    chcp 1251 >Nul
    md Tmp >Nul 2>&1
    For %%a in (*.crc) Do Call :crc1 %%~sa
    GoTO :EOF
     
    :crc1
    Set flSize=0
    Set flName=q
    Set flNameN=q
    Set flCRC32=0
    For /F "tokens=1-2 delims==" %%a in (%1) Do Call :crc2 %%a "%%b" "%%~nb"
    Set flSize=%flSize:~1%
    Set flSize=%flSize:~,-1%
    Set flCRC32=%flCRC32:~1%
    Set flCRC32=%flCRC32:~,-1%
    Set flName=%flName:~1%
    Set flName=%flName:~,-1%
    Set flNameN=%flNameN:~1%
    Set flNameN=%flNameN:~,-1%
    For %%a in ("%flNameN%.*") Do call :crc3 "%%a"
    CRC32 "Tmp\%flName%">Tmp\CRC.txt
    For /F "tokens=1-2 delims=:" %%a in (Tmp\CRC.txt) Do Set flCRC32Calc=%%b
    Set flCRC32Calc=%flCRC32Calc:~1%
    If /i %flCRC32Calc% == %flCRC32% GoTo :CRC32_OK
    GoTo :CRC32_Fail
    GoTo :EOF
     
    :crc2
    If /i %1==size Set flSize=%2
    If /i %1==crc32 Set flCRC32=%2
    If /i %1==filename (Set flName=%2) & (Set flNameN=%3)
    GoTo :EOF
     
    :CRC3
    Set n=%1
    Set flExt=%n:~-4%
    Set flExt=%flExt:~0,3%
    If /i %flExt% == crc GoTo :EOF
    If %flExt% == 002 (Copy /b "%flNameN%.001"+"%flNameN%.002" "Tmp\%flName%" >Nul) & (GoTo :EOF)
    If %flExt% == 001 GoTo :EOF
    Copy /b "Tmp\%flName%"+%N% "Tmp\%flName%" >Nul
    GoTo :EOF
     
     
    :CRC32_OK
    Echo "Tmp\%flName%" - OK
    GoTo :EOF
     
    :CRC32_Fail
    Echo "Tmp\%flName%" - CRC32 неверный
    GoTo :EOF
     

    Отличия от варианта Elroir
    1. Обработка всех файлов с расширением .crc в папке
    2. все результирующие файлы создаются в папке Tmp
    3. используется утилита
    4. не прописаны действия по удачному/неудачному объединению
    5. из файла .crc - берется имя файла (а не просто расширение .rar)

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 09:42 15-03-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помню, году так в 2002, мне надо было с древнего компа малость инфы вытащить, а на нем ни USB, ни естественно пишущего сидюка, никаких коммуникаций. Нашлась у знакомого Iomega ZIP, был такой девайс до изобретения флешек, втыкался в LPT, похож на дискету 1.44, только вмещал в себя аж 100 Мб. Никаких файл-менеджеров на компе не было, батники я тогда писать почти не умел, только самые простейшие, но был WinRAR, так я положил в папку SendTo батник типа(ну недословно):
    rar a -v10485760b -m5 -rr3p "%~dpn1" %1
    и отправлял нужные папки(не файлы) по одной на этот батник. Вполне мило покрошил все на куски по 10 Мб и перенес на другой комп.
     
    А щас вот подумал, почему бы и Simoid не прикрутить для этого дела RAR к Тоталу? Резать файлы - это я так подозреваю, куда-то надо переносить и не факт, что не забудешь взять с собой батник и утиль для проверки CRC. А WinRAR сам отлично и разрежет и CRC проверит и самое огромное преимущество - добавит инфу для восстановления или вообще отдельный том для восстановления. И sfx сделает, если надо. В Far-e такое точно легко сделать, в Farmenu.ini добавить буквально пару строчек вроде:
    :  Create !.rar Volumes
        start /min rar a -v!?Size of each volume b,k,m?1456664b! -rr5p ! !.!
    эт без проверки, у меня надобности файлы резать нет и пункта такого в меню нет, но как-нить так делается, ключи rar.exe по вкусу добавить... В Тотале наверно тоже можно на какую-нибудь комбинацию клавиш повесить

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 10:59 15-03-2007 | Исправлено: igor_andreev, 11:05 15-03-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