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

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

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

    Код:
    @echo off
     
    chcp 1251>nul
     
    "%CD%\reg.exe" query "HKCU\Console" /s | findstr.exe /i /r FaceName.*Terminal 1>nul && (
    for /f "delims=" %%a in ('"%CD%\reg.exe" query "HKCU\Console" ^|findstr.exe /b /i /r HKEY_CURRENT_USER\\Console\\. ') do "%CD%\reg.exe" delete %%a /f
     
    "%CD%\reg.exe" add "HKCU\Console" /v FontSize /t REG_DWORD /d 1048576 /f
    "%CD%\reg.exe" add "HKCU\Console" /v FontFamily /t REG_DWORD /d 54 /f
    "%CD%\reg.exe" add "HKCU\Console" /v FontWeight /t REG_DWORD /d 400 /f
    "%CD%\reg.exe" add "HKCU\Console" /v FaceName /t REG_SZ /d "Lucida Console" /f
     
    start "" "%~f0" %* & exit
    ) 1>nul
     
     
    :begin
    echo Кракозябрам нет!
     
    pause
    exit

    Кто может подсказать, почему получаю сообщение "Системе не удается найти указанный путь"? При этом бат-файл бесконечно перезапускается... В папке с батником лежит reg.exe, сразу хочу оговориться, путь нужно указывать, т.к. в будущем батник будет скомпилирован в exe с помощью qbfc, соответственно обращаться к reg.exe будет через переменную %MyFiles%

    Всего записей: 61 | Зарегистр. 07-10-2007 | Отправлено: 18:04 13-06-2010 | Исправлено: WesternLight, 18:06 13-06-2010
    wolf0425



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

    Цитата:
    wolf0425, вот и обращаюсь снова. Хотел проверить как reg.exe от XP работает в W7, прописал путь к reg.exe, лежащему в одной с батником директории  

    так я и не понял что у тебя за прооблемы, разве что напомню что полный путь к reg.exe надо было впиписывать как "%~dp0reg.exe"
     

    Цитата:
    про usebackq в for /f не забыл, хотя надо ли?
    ну не мешают, если правильно прописать. Но реально usebackq нужны редко  -только когда одиночные кавычки надо в команду цикла вписывать.
     

    Цитата:
    После запуска: первое окно c кракозябрами за которыми прячется сообщение "Системе не удается найти указанный путь",  
    тебя тоже надо учить включать эхо чтоб смотреть на какую же точно команду смд ругается и как он переменные подставил?
     

    Цитата:
    Что тут не так?
    да напортачил где-то, я ж тебе не гадалка чтоб без предоставленного кода угадывать что ты там наваял...
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 18:28 13-06-2010
    Mark_Titov



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

    Цитата:
    Возможно, я неправильно что-то понял, но что мешает передать в батник саму команду?

    Мне не нужно еще куча батников, уже и так хватает в моей системе.
    Просто нужно модифицировать эту команду -

    Код:
    start "" cmd /c "sc query & pause"

    Что бы с основного окна вызывалось еще окно с сервисами и это окно имело вот такой вид -
     
     

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 18:30 13-06-2010 | Исправлено: Mark_Titov, 18:30 13-06-2010
    wolf0425



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

    Цитата:
    путь нужно указывать, т.к. в будущем батник будет скомпилирован в exe с помощью qbfc, соответственно обращаться к reg.exe будет через переменную %MyFiles%
    да, при таком подходе указывать путь через %~dp0 наверно не стоит, да и с "%~f0" - проблема...
     
    а с кодом непонятно - это он скомпиленый жалуется на "Системе не удается найти указанный путь" или обычный?

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 18:35 13-06-2010
    WesternLight

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

    Цитата:
    так я и не понял что у тебя за прооблемы, разве что напомню что полный путь к reg.exe надо было впиписывать как "%~dp0reg.exe"  

    проверил - то же самое...

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

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

    код выше и ниже:

    Код:
    @echo off
     
    chcp 1251>nul
     
    "%~dp0reg.exe" query "HKCU\Console" /s | findstr.exe /i /r FaceName.*Terminal 1>nul && (
    for /f "delims=" %%a in ('"%~dp0reg.exe" query "HKCU\Console" ^|findstr.exe /b /i /r HKEY_CURRENT_USER\\Console\\. ') do "%~dp0reg.exe" delete %%a /f
     
    "%~dp0reg.exe" add "HKCU\Console" /v FontSize /t REG_DWORD /d 1048576 /f
    "%~dp0reg.exe" add "HKCU\Console" /v FontFamily /t REG_DWORD /d 54 /f
    "%~dp0reg.exe" add "HKCU\Console" /v FontWeight /t REG_DWORD /d 400 /f
    "%~dp0reg.exe" add "HKCU\Console" /v FaceName /t REG_SZ /d "Lucida Console" /f
     
    start "" "%~f0" %* & exit
    ) 1>nul
     
     
    :begin
    echo Кракозябрам нет!
     
    pause
    exit


    Цитата:
    а с кодом непонятно - это он скомпиленый жалуется на "Системе не удается найти указанный путь" или обычный?

    обычный

    Всего записей: 61 | Зарегистр. 07-10-2007 | Отправлено: 18:37 13-06-2010 | Исправлено: WesternLight, 18:39 13-06-2010
    wolf0425



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

    Цитата:
    Просто нужно модифицировать эту команду -
     
    Код:
    start "" cmd /c "sc query & pause"
     
    Что бы с основного окна вызывалось еще окно с сервисами и это окно имело вот такой вид -  
    ну собственно эту модификацию этой команды ты приводил в коде на преыдущей странице - и эта "модификация" там половину батника занимает
     
     
    Добавлено:

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

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 18:38 13-06-2010 | Исправлено: wolf0425, 18:44 13-06-2010
    WesternLight

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

    Цитата:
    у меня, кстати, батник никак не ругается, да и у тебя вроде раньше не ругался. Что поменялость то?

    добавился путь к reg.exe, без него используется windows'ский, а мне нужно, чтобы тот, который лежит в одной директории с батником, он тоже windows'ский, но от XP (у меня W7), без указания пути все ОК!
    вот с echo:
     

    Всего записей: 61 | Зарегистр. 07-10-2007 | Отправлено: 18:46 13-06-2010 | Исправлено: WesternLight, 18:52 13-06-2010
    wolf0425



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

    Цитата:
    добавился путь к reg.exe, без него используется windows'ский
    так %cd% - это и есть виндоусовский текущий, смысла добавлять %cd%  в батнике - нет.
    какая директория является является текущей при запуске скомпиленного - где экзешник лежит или где де распакованный код батника?  
    или проще самому посмотреть?

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 18:56 13-06-2010 | Исправлено: wolf0425, 18:57 13-06-2010
    WesternLight

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

    Цитата:
    так %cd% - это и есть виндоусовский текущий, смысла добавлять %cd%  в батнике - нет.

    в смысле reg.exe от семерки, ведь сначала поиск ведется по %PATH%, а мне нужно обращение к моему reg.exe, который будет упакован в exe с помощью qbfc, т.к. пока упаковать нет возможности пробую из некомпилированного указать явно путь к reg.exe, вытянутому из XP

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

    где exe, но я еще не компилировал, пока запускаю только батник, а указывая путь, хочу убедиться, что все ОК что будет обращаться к моему reg.exe

    Всего записей: 61 | Зарегистр. 07-10-2007 | Отправлено: 19:01 13-06-2010 | Исправлено: WesternLight, 19:03 13-06-2010
    Mark_Titov



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

    Цитата:
    ну собственно эту модификацию этой команды ты приводил в коде на преыдущей странице

    ...Так в том и проблема что скрутить твою команду и тот код для отдельного окна я не могу, требуется ваша квалифицированная помощь...

    Код:
     - и эта "модификация" там половину батника занимает

    ...поверь, там батник гораздо больше занимает места чем этот код...
    Пож-ста помогите...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 19:04 13-06-2010 | Исправлено: Mark_Titov, 19:05 13-06-2010
    wolf0425



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

    Цитата:
    в смысле reg.exe от семерки, ведь сначала поиск ведется по %PATH%, а мне нужно обращение к моему reg.exe, который будет упакован в exe с помощью qbfc,
    а чем плох reg.exe от семерки?
    ну и локальный  %PATH% можно поправить...
    должны чего-то посоветовать  с тем как правильно писать запуск программы с пробелом в имени в for /f - мы тупим неподецки, чего-то тривиальное должно быть.
    пока в голову приходит только хак:

    Код:
    for /f "delims=" %%a in ('@"%cd%\reg.exe" query "HKCU\Console" ^| findstr.exe /b /i /r HKEY_CURRENT_USER\\Console\\. ') do "%CD%\reg.exe" delete %%a /f

     
    upd или не хак
    Код:
    for /f "usebackq delims=" %%a in (`"%cd%\reg.exe" query HKCU\Console ^| findstr.exe /b /i /r HKEY_CURRENT_USER\\Console\\. `) do echo "%CD%\reg.exe" delete %%a /f
    но напрочь не понимаю почему постановка кавычек вокруг HKCU\Console вызывает ошибку. Кавычки то конечно лишние - но с чего они начали мешать?
     
    Mark_Titov

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

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 19:09 13-06-2010 | Исправлено: wolf0425, 19:53 13-06-2010
    Mark_Titov



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

    Цитата:
    чем позже лучше чем 5 минут назад?

    Ни чем...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 19:15 13-06-2010 | Исправлено: Mark_Titov, 19:47 13-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov
    Цитата:
    ...Так я пробовал же уже
    не видел пока.
    и можно тебя попросить такие широкие бессодержательные картинки или больше не постить, или под тег more прятать?

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 19:24 13-06-2010 | Исправлено: wolf0425, 19:25 13-06-2010
    Mark_Titov



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

    Цитата:
    и можно тебя попросить такие широкие бессодержательные картинки или больше не постить, или под тег more прятать?

    Это я для наглядности, уберу позже... Я просто показал что пытался - получилось только запустить в новом окне, а упорядочить никак...

    Цитата:
    не видел пока.


    Код:
    :service  
    start "" cmd /c  
    set "sernum=1000"    
    for /f "tokens=1*" %%a in ('sc %server% query state^= all') do (    
    if /i .%%a equ .SERVICE_NAME: set "_servicen_=%%b" && title Scaning: %%b    
    if /i .%%a equ .DISPLAY_NAME: (    
    echo %%b    
    set /a sernum += 1    
    set "_service_!sernum:~1!=!_servicen_!"    
    set "_serviced_!sernum:~1!=%%b"    
    )    
    )    
    pause

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 19:27 13-06-2010 | Исправлено: Mark_Titov, 19:28 13-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov, и что по твоему этот код должен делать?
    пиши комментарии к каждой строчке - как ты представляешь назначение строки и результат выполнения.
    особенно интересует вторая строка, start "" cmd /c  
     
     
    Добавлено:

    Цитата:
    Это я для наглядности, уберу позже...
    чем позже лучше чем 5 минут назад?

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 19:36 13-06-2010 | Исправлено: wolf0425, 19:46 13-06-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425, прикалываешься, а мне не смешно, если бы я знал все значения этих строк я бы не просил помощи, просто сам бы скрутил бы эти команды и все...
    Код не мой - потому не знаю что КАЖДАЯ из строк означает...
    Вижу что сканирует (sc query) все (all) сервисы на удаленной машине (%server%) и выводит их статус (state).

    Цитата:
    for /f "tokens=1*" %%a in ('sc %server% query state^= all') do (

    Но как это все этот код упорядочивает не знаю и не могу все это в одну связку скрутить...
    Ладно, чего я объясняю, наверно нет толку...
     
    Спасибо...

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



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

    Цитата:
    Код не мой - потому не знаю что КАЖДАЯ из строк означает...  

    вторая строка - там точно ТВОЙ код, а не мой.
     
    если действие операторов в какой-то строке непонятно - идешь читать hh ntcmds.chm, если после прочтения будут вопросы применительно к коду - задаешь.
    Разобрать и объяснить действие 10 уже готовых строк кода - не проблема ни разу.
     
    а по поводу  

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

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 19:52 13-06-2010 | Исправлено: wolf0425, 19:54 13-06-2010
    res2001



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

    Код:
    @echo off
    setlocal enabledelayedexpansion
    if "%1"=="/service" GOTO :service
    :20
    TITLE SERVICES MANAGER
    CLS
    echo.
    ECHO  *************************************************** МЕНЮ ***************************************************
    ECHO  ************************************************************************************************************
    ECHO.
    ECHO.
    ECHO                                       1. Servise
    ECHO.  
    ECHO                                       0. Выход из меню
    ECHO.
    ECHO.
    ECHO.
    set /p reply= Введите номер и нажмите Enter:  
    IF /I "%reply%"=="1" (  
        start "" call "%0" /service  
    ) else if %reply%==0 goto :eof
    GOTO :20  
     
    :service
    set "server=\\127.0.0.1"
    set "sernum=1000"
    set "svcn=0"
    set "svcd=0"
    set /a "sernum=0"
    for /f "tokens=1,2,3,* delims=: " %%a in ('sc %server% query state^= all ^| findstr "SERVICE_NAME: DISPLAY_NAME: STATE"') do (
    if %%a==SERVICE_NAME (
        set "svcn=%%b"
        title Scaning: %%b  
    ) else if %%a==DISPLAY_NAME (  
        set "svcd=%%b %%c %%d"
    ) else (
        set /a "sernum += 1"
        echo !sernum! ^(!svcn!^) !svcd! %%c
    ))
    pause
     

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 19:53 13-06-2010
    Mark_Titov



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

    Цитата:
    не проблема ни разу.

    Это для тебя не проблема...
     
    Благодарю за помощь...
     
    Добавлено:
    res2001, спасибо тебе большое что откликнулся, но код не работает -
    пишет -

    Цитата:
    '""C:\Documents' is not recognized as an internal or external command,
    operable program or batch file.

     
    Может я что не так делаю...?

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 19:53 13-06-2010 | Исправлено: Mark_Titov, 20:10 13-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Mark_Titov
    замени  
        start "" call "%0" /service  
    на  
        start "" cmd /C "%0" /service  
     
     
    Добавлено:
    Mark_Titov
    Тестировал в каталоге с коротким именем и без пробела, поэтому ошибки у меня не было.
    Второй вариант должен работать в любых условиях.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 20:15 13-06-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