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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Maza Faka
    спасибо за помощь
     
    есть очередной проект в голове, помогите пожалуйста реализовать
     
    есть Symantec GostCast Server он предназначен для приема и оправки имиджей по сети, ожидая подключения клиентов Ghost, запускаться он может с команджной строки пример
     

    Код:
    GhostSrv.exe c:\new\backup001.gho backup -D -С
    это означает что он запустится для приема имиджа диска который снимает клиент Ghost с ПК и закроется (ключик -С), проблема в том что путь к имиджу, всегда один c:\new\backup001.gho и меняется только руками.
    если проверять наличие файла backupXXX.gho то можно снова запустить но уже так

    Код:
    GhostSrv.exe c:\new\backup002.gho backup -D -С
    далее искать последний.
    чтобы сервер всегда был готов принять новый образ -бэкап с новым именем
     
    спасибо
     
    P.S. далее после разворачивания нового предустановленного образа уже на ПК, этот образ открывается GHOSTEXP.EXE и перетаскиваются на рабочий стол необходимые данные.

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 22:08 27-07-2007 | Исправлено: JohnRD, 15:59 28-07-2007
    KapralBel



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

    Код:
    @Echo Off
    Set num=1
    For /L %%a In (1,1,111) Do Call :ex %%a
    :NewFile
    Set NewFile=c:\new\backup%num%.gho
    Echo %NewFile%
     
    GoTo :EOF
     
    :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
     

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

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
     
    чтобы не было в паке всегда на выходе это
    C:\new>1.cmd
    c:\new\backup01   .gho

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 15:48 28-07-2007
    KapralBel



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

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 21:31 28-07-2007
    MsdLamer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно ли с помощью bat файла в текстовом файле вырезать или скопировать определенный кусок текста и вывести все это в отдельном файле?
    И как реализовать подскажите пожалуйста.

    Всего записей: 53 | Зарегистр. 26-07-2007 | Отправлено: 23:42 28-07-2007
    uZver



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

    Цитата:
    в текстовом файле вырезать или скопировать определенный кусок текста

    Если номера строк и их кол-во известны то см. FOR /?, а именно параметры skip и tokens
     
    А если не известны , то тоже смотри FOR /?, но уже тщательнее )

    Всего записей: 195 | Зарегистр. 10-10-2003 | Отправлено: 00:40 29-07-2007
    01MDM



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

    Цитата:
    И как реализовать подскажите пожалуйста

     
    Решения для одного случая могут не подойти в другом. Нет конкретики. Вот здесь можно найти много полезного:

    Код:
     
    hh ntcmds.chm
     
     

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    уточняю. Кпримеру есть строки:
     
    Крыльями белоснежными
    Душу мою мятежную
    Бережно, ангел, укрой.
    Пеньем её успокой.
    Страсти её усмири,
    Нежной её назови.
    Очень устала она
    Без долгожданного сна.
    Отдых там ждёт под покровом
    Скрыта нетленным альковом...
    Будет тихонько дремать
    Мне перестав докучать.  
     
    и допустим мне надо начиная со строки "Страсти её усмири," (включая эту строку) и заканчивая "Будет тихонько дремать" (так же включая эту строку) вывести в новый файл new.txt. Подскажите пожалуйста на примере.

    Всего записей: 53 | Зарегистр. 26-07-2007 | Отправлено: 09:29 29-07-2007
    Tipulatoid



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

    Код:
    @echo off
    setlocal enabledelayedexpansion
    set count=0
    for /f "skip=4 tokens=*" %%a in (poem.txt) do (
       set /a count=!count!+1
       if /i !count! leq 7 echo %%a>>new.txt
    )

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Хорошо, спасибо, работает. И еще маленький вопросик, а если к примеру я не знаю сколько строчек сверху и сколько снизу, между тем текстом который я хочу вывести в файл, как быть? Может быть как-то по содержимому строки первой и последней строки?

    Всего записей: 53 | Зарегистр. 26-07-2007 | Отправлено: 11:06 29-07-2007
    Tipulatoid



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

    Код:
    @echo off
    setlocal enabledelayedexpansion
    set file=poem.txt
    for /f "skip=1 delims=[]" %%a in ('find /n "Страсти её усмири," %file%') do set start=%%a
    for /f "skip=1 delims=[]" %%a in ('find /n "Будет тихонько дремать" %file%') do set end=%%a
    set /a start=%start%-1
    set /a end=%end%-%start%
    set count=0
    for /f "skip=%start% tokens=*" %%a in (%file%) do (
       set /a count=!count!+1
       if /i !count! leq %end% echo %%a>>new.txt
    )

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

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

    Цитата:
    @echo off  
    setlocal enabledelayedexpansion  
    set file=poem.txt  
    for /f "skip=1 delims=[]" %%a in ('find /n "Страсти её усмири," %file%') do set start=%%a  
    for /f "skip=1 delims=[]" %%a in ('find /n "Будет тихонько дремать" %file%') do set end=%%a  
    set /a start=%start%-1  
    set /a end=%end%-%start%  
    set count=0  
    for /f "skip=%start% tokens=*" %%a in (%file%) do (  
       set /a count=!count!+1  
       if /i !count! leq %end% echo %%a>>new.txt  
    )  

     
    пишет Страсти её усмири, - файл не найден. Что делать?

    Всего записей: 53 | Зарегистр. 26-07-2007 | Отправлено: 11:32 29-07-2007
    01MDM



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

    Код:
     
    @ECHO OFF
    setlocal enabledelayedexpansion
    set /a count=0
    for /f "delims=" %%i in ('type poem.txt') do (
        set string=%%i
        if "!string!"=="Страсти её усмири," goto:next
        set /a count+=1
    )
    :next
    for /f "skip=%count% delims=" %%i in ('type poem.txt') do (
        set string=%%i
        echo !string! >>new.txt
        if "!string!"=="Будет тихонько дремать" goto:eof
        )
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:42 29-07-2007
    Tipulatoid



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

    Цитата:
    пишет Страсти её усмири, - файл не найден.  Что делать?  

    Черт его знает У меня все работает. Ты когда с форума копировал код, пробелы в конце строк удалил? И еще - в какой кодировке стихотворение?

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

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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    MsdLamer
    Ещё один вариант, без подсчёта строк:

    Код:
     
    @echo off
     
    for /f "delims=" %%a in (test.txt) do (
    echo %%a | findstr /c:"Страсти её усмири">nul
    if not errorlevel 1 set flag=yes
    echo %%a | findstr /c:"Будет тихонько дремать">nul
    if not errorlevel 1 (
    set flag=
    echo %%a>> out.txt)
    if defined flag echo %%a>> out.txt
     )
     

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

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

    Код:
     
    @Echo Off  
    :LOOP
    Set num=1  
    For /L %%a In (1,1,111) Do Call :ex %%a  
    :NewFile                                                      --- для чего эта метка? убрать?
    Set NewFile=c:\new\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
     

     
    можно ли сделать так чтобы при удалении первых файлов backup001, backup002 продолжало создавать следующие номера, а по достижении 100 или 999 начинало с 001,
    я хочу удалять первые по прошествию некоторого времени.
    спасибо
     
     
    если не сложно что означают эти записи
    (1,1,111) множество каких значений
    Set nu=000%1  
    Set nu=%nu:~-3%  
    или в кратце принцип работы

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



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

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



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

    Код:
     
    @ECHO OFF
    setlocal enabledelayedexpansion
     
    for /f "delims=" %%i in ('type poem.txt') do (
        set string=%%i
        if "!string!"=="Страсти её усмири," goto:next
        echo !string! >>new.txt
        )
    :next
    set /a count=0
    for /f "delims=" %%i in ('type poem.txt') do (
        set string=%%i
        if "!string!"=="Отдых там ждёт под покровом" goto:res
        set /a count+=1
        )
    :res
    for /f "skip=%count% delims=" %%i in ('type poem.txt') do (
        set string=%%i
        echo !string! >>new.txt    
        )
     
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:39 29-07-2007
    Maza Faka



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

    Код:
     
    @echo off
    for /f "delims=" %%a in (test.txt) do (
    echo %%a | findstr /c:"Страсти её усмири">nul
    if not errorlevel 1 set flag=yes
    echo %%a | findstr /c:"Будет тихонько дремать">nul
    if not errorlevel 1 set flag=
    if not defined flag echo %%a>> out.txt
    )
     

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru

    Рейтинг.ru