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

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

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

vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 101

   

vu1tur



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

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 17:45 04-09-2010 | Исправлено: Accessor, 18:04 28-09-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Saymer
    Я бы не рекомендовал удалять файлы по маске, да еще рекурсивно. А вообще:

    Код:
     
    del /s /f /a \*1111*
     

     
    Удалит все файлы на текущем разделе, которые подходят под эту маску. Т.е имеющие последовательность 1111
     
    Лучше сначала проверить:

    Код:
     
    dir /b /s /a \*1111*
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:52 27-10-2010
    ZWowa

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

    Всего записей: 57 | Зарегистр. 01-11-2007 | Отправлено: 14:16 27-10-2010 | Исправлено: ZWowa, 16:07 15-11-2010
    Saymer

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    По поводу FOR честно говоря не понял, поступил следующим образом.
    Создал 1.cmd с содержанием:
    del /F /S /A: *12345678*.*
     
    т.е. он у меня удаляет все файлы, ну например созданый 123456789.txt
     
    Но проблема, что он удаляет только с того диска, с которого запускается
     
    При указании например
    c:\del /F /S /A: *12345678*.*
    d:\del /F /S /A: *12345678*.*
    e:\del /F /S /A: *12345678*.*
     
    Вылетает сразу. Как сделать, что бы поиск был по всем дискам, а не на диске запуска?

    Всего записей: 23 | Зарегистр. 06-02-2008 | Отправлено: 14:29 27-10-2010
    01MDM



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

    Код:
     
    @echo off
     
    for %%i in (q w e r t y u i o p a s d f g h j k l z x c v b n m) do if exist %%i:\ del /s /a /f %%i:\*12345678*.*
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:39 27-10-2010
    Saymer

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    01MDM, спасибо, действительно работает.  
    В скобках как понимаю указаны буквы дисков, которые нужно перебрать последовательно для поиска так?
     
    Если нужно удалить несколько файлов, с разными именами, несколько строк где в конце имя искомого файла верно?
     
    Тут ещё возник вопрос, не верно интерпретируются кирилистические символы названий файлов.
     
    Например нужно удалить файл удалименя.txt
    пишу

    Код:
     
    @echo off
     
    for %%i in (q w e r t y u i o p a s d f g h j k l z x c v b n m) do if exist %%i:\ del /s /a /f %%i:\*удалименя*  
     

    Но получается, глюк с кодировкой и выводится следующие примерно
     

    Код:
     
    Не удается найти e:\*єфрышьхэ
    F:\*, Продолжить [Y(да)/N(нет)]? n
    f:\*, Продолжить [Y(да)/N(нет)]? n
     

    Как побороть это можно?
    Поборол, сохранил в кодировке 866 кириллица. Нормально стало.
     
    Ещё возник вопрос, разобрался, удаляет и с разными именами. Но допустим есть папка 1234567, и файл 1234567.txt, файл удаляется, а папка нет.
    А можно как то папки удалять?
     
     

    Всего записей: 23 | Зарегистр. 06-02-2008 | Отправлено: 15:02 27-10-2010 | Исправлено: Saymer, 15:22 27-10-2010
    Romanchikprivet

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425, все заработало с файлами типа txt, теперь пытаюсь переделать bat файл под xsl файл там строка типа "    <p class="foot">Дата.</p>" вот после Дата надо вставить дату не работает причем строки вообще не находит. В чем может быть проблема?
     
    Добавлено:
    причем вот это где пусто это пробелы...
     
    Добавлено:
    Может можно как то по номеру строки и позиции сделать?!....

    Всего записей: 13 | Зарегистр. 20-10-2010 | Отправлено: 16:06 27-10-2010
    wolf0425



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

    Код:
    sed -r "s;(<p class=\x22foot\x22>)Дата.*(</p>);\1Дата %date%\2;gi" <file.txt  |more >file2.txt  && move /y file2.txt file.txt  

    и это... xsl у тебя в какой кодировке? надеюсь, "Windows-1251"
     
    Добавлено:

    Цитата:
    Может можно как то по номеру строки и позиции сделать?!....
    можно. а ты уверен что они всегда одни и те же?

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 18:45 27-10-2010
    01MDM



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

    Цитата:
    файл удаляется, а папка нет.  

    Папки удаляются командой rd

    Код:
     
    rd /s /q "Папка"
     

    Можно сохранять и в вин кодировке, но тогда надо указать кодировку для батника:

    Код:
     
    @echo off
    1>nul chcp 1251
     
    тело батника
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:19 27-10-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    del

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 21:24 27-10-2010 | Исправлено: bomzzz, 21:25 27-10-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1. как бы в Windows7 проиграть звуковой файлик? sndRec32 там упразднили
    2. если проигрыватель будет запущен от системы - юзер за компом звук вообще услышит? (на Windows7, в ХР проблем нет)

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 11:01 28-10-2010
    lizun



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, как внести в переменную символ ">"?
    Мне в зависимости от некоторых условий нужно то дописывать в файл, то начинать файл заново (ведется обычный лог и используется перенаправление вывода в файл).
    То есть мне нужно чтобы работала такая конструкция:

    Код:
    set UseLogAddingMode=^>
    echo test>%UseLogAddingMode%c:\file.txt
    pause

    Всего записей: 437 | Зарегистр. 16-01-2007 | Отправлено: 13:23 28-10-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    экранировать знаком ^
     
    Добавлено:
    %UseLogAddingMode%c:\file.txt  
    то есть?????
     
    Добавлено:
    if сделай и в зависимости от результата переход на такой оператор >> и такой >

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 13:23 28-10-2010
    Romanchikprivet

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо, wolf0425. Все работает

    Всего записей: 13 | Зарегистр. 20-10-2010 | Отправлено: 13:30 28-10-2010
    lizun



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

    Цитата:
    %UseLogAddingMode%c:\file.txt  
    то есть?????  

    То есть в этой переменной будет один символ ">" либо эта переменная будет пустой.

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

    И чтобы мне в нескольких местах не усложнять это дело с if я и решил, что подставлю эту переменную, соответственно получу либо >> либо >

    Всего записей: 437 | Зарегистр. 16-01-2007 | Отправлено: 13:42 28-10-2010 | Исправлено: lizun, 13:43 28-10-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    врядли батники такое допускают, самомодифицирующий код делается прямым редактированием оперативной памяти
     
    Добавлено:
    надо же - допускают. у меня работает

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 13:47 28-10-2010
    lizun



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz
    а такой код работает в зависимости от значений UseLogAddingMode в Yes и No?

    Код:
    rem  
    set UseLogAddingMode=Yes
    rem set UseLogAddingMode=No
     
    if "UseLogAddingMode"=="Yes" (
     set a=^>
    ) else (
     set a=
    )
    echo "%a%">%a%c:\test.txt
    pause
    pause

    Всего записей: 437 | Зарегистр. 16-01-2007 | Отправлено: 13:56 28-10-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    if "UseLogAddingMode"=="Yes" (
    echo >>c:\test.txt
    ) else (
    echo >c:\test.txt
    )
    pause

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:00 28-10-2010 | Исправлено: bomzzz, 14:00 28-10-2010
    smirnvlad

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

    Цитата:
    if "UseLogAddingMode"=="Yes" (

    такой нет
    а вот такой работает
    if "%UseLogAddingMode%"=="Yes" (

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 14:10 28-10-2010
    lizun



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

    Цитата:
    а вот такой работает
    if "%UseLogAddingMode%"=="Yes" (  

    Спасибо!
    какой глупый косяк был и ведь не заметил бы ещё долго, чувствую...
    bomzzz, smirnvlad, спасибо, ребята!

    Всего записей: 437 | Зарегистр. 16-01-2007 | Отправлено: 14:35 28-10-2010
    Saymer

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Снова возникли вопросы. По поводу удаления папки командой rd вчера нашел, но нужно прописывать путь к папке, а путь неизвестен получается.
     
    Возникли пару вопросов ещё:
    1) Как сделать задержку вывода на экнан?
    Т.е. имеется  

    Код:
     
    @echo off
    Echo Выполняется поиск, пожалуйста ждите...
    Echo Это может занять несколько минут...
     

    Проходит время до вывода следующих сообщений  

    Код:
     
    for %%i in (c d e f g h i j k l m n o p q) do if exist %%i:\ del /s /a /f %%i:\*Detalizacia*.txt >nul 2>&1
    Echo 1%%
     

     
    Как вариант нашел такое решение

    Код:
     
    @echo off
    Echo Выполняется поиск, пожалуйста ждите...
    ping -n 5 127.0.0.1 > NUL
    Echo Это может занять несколько минут...
    ping -n 5 127.0.0.1 > NUL
    Echo Пожалуйста ждите...
    for %%i in (c d e f g h i j k l m n o p q) do if exist %%i:\ del /s /a /f %%i:\*Detalizacia*.txt >nul 2>&1
    Echo 1%%
     

     
    Но это вызывает задержку выполнения батника, а не вывод сообщений на экран
     
    И второй вопрос:
    А как сделать вывод переменной, процентов, в одной стоке, т.е. что бы не было  

    Код:
     
    1%
    2%
    3%
    4%
     

     
    А было 1, далее 2, далее 3 ну и т.д.

    Всего записей: 23 | Зарегистр. 06-02-2008 | Отправлено: 15:31 28-10-2010
       

    Страницы: 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 101

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 9
    vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru