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

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

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

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    cluster

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

    Код:
    START /MIN REG DELETE HKU\.DEFAULT\Software\poolser /F

    Но почему-то команда выполняется несвёрнутым в панель задач окошком.

    Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 21:37 21-04-2010
    lorents



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

    Цитата:
    Хотя сохранять код в 1251 кодировке и не прописывать chcp 1251 - это обычно некомильфо.  

    у меня ни к какую не хочет работать

    Цитата:
    по твоему эти две строки должны как работать???

    прошу прошения не заметил

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

    выходит ни как нельзя это исправить?

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 22:44 21-04-2010 | Исправлено: lorents, 22:48 21-04-2010
    wolf0425



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

    Цитата:
    у меня ни к какую не хочет работать  

    так пример то будет - что конкретно проверял, что получил, что ожидал?
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 02:47 22-04-2010
    lorents



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

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 08:10 22-04-2010
    duh_S

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

    Цитата:
    Цитата:как присвоить переменной (выделить из %%i получившейся строки) все что находится левее %Key% но до первого же символа ":"  
     
    наверно так:  
     
    Код:Set Key=@mail.ru  
    setlocal enabledelayedexpansion  
    For /F "usebackq delims=" %%i in (`Find /I "%Key%" %path_ACCOUNT_VCF%`) Do Set "Value=%%i" & for /f "delims=:" %%j in ("!Value:%Key%=:!") do set "Value=%%j"  
    @Echo.%Value%  

     
    не робит, выводит  

    Код:
    !Value

    Всего записей: 66 | Зарегистр. 28-08-2007 | Отправлено: 11:20 22-04-2010
    wolf0425



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

    Цитата:
    не робит, выводит  
    ну пиши строку, которую надо разобрать, и копипастом свой код - у меня то тест проходит, а такой результат код выдавать вообще не должен.
     
    Кстати, у тебя в примере ещё пара шероховатостей - пробелы после @mail.ru и лишние строки в выдаче поиска. правильно писать надо
    Set "Key=@mail.ru"
    и For /F "delims=" %%i in ('Find /I "%Key%" ^< %path_ACCOUNT_VCF%')

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:48 22-04-2010 | Исправлено: wolf0425, 11:57 22-04-2010
    Iacoyn



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

    Цитата:
    Хочу удалять при старте системы ветку реестра:  
     
    Код:START /MIN REG DELETE HKU\.DEFAULT\Software\poolser /F  
    Но почему-то команда выполняется несвёрнутым в панель задач окошком.

     
    Можно проще - в реестре исправить
    с
    [HKEY_CLASSES_ROOT\regfile\shell\open\command]
    @="regedit.exe \"%1\""
    на
    [HKEY_CLASSES_ROOT\regfile\shell\open\command]
    @="regedit.exe /s \"%1\""
    и прсто бросить в автозагрузку reg файл
    REGEDIT4
     
    [-HKEY_USERS\.DEFAULT\Software\poolser]
    и вуаля. Ничего моргать не будет.

    Всего записей: 2381 | Зарегистр. 07-05-2002 | Отправлено: 12:18 22-04-2010
    0Vovan0



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Можно ли в винХР с её штатными утилитами реализовать аналог никсового
    "ps ax | grep '$command' "
    но обязательно с учетом параметров переданных процессу при запуске (т.е. мне надо проверить висит ли в памяти например "php.exe myscript.php " , а tasklist.exe похоже умеет выводить только имя екзешника, без параметров)

    Всего записей: 2370 | Зарегистр. 15-07-2005 | Отправлено: 15:04 22-04-2010 | Исправлено: 0Vovan0, 15:05 22-04-2010
    duh_S

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

    Код:
    set ThisCmdDir=%~dp0
    Set path_ACCOUNT_VCF="%ThisCmdDir%ACCOUNT_duh.VCF"
    Set "Key=@mail.ru"
    setlocal enabledelayedexpansion
    For /F "usebackq delims=" %%i in (`Find /I "%Key%" ^< %path_ACCOUNT_VCF%`) Do Set "Value=%%i" & for /f "delims=:" %%j in ("!Value:%Key%=:!") do set "Value=%%j"
    @Echo.%Value%

    листинг:

    Код:
    >set ThisCmdDir=F:\бат\обработка текста\
     
    >Set path_ACCOUNT_VCF="F:\бат\обработка текста\ACCOUNT_duh.VCF"
     
    >Set "Key=@mail.ru"
     
    >setlocal enabledelayedexpansion
     
    >For /F "usebackq delims=" %i in (`Find /I "@mail.ru" < "F:\бат\обработка текста\ACCOUNT_duh.VCF"`) Do Set "Value=%i"   & for /F "delims=:" %j in ("!Value:@mail.ru=:!") do set "Value=%j"
     
    >Set "Value=EMAIL;PREF;INTERNET:NovikovSM@mail.ru"   & for /F "delims=:" %j in ("!Value:@mail.ru=:!") do set "Value=%j"
     
    >set "Value=EMAIL;PREF;INTERNET"
    EMAIL;PREF;INTERNET

     
    Добавлено:
    0Vovan0
    не оно?

    Код:
     
    tasklist|find /i "php">nul
    if errorlevel 1 goto run
    goto end
    :run
    echo не найдено
    :end
    echo найдено
     

    Всего записей: 66 | Зарегистр. 28-08-2007 | Отправлено: 15:09 22-04-2010 | Исправлено: duh_S, 17:24 29-04-2010
    0Vovan0



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    duh_S
    К сожалению нет, я же про параметры уточнил. В памяти может висеть одновременно несколько скриптов, а мне нужно проверить висит ли один конкретный, т.е. фильтровать мне надо по "php myscript.php"  , а не просто по "php"
     
    Также обнаружил какие-то странности с фильтрацией вывода tasklist с помощью find , бывает не выводит ничего, даже когда процесс запущен. а вот findstr срабатывает нормально

    Всего записей: 2370 | Зарегистр. 15-07-2005 | Отправлено: 16:17 22-04-2010
    Joo1z



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    0Vovan0
    Если в скрипте задать TITLE для окна, то по tasklist /v |findstr -i %scripttitle% или tasklist /FI "WINDOWTITLE eq %scripttitle%" можно выцепить.

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 17:09 22-04-2010 | Исправлено: Joo1z, 17:18 22-04-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    0Vovan0
    Цитата:
    Можно ли в винХР с её штатными утилитами реализовать аналог никсового  
    можно на бейсике написать ps, 5 строк батника генератор.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 17:27 22-04-2010 | Исправлено: wolf0425, 17:28 22-04-2010
    0Vovan0



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Joo1z
    скрипт без окошка запускается, так что не подойдет
     
    wolf0425
    Ну если пять строк то интересно было бы увидеть
     
    Тем не менее - штатными утилитами винды получить параметры с которыми были вызваны запущенные процессы - получается нельзя?

    Всего записей: 2370 | Зарегистр. 15-07-2005 | Отправлено: 19:10 22-04-2010
    wolf0425



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

    Цитата:
    Тем не менее - штатными утилитами винды получить параметры с которыми были вызваны запущенные процессы - получается нельзя?
    я в свое время искал - не нашел.
    Может конечно плохо искал. Но вот скрипт - нашел
     
    как-то так
    Код:
    @echo off
     
    > %temp%\tasks.vbs echo Set Procs = GetObject("winmgmts://localhost")  
    >>%temp%\tasks.vbs echo Set Processes = Procs.ExecQuery("select * from Win32_Process")  
    >>%temp%\tasks.vbs echo For Each i In Processes  
    >>%temp%\tasks.vbs echo WScript.Echo i.Name ^& " " ^& i.CommandLine  
    >>%temp%\tasks.vbs echo Next  
     
    cscript //nologo %temp%\tasks.vbs | findstr /r /b /i /c:"php\.exe .*myscript\.php" >nul && Echo Working!
    del %temp%\tasks.vbs  

     
    Добавлено:

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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 19:49 22-04-2010 | Исправлено: wolf0425, 19:50 22-04-2010
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    0Vovan0

    Код:
    @echo off
     
    wmic process where (name='php.exe') get commandline | findstr /i "myscript.php">nul && Echo Working!

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 05:13 23-04-2010
    BUGL



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Вопрос глуповат, но никак не могу сообразить с указанием имен файлов:
     
    есть папка. в ней 2 вида файлов textномер01.дата и text2номер001.дата.
    к примеру text07.102 и report008.102. дата - номер дня от начала года.
     
    необходимо при наличии хотя бы одного файла одного типа выводить сообщение net send. при наличии файлов другого типа другое сообщение. файлы никак друг с другом не связаны, кроме расположения в одной папке.
     
    номера файлов меняются хз как, но их номера точно 2ух и 3ех значные. Дата (разрешение файлов) должна определяться по системной дате или еще как-нить в самом батнике.
     
    спасибо за уделяемое время.

    Всего записей: 97 | Зарегистр. 09-10-2004 | Отправлено: 08:14 23-04-2010
    vov4ka



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Joo1z,спасибо огромное,но что-то он не робает(((Может,какая-то синтаксическая ошибка вкралась?

    Всего записей: 110 | Зарегистр. 29-01-2009 | Отправлено: 12:06 23-04-2010
    Joo1z



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vov4ka
    А что не работает? Скрипт или все-равно проблемы с выборами? Права админа на всех компах?
    Можно после sc \\%%a stop browser добавить строчку sc \\%%a config browser start= DISABLED - после "start=" пробел, а затем параметр.
    Проверь чтоб в файле со списком компов все было Ок. Должен быть один комп на строку без двойного обратного слэша "\\".
    Добавь в конце скрипта PAUSE и глянь что пишет.

    Код:
    @echo off  
    FOR /f %%a IN (pclist.txt) DO (  
    REG ADD \\%%a\HKLM\SYSTEM\CurrentControlSet\Services\Browser\Parameters /v IsDomainMaster /t REG_SZ /d FALSE /f  
    REG ADD \\%%a\HKLM\SYSTEM\CurrentControlSet\Services\Browser\Parameters /v MaintainServerList /t REG_SZ /d NO /f  
    sc \\%%a stop browser
    sc \\%%a config browser start= DISABLED
    )
    pause

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 12:57 23-04-2010 | Исправлено: Joo1z, 12:59 23-04-2010
    wolf0425



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

    Цитата:
    необходимо при наличии хотя бы одного файла одного типа выводить сообщение net send. при наличии файлов другого типа другое сообщение.  
    а при наличии обоих что выволить?
    проверку можно сделать примерно так:

    Код:
    dir /a-d /b | findstr /r /c:"[0-9][0-9][0-9]\." >nul && echo Found xxxNNN.*  

    ветвление и проверку на NN сам добавишь.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 13:28 23-04-2010 | Исправлено: wolf0425, 16:21 23-04-2010
    Pavlon333

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно ли организовать какой-нибудь простой progress bar в батнике, который настроен на копирование и сравнение каталогов?
    Т.е. там строки xcopy, robocopy. Вывод осуществляется в лог файл.
     
    Хочется, чтобы пользователь видел, что программа работает и не закрывал раньше времени окно.
    Вывод служебной информации о копировании на экран отключено (@echo off)

    Всего записей: 42 | Зарегистр. 21-08-2006 | Отправлено: 13:35 23-04-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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru