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

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

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

vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:53 09-01-2011 | Исправлено: mazafakermazafaka, 11:22 04-06-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    ммм.. не пойдет. числовые значения могут быть любыми. Это параметры запуска, указываемые пользователем. Придется оставить как было... Но все равно спасибо

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 20:38 02-02-2011
    wolf0425



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

    Цитата:
    Слеш не помешает в твоей конструкции?  
    да там не слеш мешает, а конструкцию я срисовал с твоей не проверив  и не задумавшись.

    Код:
    for %%a in (%par1% %par2% %par3% %par4%) do set "_tmp=%%~a" & echo."%%~a" | find /i "color"  >nul && call set "colrp=%%_tmp:~7,2%%"  


    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 20:58 02-02-2011 | Исправлено: wolf0425, 20:59 02-02-2011
    01MDM



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

    Цитата:
    числовые значения могут быть любыми.

    Какие значения? если ты про set par1=/color:01 и т.д., то это только для примера.


    ----------
    Вопросы в личке останутся без ответа

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Вроде заработало. теперь еще одно. Есть шесть параметров, которые содержат слова:
    /color /timeout /lines /cols /uninstall /?
    Задача, если пользователь ввел в параметре нечто отличное от ключевых слов, вывалилась ошибка. ищу так:
    findstr /i /r "^/color ^/timeout ^/lines ^/cols ^/uninstall ^/?"
    Все хорошо, кроме /?
    Хм... проблема в другом: /? не передается почему-то в параметр через
    Код:
    set par1=%~1

    Все, разобрался, пасиб

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 21:52 02-02-2011 | Исправлено: Free_Soft, 22:21 02-02-2011
    conty9



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите свести в одно целое две половинки
    Уже не раз обсуждавшаяся задача: найти перебором на дисках файл и запустить его. Задача усложняется тем, что при переборе дисков может попасться нечитаемый - например, картридер без карточки. При обычном опросе выполнение на таком диске приостановится с запросом системы - пропустить/игнорировать/отменить. Но, как оказалось, можно использовать для проверки доступности диска команду dir - если диск недоступен, она тихо и скромно сообщит об этом. Прямо это использовать не смог, зато можно проанализировать наличие инфы о диске, для нечитаемых дисков это всегда будет нулевой файл, для доступных - какая-то инфа по диску. Например, следующая конструкция запустит my_prog.exe с диска D:\ и промолчит, если диск недоступен.
    Код:
    For /f "tokens=1*" %%A in ('dir /d D:\') do set res=%%A
    if %res% NEQ "" start D:\my_prog.exe & exit
    Всё замечательно, только вот соединить перебор дисков и "тихую" проверку никак не могу
    Код:
    For %%D In (C D E F G H I J K ) Do (
    For /f "tokens=1*" %%A in ('dir /d %%D:\') do set res=%%A
    if %res% NEQ "" start %%D:\my_prog.exe & exit
    )

    Всего записей: 1700 | Зарегистр. 27-11-2006 | Отправлено: 22:46 02-02-2011 | Исправлено: conty9, 22:50 02-02-2011
    01MDM



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

    Код:
     
    for %%i in (C D E F G H I J K) do if exist %%i:\ (
     
         doing smth on %%i:\
     
    )
     



    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:10 02-02-2011
    Free_Soft



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

    Хочу сделать твик, позволяющий из контекстного меню exefile запускать екзешник с введенным параметром. Все бы ничего, но

    Код:
    cmd.exe /c set /p k=%1 & echo.%k% & start "" "%1" %k%

    здесь почему-то в переменную выводится не введенное значение, а ее наименование, т.е. в данном случае, просто k. Или это выражение нельзя писать в одну строку?

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 23:27 02-02-2011
    conty9



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM, как этим стартонуть файл (без ошибок на пустом картридере), честно говоря, не понял. "doing" не является внутренней или внешней командой...

    Всего записей: 1700 | Зарегистр. 27-11-2006 | Отправлено: 23:42 02-02-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    conty9
    припиши перед doing echo и увидишь, какие диски у тебя "читаемые"

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 23:51 02-02-2011
    conty9



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft, дык видеть то я вижу, а как это использовать для запуска? Конкретно, как стартонуть my_prog.exe из корня диска без замечаний на ридере?

    Всего записей: 1700 | Зарегистр. 27-11-2006 | Отправлено: 00:00 03-02-2011
    Free_Soft



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

    Код:
    @echo off
    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:\ (
     
         if exist "%%i:\my_prog.exe" start "" "%%i:\my_prog.exe"
     
    )

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 00:02 03-02-2011
    01MDM



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

    Код:
     
    for %%i in (C D E F G H I J K) do if exist %%i:\ (  
     
        start "" "%%i:\my_prog.exe"
     
    )
     

     
    Добавлено:
    Free_Soft
     



    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 00:03 03-02-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    есть вопросы поважнее
    так как быть с этим?

    Код:
    cmd.exe /c set /p k=%1 & echo.%k% & start "" "%1" %k%

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 00:07 03-02-2011
    conty9



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

    Всего записей: 1700 | Зарегистр. 27-11-2006 | Отправлено: 00:19 03-02-2011
    01MDM



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

    Цитата:
    cmd.exe /c set /p k=%1 & echo.%k%

    А откуда берется %1 ?
    Вообще так:

    Код:
     
    cmd /v:on /c "set /p k= && echo !k!"
     



    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 00:19 03-02-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Огромный человеческий пасиб

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 00:25 03-02-2011
    Free_Soft



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

    Код:
    cmd /v:on /c "set /p k= && echo !k!"

    А можно как -то в этом выражении поставить метку? короче надо, чтобы после ввода параметра пользователем и его индикации все вернулось снова в начало set p=... и т.д.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 09:45 03-02-2011
    NIKZZZZ



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

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

    Вместо этого можно использовать

    Код:
    For /l %%i in (1,1,99999) Do .....

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 10:21 03-02-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    А можно поподробнее?..
    Эти команды выполняются не из батника, а прописаны в реестре
     
    Добавлено:
    если так

    Код:
    cmd.exe /v:on /c for /l %i in (1,1,99999) do set /p k=%1 & echo. & "%1" !k!

    консоль просо мигает и ничего непроисходит

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 10:23 03-02-2011
    NIKZZZZ



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

    Код:
    cmd.exe /v:on /c "for /l %i in (1,1,99999) do (set /p k=%1 & echo. & ""%1"" !k!)"  

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 10:36 03-02-2011
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 10
    vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru