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

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

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

vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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





    http://forum.ru-board.com/topic.cgi?forum=62&topic=17154

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 23:07 04-11-2008 | Исправлено: vu1tur, 11:38 26-05-2009
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Один способ:
    1. В начале custom_commands.cmd прописать команду "pushd".
    2. Прописать команду "popd" перед cd.., cd..
    3. Запускать !modify.bat командой "call !modify.bat"
    Второй способ:
    1. Изменить команду SET Start_Dir=%CD% на SET "Start_Dir=%CD%".
    2. Прописать команду "cd /d "%Start_Dir%"" (без внешних кавычек) перед перед cd.., cd..
    3. Запускать !modify.bat командой "call !modify.bat"
     
    king_stiven

    Цитата:
    Может Elroir и поймёт твоё объяснение

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

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 02:34 16-11-2008 | Исправлено: Elroir, 02:36 16-11-2008
    batniki



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите. Нужно получить список всех рабочих устройств в системе.

    Всего записей: 50 | Зарегистр. 11-02-2008 | Отправлено: 04:29 16-11-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    batniki
    Тема слишком широкая, чтобы дать прямой ответ. Может есть специальные консольные утилиты, которые могут сразу вывести весь список устройств. А так, если штатными средствами, то смотри в сторону wmic, netsh, systeminfo (wmic и systeminfo отсутствуют в Home-версии).
     
    Определение процессора на примере wmic:

    Код:
     
    wmic cpu get name,manufacturer
     

     

    Код:
     
    wmic /?
    netsh diag show /?
    systeminfo /?
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 07:02 16-11-2008
    Ortios



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем!
    Как в реальном масштабе времени узнать имя залогинившегося в домене пользователя зная имя компьютера. Результат нужен в виде переменной для дальнейшей обработки.
    Желательно через батник, подставляя имя компа как параметр.
    Может быть можно как-нибудь просканировать папки в профилях \\comp01\c$\Documents and Settings\*.*, определить самый свежий ntuser.dat и потом вырезать из пути имя пользователя?

    Всего записей: 73 | Зарегистр. 24-12-2007 | Отправлено: 11:09 16-11-2008 | Исправлено: Ortios, 22:24 17-11-2008
    batniki



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM, спасибо большое!
     
    Подскажите еще, как заменить \n на %0A , но при этом экранизировать %
     

    Код:
    set mess=ru-board\nru-board\nru-board...
    set "mess=%mess:\n=%%0A%"

     
    и можно сделать что нибудь типа функции, чтоб сразу несколько переменных обрабатывалось в

    Код:
    set "mess=%mess:\n=%%0A%"
    ?

    Всего записей: 50 | Зарегистр. 11-02-2008 | Отправлено: 16:04 16-11-2008 | Исправлено: batniki, 17:43 16-11-2008
    01MDM



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

    Цитата:
    Подскажите еще, как заменить \n на %0A , но при этом экранизировать %

     
    Такой вариант подойдет?

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
     
    set mess=ru-board\nru-board\nru-board...
    echo %mess%
     
    set mess=!mess:\n=%%0A!
    echo %mess%
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:21 16-11-2008
    batniki



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM, спасибо, то что нужно!  
    А как сделать, чтобы несколько переменных обработать?
    Вот на примере этого скрипта, только тут файл обрабатывается, а нужно, чтоб несколько переменных парсилось...

    Код:
    @echo off
    setlocal enableextensions enabledelayedexpansion
    if not exist %1 goto :eof
    for /f "delims=" %%i in (%1) do (
    set Line=%%i
    set Line=!Line:а=a!
    set Line=!Line:б=b!
    set Line=!Line:в=v!
    ....
     

    Всего записей: 50 | Зарегистр. 11-02-2008 | Отправлено: 23:49 16-11-2008 | Исправлено: batniki, 23:50 16-11-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    batniki
     
    Не совсем понял какие переменные, но если они уже определены, то можно так:

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
     
    set mess_1=ru-board\nru-board\nru-board...
    set mess_2=forum.ru-board\nforum.ru-board\n...
     
    for %%i in (%mess_1% %mess_2%) do call:parse "%%i"
    goto:eof
     
    :parse
    set line=%~1
    set line=!line:\n=%%0A!
    echo %line%
     

    Или так:

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
     
    set mess_1=ru-board\nru-board\nru-board...
    set mess_2=forum.ru-board\nforum.ru-board\n...
     
    for %%i in (%mess_1% %mess_2%) do (
        set line=%%i
        set line=!line:\n=%%0A!
        echo !line!
    )
     

    Приведи более конкретный пример, если я не так понял.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 00:07 17-11-2008
    batniki



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM, второй вариант работает почти так, как нужно. Спасибо за скрипт.
     
    Вот может кому пригодится этокий парсер символов:

    Код:
    @echo off
    chcp 1251 > nul
    setlocal enableextensions enabledelayedexpansion
     
    set mess01=спасибо за скриптъ
    set mess02=01MDM
     
    for %%i in ("{1}%mess01%" "{2}%mess02%") do (
        set var=%%i
        set var=!var:"=!
        set var=!var:а=a!
        set var=!var:б=b!
        set var=!var:в=v!
        set var=!var:г=g!
        set var=!var:д=d!
        set var=!var:е=e!
        set var=!var:ё=e!
        set var=!var:ж=zh!
        set var=!var:з=z!
        set var=!var:и=i!
        set var=!var:й=jj!
        set var=!var:к=k!
        set var=!var:л=l!
        set var=!var:м=m!
        set var=!var:н=n!
        set var=!var:о=o!
        set var=!var:п=p!
        set var=!var:р=r!
        set var=!var:с=s!
        set var=!var:т=t!
        set var=!var:у=u!
        set var=!var:ф=f!
        set var=!var:х=kh!
        set var=!var:ц=c!
        set var=!var:ч=ch!
        set var=!var:ш=sh!
        set var=!var:щ=shh!
        set var=!var:ъ=`!
        set var=!var:ы=i!
        set var=!var:ь=`!
        set var=!var:э=e!
        set var=!var:ю=yu!
        set var=!var:я=ya!
     
        echo !var! | findstr "{1}" 1>nul && set mess01=!var:{1}=!
        echo !var! | findstr "{2}" 1>nul && set mess02=!var:{2}=!
    )
    echo !mess01!
    echo !mess02!
    pause >nul

     
    Делает тоже самое, что и скрипт из шапки "Работа с текстом, датой и файлами" > "Конвертирование текста из кириллицы в латиницу", но за раз может пропарсить несколько переменных => сэкономить размер батника.

    Всего записей: 50 | Зарегистр. 11-02-2008 | Отправлено: 00:27 17-11-2008 | Исправлено: batniki, 12:26 17-11-2008
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    неожидал, что будет ответ, завтра с утра ещё поразмышляю, хотя сейчас проверил оба варианта, но не работают. Интересные команды, посмотрел справку, вот только не понял, почему нужно (SET Start_Dir=%CD% ) устанавливать переменную, которая по сути и есть переменная и не меняется для текущего батника. Разве %CD% в конце батника поменяет своё значание?
     
    Мне понравился такой батник:

    Цитата:
    for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i:\VirtW.cmd set DVD=%%i:
    setenv -m CDROM %DVD%

    добавление переменной для CD-диска, определяющий букву по наличию файла VirtW.cmd на диске. Но, что мне не понравилось, что на компе с картридером он вызвал сообщения недословно: "отсутствует диск в приводе", и того 5 сообщений, которые нужно в ручную закрыть. От этих сообщений избавиться можно?

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 00:29 17-11-2008
    batniki



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

    Код:
     
    @echo off
    for /f "skip=1" %%r in ('%systemroot%\system32\wbem\wmic cdrom get Drive') do set cdrom=%%r
    if defined cdrom (echo Ћ- вгв: %cdrom%) else (echo ‘ЇҐа«Ё...)
    pause
     

    Но, как сказал 01MDM, в Home версии wmic отсутствует

    Всего записей: 50 | Зарегистр. 11-02-2008 | Отправлено: 01:00 17-11-2008 | Исправлено: batniki, 01:02 17-11-2008
    bobojon



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Здравствуйте.
    Помогите, пожалуйста. Есть ли возможность установить пароль на батник?

    Всего записей: 53 | Зарегистр. 06-03-2008 | Отправлено: 07:53 17-11-2008
    AZJIO



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

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 11:54 17-11-2008 | Исправлено: AZJIO, 12:33 17-11-2008
    Elroir



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

    Цитата:
    сейчас проверил оба варианта, но не работают. Интересные команды, посмотрел справку, вот только не понял, почему нужно (SET Start_Dir=%CD% ) устанавливать переменную, которая по сути и есть переменная и не меняется для текущего батника. Разве %CD% в конце батника поменяет своё значание?  

    Переменная %CD% меняет свое значение каждый раз, когда меняется текущая директория.
    Поэтому в начале батника сохраняется текущая (на тот момент) директория.
    Теперь вопрос - та директория в которой лежит батник и та директория из которой он запускается - это одна и та же директория? Если нет - где по отношению к каждой из этих директорий лежит батник !modify.bat?

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 12:04 17-11-2008
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот пост, который я не отправил в прошлый раз:
    вот архив, там два батника, один запускается из директории C:\pebuilder_xpe\BartPE\PostProcessing\custom_commands.cmd, он работает из любой директории. Второй C:\pebuilder_xpe\!modify_dll.bat, тоже сам по себе работает из любой директории. Нужно чтоб !modify_dll.bat запустился по окончании выполнения custom_commands.cmd, там почти в конце строка GOTO all_done, вот перед ней можно было бы выполнить !modify_dll.bat. Содержимое !modify_dll.bat вносил в custom_commands.cmd, тоже не сработало.
    если конкретно: в батнике custom_commands.cmd указать строчку:
    Цитата:
    cd..
    cd..
    !modify_dll.bat
    при поднятии на два уровня вверх оказываемся в директории C:\pebuilder_xpe, далее строка на запуск батника. Вот только он не выпонит своего назначения. Сейчас проверил, создал батник с вышеуказанным кодом, он сработал верно, а добавил строки в custom_commands.cmd, он не сработал. Предположение, что изменён текущий каталог.
    Если запускаю custom_commands.cmd кликом мыши, то он запускает мой батник, но появляются ошибки других команд. Если custom_commands.cmd отрабатывается программой, то есть запускается конструктор выполняет свои действия, в конце запускает батник, то моя команда cd.., cd.., !modify_dll.bat не срабатывает.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 12:42 17-11-2008
    batniki



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bobojon, можно сделать проверку пароля непосредственно в запущенном сценарии командной строки. Вписав в начало, что то-подобное:
    @echo off
    set /P pass="Chtoby prodolzhit vypolnenie scenarija vvedite parol:"
    if %pass%==qwerty echo Vhod vypolnen
    pause>nul

    А сам bat'ник конвертировать в *.exe с помощью QuickBFC.

    Всего записей: 50 | Зарегистр. 11-02-2008 | Отправлено: 12:43 17-11-2008 | Исправлено: batniki, 12:47 17-11-2008
    Elroir



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

    Код:
     
    pushd "%~dp0"
    cd..  
    cd..  
    call !modify_dll.bat
     

    или

    Код:
     
    cd /d "%~dp0"
    cd..  
    cd..  
    call !modify_dll.bat
     



    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 12:56 17-11-2008 | Исправлено: Elroir, 12:58 17-11-2008
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Проверил открыв каталоги:
    Цитата:
    C:\pebuilder_xpe\BartPE
    %Temp%
    Мой компьютер
    Дело в том, что в начале отработки (или перед) батника custom_commands.cmd, лог которого ведётся в окне конструктора в реальном времени, сама папка "postprocessing" исчезает из каталога BartPE, и не появляется ни в %Temp%, ни в виде какого нибудь виртуального диска. Вспомнил, что каталог temp у меня появлялся внутри папки конструктора (C:\pebuilder_xpe\temp), и я считал что это неправильные действия батника в ходе экспериментов. Сейчас проверил с учётом того, что нужно поднятся на один уровень вверх (cd..). Всё заработало, спасибо за уверенность что код верен, а то я считал, что проблема батника.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 14:12 17-11-2008 | Исправлено: AZJIO, 14:16 17-11-2008
    vitaliy91

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

    Всего записей: 37 | Зарегистр. 16-11-2008 | Отправлено: 16:56 17-11-2008
    snu

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

    Всего записей: 14 | Зарегистр. 27-10-2005 | Отправлено: 07:25 18-11-2008
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 6
    vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru