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

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

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

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

   

Nagual



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

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

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

  • Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:28 19-03-2008 | Исправлено: Nagual, 01:02 24-09-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Ему же первое найденное значение нужно было занести в переменную, это test2.cmd и делает, без разницы, сколько раз запускать.

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 10:00 22-10-2008
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sL4yer
    SageNS
    а почему бы просто не нормализовать результат разбив диапазон от 0 до 32767 на 10 поддипазонов? Например методом деления нацело... И не надо будет ждать. Вероятности выпадения чисел в этой ситуации незначительно изменятся, но скорей всего среднее отклонение от равномерного распределения конструкции %RANDOM% выше и соответственно погрешностью метода можно пренебречь.

    Всего записей: 2704 | Зарегистр. 15-12-2003 | Отправлено: 10:08 22-10-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    А-а, понял, что ты имеешь ввиду, только проснулся и сразу за комп, не вьехал Тогда да, нужно после @echo off второй строкой сделать сначала обнуление переменной set "value=". В реале то *.ini читают одним батником, не двумя.

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 10:14 22-10-2008 | Исправлено: igor_andreev, 10:16 22-10-2008
    SageNS

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha
    я думал об этом, но ожидание, по крайней у меня состовляет не более 4 секунд. Мне, кажется, что это не такое уж и большое время
     
    Добавлено:
    Итак, уважаемые знатоки, вопрос на засыпку....
     
     
    есть код
     

    Код:
     
    set a=1
    :circle
    echo %a%
    for /f "tokens=%a% delims=:" %%i in (C:\list.txt) do (
    set group=%%i
    set /a a=%a%+1
    )
    if %a% NEQ 100 goto circle
     

     
    в list.txt 99 значений разделеные :. Все отлично... НО! При достижении а значения 32 for входит в ступор, выводится только терминейтом. Получается следующее...  
     
    Подробнее...
     
    Неужели for может резать только на 32 части, тем более число такое... опасно круглое

    Всего записей: 12 | Зарегистр. 06-04-2008 | Отправлено: 10:26 22-10-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SageNS
     
    Дело не в количестве частей, а по всей видимости в длине строки. Не помню точное ограничение, но оно есть. Если токен находится за этим пределом, то for не может прочитать значение и заканчивает работу.
     
    Добавлено:
    Sorry, действительно работает только 31 токен.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:15 22-10-2008
    avkorets



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

    Всего записей: 81 | Зарегистр. 09-09-2008 | Отправлено: 14:06 22-10-2008
    01MDM



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

    Код:
     
    @echo off
    setlocal
     
    for /f "tokens=*" %%i in (test_1.txt) do call:1 "%%i"
    goto:eof
     
    :1
    set "line=%~1"
    echo %line:~0,1% | findstr [0-9] 1>nul && echo %line% 1>>test_2.txt  
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:19 22-10-2008
    igor_andreev

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

    Код:

    more test.txt | findstr "^[0-9]">new.txt

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 14:22 22-10-2008
    monsoon



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

    Код:
    For /F "usebackq delims=" %%i In (`Find /I "mykey=" test.ini`) Do Set Value=%%i
    echo %value%
     
    А все-таки с каких ... test3.cmd, если не подавлять echo выдет первой строкой:  

    Цитата:
    Set Value=---------- TEST.INI

    Посмотрел  help  по команде, ничего вроде такого нет.

    Всего записей: 1252 | Зарегистр. 30-01-2003 | Отправлено: 14:29 22-10-2008
    INNO_SANCTUM

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А вот еще один глупый детсадовский вопрос.
    Как мне определить, входит ли заданная подстрока в строку?  
    Задача такая: если в имени пользователя нет "1с" (оно всегда в конце - такое правило. То есть, существуют пользователи вида vasya, либо вида vasya1c), то подключить сетевую папку \\server\%username%\ как диск Z. Если же есть 1с в имени, то подключить  папку \\server\<%username% без 1с>, то есть и для пользователя vasya, и для пользователя vasya1c подключить папку \\server\vasya.
     
    Все несложно, кроме определения вхождения подстроки в строку. Может я чего-то не знаю, и есть простой способ?  
    Как пытаюсь сделать я:
    for %%i in ('echo %username%|find "1c"') do (.....)
     
    Но этот код выдает "непредвиденное появление |".  
    Буду благодарен за помощь.
     
    PS самое смешное, что я эту задачу слвсем недавно уже решал, и решил как-то легко и довольно красиво. Но не могу вспомнить как!!! Люди, спите хотя бы по 6 часов в сутки.

    Всего записей: 18 | Зарегистр. 02-06-2008 | Отправлено: 14:32 22-10-2008
    igor_andreev

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

    Цитата:
    Посмотрел  help  по команде, ничего вроде такого нет.

    Это команда find выдает на экран название файла. Запусти просто  

    Код:

    Find /I "mykey=" test.ini

    поэтому пользуйся more в скобках

    Код:

    ('more test.ini ^| find /i "mykey"')

    INNO_SANCTUM

    Код:

    echo %username%
    echo %username:~-2%

    как-то так делай

    Код:

    if "%username:~-2%/"=="1c/" echo "у юзера 1с в конце юзернейма"

     

    Цитата:
    Но этот код выдает "непредвиденное появление |".  


    Код:

    ^|


    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 14:50 22-10-2008 | Исправлено: igor_andreev, 15:00 22-10-2008
    avkorets



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

    Цитата:
    01MDM


    Цитата:
    igor_andreev

    спасибо!!!!!
     

    Цитата:
    igor_andreev
     
    а можно так же в одну строку,если перед числом стоит пробел?
    пробел неважно =)
    Возможно ли убрать из строки все русские символы не трогая латиницу и цифры?
    И так же строку в новый файл..????

    Всего записей: 81 | Зарегистр. 09-09-2008 | Отправлено: 15:08 22-10-2008 | Исправлено: avkorets, 15:31 22-10-2008
    igor_andreev

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

    Цитата:
    Возможно ли убрать из строки все русские символы не трогая латиницу и цифры?  
    И так же строку в новый файл..????

    Можно, только у findstr очень ограниченная поддержка регулярных выражений

    Код:

    chcp 1251
    sed -e "s/[а-яА-Я]//g" old.txt > new.txt

     
    Или, если какую-то определенную строку

    Код:

    chcp 1251
    echo строка | sed -e "s/[а-яА-Я]//g" > new.txt

     

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 15:57 22-10-2008 | Исправлено: igor_andreev, 16:01 22-10-2008
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите утилиту для конвертации .reg файла в .bat файл, который бы выполнял действия равнозначные запуску .reg файла, т.е. вносил в реестр нужные значения, но уже без .reg файла. Может можно написать батник для конвертации?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 16:55 22-10-2008 | Исправлено: GORA2, 16:58 22-10-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2
    Попытки были. Попробуй доработай под свои нужды
    http://www.msfn.org/board/lofiversion/index.php/t82457.html

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 18:06 22-10-2008 | Исправлено: igor_andreev, 18:09 22-10-2008
    SageNS

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подробнее...
     
    Есть какие-нибудь мысли, чтоб обойти это?

    Всего записей: 12 | Зарегистр. 06-04-2008 | Отправлено: 21:01 22-10-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SageNS
    В данном конкретном случае можно сделать так (и при условии, что в строке нет запятых):

    Код:
     
    @echo off
    setlocal
    for /f "tokens=*" %%i in (test.txt) do call:1 "%%i"
    goto:eof
     
    :1
    set line=%~1  
    set line=%line:;=,%
    for %%i in (%line%) do echo %%i  
     

     
    если строка только одна, то можно изменить:

    Код:
     
    @echo off
    setlocal
    set /p line=<test.txt
    set line=%line:;=,%
    for %%i in (%line%) do echo %%i  
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:40 22-10-2008 | Исправлено: 01MDM, 22:55 22-10-2008
    avkorets



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

    Всего записей: 81 | Зарегистр. 09-09-2008 | Отправлено: 22:21 22-10-2008
    Elroir



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

    Код:
     
    @echo off
    setlocal
    set /p line=<C:\list.txt
    :next
    if not defined line goto :EOF
    for /f "tokens=1* delims=:" %%a in ("%line%") do (
    echo %%a
    set "line=%%b"
    )
    goto next
     



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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 01:40 23-10-2008
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev, спасибо за ссылку, очень помогла. Правда пришлось переделывать, т.к. не правильно работало с многострочными ключами, задваивало слеши и кавычки, и еще по мелочи, но это удалось решить.
    Подскажите как можно в строке, например:
    Код:
    "\"C:\Program Files\7-Zip\7zFM.exe\" \"%1\""
    которая содержится в переменной !dat! удвоить знак процента, что б стало так:
    Код:
    "\"C:\Program Files\7-Zip\7zFM.exe\" \"%%1\""


    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 15:35 23-10-2008 | Исправлено: GORA2, 15:37 23-10-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 5
    vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru