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

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

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
     
    наверно да
    тоесть чтобы было так
    если отсортировать по дате
     
    .....                          удаленные
    backup004.gho
    backup005.gho  
    backup006.gho  
    backup007.gho  
    backup008.gho
    ....
    backup100.gho  
     
    backup001.gho         это новые после 100
    backup002.gho  
    backup003.gho  
     
    backup004.gho         этот будет удалять тот который вверху, если я его не удалю из за ненадобности
     
    даже наверно удалять не обязательно
     
    100 файлов умножить на 10гиг это уже 1000гиг я уже грохну какой нибудь прогой автоматом

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 13:48 30-07-2007 | Исправлено: JohnRD, 13:58 30-07-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    JohnRD
    Теперь точно объясни условия при котором надо переписывать существующий файл

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 13:59 30-07-2007
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
     
    скорее всего
    если существует файл то его просто удалить а потом вставить в echo с таким же именеем
     
    когда прога запускается с именем файла который уже есть она спросит переписать его или нет, поэтому его нужно убить до того как подставить в прогу это имя

    Код:
     
    @Echo Off
    :LOOP
    Set num=1
    For /L %%a In (1,1,111) Do Call :EX %%a
    Set NewFile=backup%num%.gho  
    Echo %NewFile%
    GhostSrv.exe c:\new\%NewFile% backup -D -C
    GoTo :LOOP
     
    :EX
    Set nu=000%1
    Set nu=%nu:~-3%
    If Not %Num%==1 GoTo :EOF
    If Exist c:\new\backup%nu%.gho GoTo :EOF
    Set num=%nu%
    GoTo :EOF
     

     
    или на Ваш взгляд - какие условия еще нужны
     
    у меня 600гиг в распоряжении чистить придеться так или иначе,
     
    главное чтобы не прерывался счет 001 002 003 004 доходит до 100 и опять сначала удаляя перед собой файлы

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 14:33 30-07-2007 | Исправлено: JohnRD, 14:41 30-07-2007
    Maza Faka



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

    Цитата:
    пример строки , которая не была обработана.

    И где там начало и конец строки блока который нужно выдрать?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:14 30-07-2007
    MsdLamer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    @echo off  
    setlocal enabledelayedexpansion  
    set input=  
    set output=  
    if exist %output% del %output%  
     
    for /f "delims=" %%i in ('more/p/s "%input%"') do (  
        set string=%%i  
        if "!string!"=="строка_начала" goto:next  
        echo !string!>>%output%  
        )  
    :next  
    set /a count=0  
    for /f "delims=" %%i in ('more/p/s "%input%"') do (  
        set string=%%i  
        if "!string!"=="строка_окончания" goto:res  
        set /a count+=1  
        )  
    :res  
    for /f "skip=%count% delims=" %%i in ('more/p/s "%input%"') do (  
        set string=%%i  
        echo !string!>>%output%  
        )  
    что-то не работает, у меня получается исходный файл дулирует свое содержимое два раза...
     
    Добавлено:
    Мастера подскажите пожалуйста ответ на вопросик:
     
    Допустим есть файлик 1.txt  и файлик 2.txt
     
    файлик 1.txt содержит текст 1000
     
    файлик 2.txt содержит текст 2000
     
    можно ли как нибудь произвести вычисления (допустим 1000+2000) и результат вывести в файлик 3.txt.
     

    Всего записей: 53 | Зарегистр. 26-07-2007 | Отправлено: 16:27 30-07-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    MsdLamer
    Файл 1.txt содержит только строку состоящую из числа 1000?
    Смотри в сторону set /?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 17:14 30-07-2007
    vmix



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Задача_2: Есть две папки NEW OLD с файлами , нужно файлам папки new дать имена файлов папки old, порядок не важен.
     
    Пример:
    new\0946a8c0545ddf653505e450001.fd
    ..
    old\0946a8c0545de2558505e450039.fd
    ..
    ren  new\0946a8c0545ddf653505e450001.fd old\0946a8c0545de2558505e450039.fd
    ..
     
    Не могу придумать, как это сделать в цикле..
     

    Всего записей: 163 | Зарегистр. 22-10-2002 | Отправлено: 17:17 30-07-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    ну весь файл кидать смысла нет
    ну а строки у меня примерно такие:
    — начальная
    CREATE TABLE `_download_requests` (
    — конечная
    CREATE TABLE `_er_ytm_menu` (
    в начало и конец добавить любого хлама по вкусу
    я привел одну из самый сложных строк которая не обработалась
    MsdLamer
    а не работает потому что не заданы входной и выходной файлы
    set input=
    set output=
    а также строки
    "строка_начала"
    "строка_окончания"

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 17:28 30-07-2007
    timex

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Сделал батник, который создаёт и обновляет бекап-копию рабочего каталога. Допустим c:\work\*.* на e:\backup\work\*.*
     
    Хочу дополнить его такой штукой, которая удаляла бы файлы из бэкапа, отсутствующие в рабочем каталоге.
    Например, переименовал файл, а в резервной копии он остался со старым именем...
     
    Способ полностью сначала удалять, а потом копировать - не подходит, т.к. бэкапится всё на медленную флешку. Да и размер файлов большой...
     
    Догадываюсь, что как-то надо использовать if not exist, но как именно?
    А может лучше создать списки файлов и ставнивать их построчно?
     
    В общем, помогите!
     
    P.S. Винда 98SE
     
     
    Да, может кто не знал, но для того, чтобы удалить временную переменную, можно ей присвоить пустую строку, написав:  

    Код:
    set переменная=

    Всего записей: 44 | Зарегистр. 26-12-2005 | Отправлено: 19:35 30-07-2007 | Исправлено: timex, 20:20 30-07-2007
    nusman

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем доброго дня! Может я повторюсь но искать времени нет не подскажите как создать батничек чтоб в оределенное время пользователей акуратно из базы 1С вышвыривало и создавало выгрузкку базы и отправляло ее по FTP? Может уже где-то это обсуждалось?

    Всего записей: 2 | Зарегистр. 26-07-2007 | Отправлено: 23:50 30-07-2007
    Maza Faka



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

    Цитата:
    нужно файлам папки new дать имена файлов папки old


    Код:
     
    @echo off
     
    for %%a in (old.tmp new.tmp) do if exist %%a del /f /q %%a
     
    set count=2
    set new=c:\new
    set old=c:\old
     
    for %%a in (%old%\*.fd) do echo %%~nxa>> old.tmp
    for %%a in (%new%\*.fd) do echo %%a>> new.tmp
     
    :ren_
    for /f "skip=%count% delims=" %%a in ('find /v "" old.tmp') do (
    for /f "skip=%count% delims=" %%b in ('find /v "" new.tmp') do (
    ren "%%b" "%%a"
    set /a count+=1
    goto :ren_
    )
     )
     
    for %%a in (old.tmp new.tmp) do del /f /q %%a
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:24 31-07-2007 | Исправлено: Maza Faka, 08:25 31-07-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Nagual
    Вот пример текста:Подробнее...
    И код разбора:

    Код:
     
    @echo off
    for /f "delims=" %%a in (test.txt) do (
    echo "%%a" | findstr /c:"flood_timeout">nul
    if not errorlevel 1 set flag=yes
    if not defined flag echo "%%~a">> out.txt
    echo "%%a" | findstr /c:"maintainance_flag">nul
    if not errorlevel 1 set flag=
    )
     

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



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

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 20:13 31-07-2007
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
     
    если Вы еще не правили батник то не нужно, можно ведь отсортировать по дате и найти последний  и так все отлично работает.  
    спасибо
     
    у меня есть еще вопрос
     
    реально ли такое сделать:  
    при загрузке батника задать вопрос типа:  
    Echo Введите описание для сохраняемого образа и нажмите ENTER:
    далее пользователь введет чтото, фамилию например IVANOV нажмет ENTER
    и потом то что он ввел будет использоваться в следующей строке
     
    ghost -z1 -clone,mode=create,src=1,dst=@mcbackup -sure -split=0 -imgdesc=%DESCRIPTION%
     

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 23:11 31-07-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    if not defined flag echo "%%~a">> out.txt
    здесь надо убрать кавычки

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 23:13 31-07-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    JohnRD
    См. команду Set /? (Set /p)

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    всем спс, задача решена с помощью скрипта и регекспов
    время работы скрипта 0.662 с

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

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

    Код:
    Echo off
    chcp 1251>nul
    SET /P DESC=[Введите описание для сохраняемого образа и нажмите ENTER:]
    SET "
    ghost -z1 -clone,mode=create,src=1,dst=@mcbackup -sure -split=0 -imgdesc=%DESC%
     

     
    только не порусски...
    в досе похоже 866 а чтоб проверить в win ??

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 07:12 01-08-2007
    01MDM



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

    Цитата:
    SET "  

    Для чего эта строчка?
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 07:32 01-08-2007
    KapralBel



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

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 07:53 01-08-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