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

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



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

    Код:
    set fldr=%~dp0
    set cpath=%fldr:~0,-1%
    pushd "%~dp0%" && (
    attrib %cpath% +h +s
    )
    popd

    Если так, то та же ошибка

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 12:54 06-09-2010
    wolf0425



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

    Код:
    set "cpath=%~dp0"
    set "cpath=%cpath:~0,-1%"
    attrib "%cpath%" +h +s

    если всё равно будет ошибка - путь напиши для проверок.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 13:02 06-09-2010 | Исправлено: wolf0425, 13:05 06-09-2010
    Free_Soft



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

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 13:06 06-09-2010
    Julevar

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

    Цитата:
    Не совсем понятно зачем заморачиваться сменной mac'а через WMI. Лично я использую древний, проверенный временем хинт - через реестр. Причем при наличии прямых рук, можно написать и батник, но это уже другое дело.  
    Итак, открываем regedit...

     
    Не совсем понятно, зачем заморачиваться с реестром?
     

    Всего записей: 8 | Зарегистр. 13-02-2010 | Отправлено: 14:28 06-09-2010
    bomzzz



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

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 15:24 06-09-2010
    Deep2007



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите реализовать: В одной папке с cmd-файлом лежит файл (1.txt).  Сmd-файл делает в тексте последовательно такие замены:
     
    1. "^p   " на "@@@" - "Знак абзацаПробелПробелПробел" на "@@@"  
    2. "^p" на " "              - "Знак абзаца" на "Пробел"  
    3. "@@@" на "^p"    - "@@@" на "Знак абзаца"  
    4. "  " на " "                - "ПробелПробел" на "Пробел"  
    5. "  " на " "                - "ПробелПробел" на "Пробел"
     
    Образец текста:

    Цитата:
     
    Сейчас, по собственному выражению, он "занимается предпринимательской  
    деятельностью" - возглавляет аналитический центр "Намакон", является почетным  
    президентом Ассоциации ветеранов подразделений специального назначения и  
    спецслужб "Вымпел-Союз". Автор книг "Нужная работа", "Вымысел исключен".
         
         
         Мысли о разведке
         
         - Юрий Иванович, если кто-то решит написать историю нелегальной разведки, с  
    какого времени ему придется начинать?
         - Можно начинать с Александра Македонского, можно - с древних китайцев, а  
    еще лучше начинать с Библии. Самое первое агентурное донесение Древней Руси,  
    которое сохранилось  где-то в архивах военной разведки, это нацарапанное на  
    бересте: "Чудь встала на карелов".
     

     
    Пытался осилить сам, но не выходит. Бог не дал, видно...
    PS А надо все это для того, что я уже забодался править текст эл. книг из инета... И в Worde заменять - тоже забодался...

    Всего записей: 117 | Зарегистр. 22-03-2007 | Отправлено: 15:33 06-09-2010 | Исправлено: Deep2007, 15:38 06-09-2010
    bomzzz



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

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 15:51 06-09-2010
    Deep2007



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Это все я сейчас и делаю в Ворде, и выходит длинно. Самые непричесанные документы идут в txt обычно. Имхо, проще обработать сам сырой txt батником (все же быстрее), а в Word править орфографию.

    Всего записей: 117 | Зарегистр. 22-03-2007 | Отправлено: 16:14 06-09-2010
    bomzzz



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

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 16:20 06-09-2010
    Free_Soft



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

    Код:
    for /f "delims=" %%a in (' dir /b /ad . ') do if /i "%%~xa" equ ".tmp" rd /s /q "%%~a"

    подскажи еще как в этом выражении внести исключение для папки батника, которая в переменной %cpath% находится? т.е. удалить все имеющиеся, кроме нее

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 16:45 06-09-2010
    faithful



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

    Цитата:
    А надо все это для того, что я уже забодался править текст эл. книг из инета... И в Worde заменять - тоже забодался...

     
    В батнике спецсимволы (0х0А, 0х0D) не обработать. Я делаю или с помощью perl или в ворде на VBScript.
     
    Например VBScript:
    (Жмем Alt+F11, дважды щелкаем на  ThisDocument и вставляем)

    Код:
    Sub ProcessText()
        Set doc = ActiveDocument.Content
        doc.Find.Execute findText:="^p   ", replaceWith:="@@@", Replace:=wdReplaceAll
        doc.Find.Execute findText:="^p", replaceWith:=" ", Replace:=wdReplaceAll
        doc.Find.Execute findText:="@@@", replaceWith:="^p", Replace:=wdReplaceAll
        doc.Find.Execute findText:="  ", replaceWith:=" ", Replace:=wdReplaceAll
        doc.Find.Execute findText:="  ", replaceWith:=" ", Replace:=wdReplaceAll
    End Sub

     
    Добавлено:
    bomzzz

    Цитата:
    и какое отношение 12345 имеет к масасдресу

    оно и есть MAC адрес.

    Всего записей: 240 | Зарегистр. 09-09-2005 | Отправлено: 22:15 06-09-2010
    bomzzz



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

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 22:36 06-09-2010
    faithful



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

    Цитата:
    for /f "delims=" %%a in (' dir /b /ad . ') do if /i "%%~xa" equ ".tmp" rd /s /q "%%~a"  

    а как это вообще работает?!
    Запрашиваешь список каталогов, а сравниваешь расширение файлов, при этом хочешь удалить ВСЮ директорию?
    В любом случае, если анализируешь расширения файлов, нужно их и запрашивать:
    dir /b /a-d ., при  этом можно сразу фильтровать расширение:
    'dir /b /a-d .^|find /i ".tmp"' - получишь только строчки с этим расширением.
    Тогда команда for /f %%a in ('dir /b /a-d .^|find /i ".tmp"') do @echo %%~pa выведет список каталогов, содержащих искомые файлы.

    Всего записей: 240 | Зарегистр. 09-09-2005 | Отправлено: 22:40 06-09-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Еще задача вот. Из батника запущен екзешник командой start /wait.
    Нужно еще до закрытия екзешника, т.е. ДО полного выполнения команды start /wait принудительно его прихлопнуть.
    команда
    Код:
    taskkill /t /f /im my.exe
    не проходит. У кого-нибудь есть соображения?
     
    Добавлено:
    faithful
    так там не о файлах речь, а о папках, имена которых заканчиваются на .tmp.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 22:42 06-09-2010
    faithful



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz
    может поможет: http://forum.ru-board.com/topic.cgi?forum=62&topic=18333&start=7#8
     
    Добавлено:
    Free_Soft
    start /wait говоришь?!  

    Цитата:
    WAIT        Запуск приложения с ожиданием его завершения.

    Надо или без wait, или до start /wait делать другой start где и килять.
    А зачем такие извращения?!
     

    Цитата:
    так там не о файлах речь, а о папках, имена которых заканчиваются на .tmp.

    Понял. Тогда все равно лучше фильтровать по расширению уже при получении списка, тогда останется только проверять на предмет совпадения с переменной cpath
    for /f %%a in ('dir /b /ad .^|find /i ".tmp"') do if %%~pa equ "%cpath%" rd /s /q "%%a"

    Всего записей: 240 | Зарегистр. 09-09-2005 | Отправлено: 22:57 06-09-2010
    bomzzz



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

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 23:12 06-09-2010
    Free_Soft



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

    Цитата:
    А зачем такие извращения?!  

    О, это сложно объяснить))) Но выход нашел

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 23:21 06-09-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    faithful
    Цитата:
    а как это вообще работает?!
    Запрашиваешь список каталогов, а сравниваешь расширение файлов, при этом хочешь удалить ВСЮ директорию?  
    расширения бывают не только у имен файлов, но и у имен директорий тоже.
     
     
    Free_Soft, насколько я понимаю - ты хочешь чего-то типа такого:

    Код:
    for /f "delims=" %%a in (' dir /b /ad . ') do if /i "%%~xa" equ ".tmp" if /i "%~dp0" neq "%%~fa\" rd /s /q "%%~a"  

     
    Добавлено:

    Цитата:
    команда
    taskkill /t /f /im my.exe
    не проходит. У кого-нибудь есть соображения?  

    попробуй tskill my
    может прибьет

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 01:50 07-09-2010
    Free_Soft



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

    Код:
    for /f "delims=" %%a in (' dir /b /ad . ') do if /i "%%~xa" equ ".tmp" if /i "%~dp0" neq "%%~fa\" rd /s /q "%%~a"

    Спасибо. А по поводу tskill - тоже не прибивает, но выход нашел - прибил из специально запущенного второго процесса
     
    Добавлено:
    bomzzz
    А можно при использовании msgbox продолжить действия, не дожидаясь нажатия кнопок? типа какого-нибудь errorlevel 0

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 09:52 07-09-2010
    Mark_Titov



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

    Код:
    @Echo Off  
    :ping
    cls
    set /a day_sum=0
    set /a day_count=0
    set /a mes_sum=0
    set /a mes_count=0
    set /a count=count+1
    Title Pinging number %count%
    (set /p site=<%systemdrive%\IP.txt) 2>nul
    set "mes=%date:~-7%"
    2>nul MD "%systemdrive%\%mes%\%date%"
    set "Log=%systemdrive%\%mes%\%date%\log.txt"
    1>nul 2>&1 MD "%systemdrive%\%mes%\%date%"
    set "Log=%systemdrive%\%mes%\%date%\log.txt"
    for /f "tokens=2 delims=()" %%a in ('ping -n 4 %site%') do 1>>%log% echo.%date% %time:~,8% %%a
    for /f "tokens=3 delims=%% " %%a in (%systemdrive%\%mes%\%date%\log.txt) do set /a day_sum += %%a*100 & set /a day_count += 1
    set /a day_average=(%day_sum%)/(%day_count%) +10000
    set /a day_average_int = %day_average:~0,-2% -100
    set mes_
    sleep 20
    goto :ping

     
    Запускаю, вроде бы работает как надо, конвертирую его в exe и вешаю как сервис, начинает ерундой страдать.
    Пишет мне время в log.txt в таком виде -
     
    07.09.2010 16:32:34 0% loss
    07.09.2010 16:36:28 0% loss
    07.09.2010 0:00:00 0% loss
    07.09.2010 16:32:34 0% loss
    07.09.2010 16:56:31 0% loss
     
    Обратите внимание на время, 16:32:34 - это правильное время его запуска, а потом, короче видите что там...
    В чем может быть проблема, подскажите, я все перепроверил, вроде бы нормально...
    Система ХР SP3...
     
    Заранее благодарю....

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 16:04 07-09-2010 | Исправлено: Mark_Titov, 16:06 07-09-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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru