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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ а зачем у тебя столько ключиков у for?
    Код:
    Set Name=C:\файлы за 2009г\файлы за апрель\12 апреля\11-30.txt  
    FOR %%i IN ("%name%") DO Set "Name=%%~dpi"
    FOR %%i IN ("%name:~0,-1%") DO Set "Name=%%~dpi"
    FOR %%i IN ("%name:~0,-1%") DO Set "Name=%%~nxi"
    Echo %name%

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 02:17 12-10-2009
    ponand

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А по первым двум вопросам из того же поста может кто нибудь подсказать

    Всего записей: 56 | Зарегистр. 14-07-2008 | Отправлено: 11:50 12-10-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ponand а там проще отделить findstr от перебора файлов, обход файлов делать через for /r ( и из него брать текущее полное имя) а найденную строку выдаст findstr - через for /f загоняешь ее в переменную. как-то так:
    Код:
    for /r "C:\файлы за 2009г" %%a in  ( *.txt ) do for /f "delims=" %%s in (' findstr подстрока "%%~a" ') do set "string=%%s" && set "fullname=%%~a" && call :_proc
    goto :eof
     
    :_proc
    rem тут вычисляешь что надо
    goto :eof
    :_proc вызывается на каждый файл столько раз, сколько раз найдена подстрока

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 12:23 12-10-2009 | Исправлено: wolf0425, 12:29 12-10-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А кто-нибудь встречал анимацию в батниках?  
     
     
    и еще:
    у меня файл zero_1.bat с кодом:
    @echo off
    echo %0
    pause
     
    выдает output:
    "G:\scripts\zero_1.bat"
    Для продолжения нажмите любую клавишу . . .
     
    но echo %0 - должен ведь выдавать zero_1.bat (без пути) ???

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 15:15 12-10-2009 | Исправлено: mugil_cephalus, 16:52 12-10-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    Должен выдавать "zero_1". Какая виндоус?
     
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:20 12-10-2009
    bredonosec



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

    Цитата:
    если идущая перед ним команда не выдала ошибку - выполнить ту что после знака. Т.е. если комп пингуется - пробуем проверить наличие каталога и скопировать файл, не пингуется - сразу берем следующий по списку.  

    как-то странно реагирует - по секунд 15 выводит в консоли данную строку с каждым именем, после чего следующую..
    Вроде б должно писать, но на целевых ничего не пишется. пусто.

    ----------
    Вопрос: 'Что человек курит?' как правило возникает не когда ты слышишь, как он дышит, а когда видишь, что он пишет
    Пропеллер играет роль вентилятора, он останавливается -пилот потеет
    Аськи нету.

    Всего записей: 16269 | Зарегистр. 13-02-2003 | Отправлено: 17:21 12-10-2009
    mugil_cephalus

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

    Цитата:
    Должен выдавать "zero_1". Какая виндоус?  
     

    я ожидал выдачу zero_1 (без кавычек)
    xp pro ru sp3

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 17:31 12-10-2009
    wolf0425



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

    Цитата:
    но echo %0 - должен ведь выдавать zero_1.bat (без пути) ???
    подозреваю, что претензии тебе надо адресовать авторам ФАРа, из которого ты запускал батник.
    в смысле - %0 строго равен тому, что cmd получил в командной строке для исполнения, т.е. путь и расширение там могут и присутствовать и отсутствовать в соотвествии с тем как запускали.
    Если нужно строго имя+расширение батника - писать надо echo %~nx0

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 17:42 12-10-2009 | Исправлено: wolf0425, 17:48 12-10-2009
    NIKZZZZ



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

    Цитата:
    зачем у тебя столько ключиков у for?

    Перестраховка. Я точно знаю, как поведет себя эта команда с ключиками, но не уверен, что твой вариант, например, нормально среагирует на пробелы в именах.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 17:56 12-10-2009
    mugil_cephalus

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

    Цитата:
    подозреваю, что претензии тебе надо адресовать авторам ФАРа, из которого ты запускал батник.

    не far'om, а mouse doubleclick'om
     
    Добавлено:
    wolf0425
    запустил из cmd:  
    Microsoft Windows XP [Версия 5.1.2600]
    (С) Корпорация Майкрософт, 1985-2001.
     
    F:\Documents and Settings\admin>zero_1.bat
    zero_1
    Для продолжения нажмите любую клавишу . . .
     

    Цитата:
    подозреваю, что претензии тебе надо адресовать авторам ФАРа, из которого ты запускал батник.

    биллу гейтсу, что-ли, претензии, получается?..
     
     
    wolf0425
    а анимацию в батниках ты не встречал?..

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 17:58 12-10-2009 | Исправлено: mugil_cephalus, 18:06 12-10-2009
    slech



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    всем привет
    подскажите пожалуйста как выводить в каждый день кол-во файлов созданых вчера ?
     
    спасибо.

    Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 19:05 12-10-2009
    wolf0425



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

    Цитата:
    не уверен, что твой вариант, например, нормально среагирует на пробелы в именах.  
    совершенно нормально - уже более 10 лет имена с пробелами создаются еще при инсталляции виндов, к тому же у нас в примере как раз имена с пробелами - тебе был повод наконец проверить и точно узнать
    проблема бывает не в пробелах, а в обязательных для таких имен кавычках - но как раз у for без ключей выделенных символов нет...
     
    Добавлено:
    Существуют ли какие-то консольные утилиты, позволяющие сообщить сервису QoS о приоритетности трафика, отправляемого и получаемого program.exe ?

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 21:22 12-10-2009 | Исправлено: wolf0425, 21:43 12-10-2009
    ponand

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Както не получается использовать For /r вернее For /r работает нормально а вот с присвоением переменной результата поиска косяк наверно из за того что в найденной строке есть спец символы : % я попытался сразу разобрать найденную строку добавив ключи разбора но тогда For ругается на %%~а как дальше быть?

    Всего записей: 56 | Зарегистр. 14-07-2008 | Отправлено: 23:58 12-10-2009
    wolf0425



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

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 00:45 13-10-2009
    ponand

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

    Всего записей: 56 | Зарегистр. 14-07-2008 | Отправлено: 03:52 13-10-2009
    wolf0425



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

    Цитата:
    смогу ли я вернуть обратно в тело цикла результат?  
    ну если в Call не использовалось setlocal - то не вижу проблемы. ты только имей в виду, что в теле цикла %переменные% заменяются на свои значения до начала выполнения цикла. т.е. придется поставить setlocal enabledelayedexpansion в начало батника и и использовать !переменные! в теле цикла.
     
    А смысл что-то вертать в тело? не проще всё что можно вынести в Call?

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 05:34 13-10-2009 | Исправлено: wolf0425, 05:37 13-10-2009
    Iacoyn



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ - как с помощью bat (cmd) файла заменить строку в текстовом файле?
    Хочется автоматизировать процесс изменения дистрибутива XP для загрузки с USB HDD.
    Желательно без использования сторонних утилит
    Среди прочего есть ещё похелание - тем же способом добавлять строки текста в файл.
    Например
    Взять inf от Nvidia и заменить в нём все вхождения строки
    HKLM,"Software\NVIDIA Corporation\Global\NVTweak",NoPages,%REG_DWORD%,0x40000000
    на
    HKLM,"Software\NVIDIA Corporation\Global\NVTweak",NoMenus,%REG_DWORD%,0x00000000
    HKLM,"Software\NVIDIA Corporation\Global\NVTweak",NoPages,%REG_DWORD%,0x00000000
    Спасибо!

    Всего записей: 2418 | Зарегистр. 07-05-2002 | Отправлено: 09:38 13-10-2009
    01MDM



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

    Цитата:
    Желательно без использования сторонних утилит

    Чистый батник не лучшее решение для работы с текстом.
    Лучше воспользоваться sed-ом:

    Код:
     
    @echo off
    setlocal
     
    set "s=^строка поиска$"
    set "r=первая строка замены\nвторая строка в замене"
     
    sed -i "s/%s%/%r%/g" file.txt
    :: 2>nul del sed*  
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:55 13-10-2009
    slay1212

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос - надо отключить ком строку частично - чтоб бат смд файлы запускались а  оболочка нет.  
      Покурив мануалы вроде при ключе  
    HKCU\Software\Policies\Microsoft\Windows\System\DisableCMD=1 все должно пахать - но не пашут батники. Как при =2 ключике. "Приглашение комстроки отключено вашим администратором". Где порылась собака?
      Если вопрос не в той теме перенаправьте плиз.

    Всего записей: 336 | Зарегистр. 28-05-2008 | Отправлено: 18:11 13-10-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2 igor_andreev KapralBel Elroir и другим (кого не знаю) гуру
     

    Цитата:
    А кто-нибудь встречал анимацию в батниках?

     
    (пардон за самоцитирование )
     
    или, похоже, что нет ?...
     
    ----------------------------------------------------
     
    P.S. добавлю и поясню: я имею в виду не GUI-анимацию, не графическую анимацию в консоли cmd, не анимацию псевдографических символов в консоли cmd, а именно достижение эффекта анимации в консоли cmd путем определенного пакетирования комманд, таких как  echo, type и других - то есть именно через батник (напрямую в нашу тему Задачи на bat-файлах), то есть использование только того, что "понимают" комманды echo и/или type (и другие), создание циклов и соответствующее их пакетирование в батник

     
    набросал маленький скрипт для примера (по этому практическому примеру индуктивным методом , думаю, станет понятна и теория анимации в батниках, а то я, со своим гуманитарным образованием, вынужден буду порытся в математ. книгах и подвспомнить интсрументарий описания уравнений ):
     
    у меня в скрипте двоеточие+дефис+закрывающая круглая скобка (а софт форума их конвертировал в эмотиконы) !
     
    @echo off
    cls
     
    set pingWait=2
     
    :start
     
    cls
    echo && ping -n %pingWait% localhost >nul 2>&1
     
    cls
    echo                       && ping -n %pingWait% localhost >nul 2>&1
     
    cls
    echo         && ping -n %pingWait% localhost >nul 2>&1
     
    cls
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo                     && ping -n %pingWait% localhost >nul 2>&1
     
    cls
    echo.
    echo.
    echo.
    echo.
    echo.
    echo && ping -n %pingWait% localhost >nul 2>&1
     
    cls
    echo.
    echo.
    echo.
    echo @ && ping -n %pingWait% localhost >nul 2>&1
    echo    @ && ping -n %pingWait% localhost >nul 2>&1
    echo       @ && ping -n %pingWait% localhost >nul 2>&1
     
    cls
    echo.
    echo.
    echo.
    echo       @ && ping -n %pingWait% localhost >nul 2>&1
    echo    @ && ping -n %pingWait% localhost >nul 2>&1
    echo @ && ping -n %pingWait% localhost >nul 2>&1
     
    cls
    echo.
    echo.
    echo.
    echo                   @ @ @ @ @ && ping -n %pingWait% localhost >nul 2>&1
     
    goto start

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 18:17 13-10-2009 | Исправлено: mugil_cephalus, 22:45 15-10-2009
       

    Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru