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

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

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

evle (19-03-2008 19:44): Лимит страниц.
Задачи на bat-файлах 5
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 15:21 11-09-2007 | Исправлено: Elroir, 01:52 26-02-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Меняется; просто в батнике я ранее определяю сколько строк надо скипать - это не проблема.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 09:27 07-11-2007 | Исправлено: Tipulatoid, 09:29 07-11-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    sed умеет выводить текст начиная со строчки такой-то и заканчивая другой.
    Аууу! Знатоки sed-a!!!!  
    Ну ладно - попробую сам:

    Код:
     
    sed -n 10,20p file > newfile
     

    берем из file строчки с 10 до 20 и записываем в newfile

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 10:09 07-11-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Хотелось бы поменьше сторонних утилит. Поэтому прикручу в свой батник вариант 01MDM На малых аттачах разницы нет практически.
    Всем еще раз спасибо за помощь.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 12:20 07-11-2007
    Filosofem

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    как перекодировать вывод программы в другую кодовую страницу?
    Ставлю chcp 1251
    после этого запускаю скажем robocopy  ... \log:log.txt
    Лог файл получается всеравно в 866 странице.
    То есть кодовая страница консоли влияет только на отображение?

    Всего записей: 238 | Зарегистр. 19-08-2007 | Отправлено: 16:19 07-11-2007 | Исправлено: Filosofem, 16:22 07-11-2007
    Elroir



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

    Цитата:
    как перекодировать вывод программы в другую кодовую страницу?

    В шапке, в разделе "Полезные утилиты", утилита xcodewin (внизу).

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:39 07-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Filosofem
    Столько раз уже обсуждалось..
    Два варианта:
    1. Использование сторонних утилит (например iconv
    2. Вывод "стандартных" утилит в файл

    Код:
     
    @echo off
    for /f "tokens=*" %%i in ('ping ya.ru') do (call:convert %%i)
    goto:eof
    :convert
    chcp 1251 >nul
    echo %*>>1.txt
    chcp 866 >nul
     
     

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



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





    Всего записей: 233 | Зарегистр. 06-10-2003 | Отправлено: 20:29 07-11-2007 | Исправлено: vu1tur, 22:15 07-11-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BlackCerber
    В шапке всё посмотрел?

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 21:19 07-11-2007
    BlackCerber



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да я уже мануалов тонну перерыл по консольным командам не могу найти
    Блина.. там всего строка максимум на 15-20 символов... И что я не сохранил пример

    Всего записей: 233 | Зарегистр. 06-10-2003 | Отправлено: 21:43 07-11-2007
    paveltr



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Спасибо! Вариант в WinRar отлично работает! Совсем не думал, что он для этой задачи подойдёт
     
    Может кому пригодится. Сделал так:

    Код:
    @echo off
    if "%1"=="" echo Usage^: %~nx0 File.mp3 & pause > nul & exit
    if not exist %~dp1_%~n1_SPLIT md %~dp1_%~n1_SPLIT
    start /wait "" "%programfiles%\winrar\winrar.exe" a -m0 -v3m -inul "%~dp1_%~n1_SPLIT\split.rar" "%1"
    for %%a in ("%~dp1_%~n1_SPLIT\*.rar") do ren %%a %%~na.mp3
    exit

    Перетаскивать файл на батник или в свойствах папки сделать команду в контекстное меню mp3 файлов (так удобнее всего)

    Всего записей: 18 | Зарегистр. 01-04-2006 | Отправлено: 01:04 08-11-2007 | Исправлено: paveltr, 01:23 08-11-2007
    Elroir



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

    Код:
     
    net user adm_user /add  
    net localgroup Administrators adm_user /add
     

    P.S. Если тебе не отвечают - это не значит, что тебя игнорируют. Здесь тоже люди - мы не всё знаем и не всё помним.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 01:57 08-11-2007
    GoldAngel

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1. Вопрос на засыпку:
    можно ли установить задержку в "bat" или "cmd" между выполнением команд - например между запуском файлов (в секундах) - допустим 3 секунды?
     
    2. Можно как то убрать отображение пути при выполенинии команды - например:
    C:\1111>copy /Y Test.txt "C:\2222\..."
    чтобы "C:\1111>" не отображалось вовсе, а была видна лишь сама команда с последующими параметрами.

    Всего записей: 152 | Зарегистр. 13-09-2002 | Отправлено: 02:17 08-11-2007
    Tipulatoid



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

    Цитата:
    можно ли установить задержку в "bat" или "cmd" между выполнением команд - например между запуском файлов (в секундах) - допустим 3 секунды?


    Код:
    ping -n 3 -w 1000 localhost > nul


    Цитата:
    2. Можно как то убрать отображение пути при выполенинии команды - например:  
    C:\1111>copy /Y Test.txt "C:\2222\..."  
    чтобы "C:\1111>" не отображалось вовсе, а была видна лишь сама команда с последующими параметрами.


    Код:
    prompt $S

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 03:22 08-11-2007
    Elroir



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

    Код:
     
    command1
    ping -n 4 -w 1000 127.0.0.1>nul
    command2
    ping -n 4 -w 1000 127.0.0.1>nul
    ...
     

    Цифра четыре - это три секунды задержки плюс 1.
     
    2. Два варианта - либо используешь команду echo off и напрямую указываешь показать команду:

    Код:
     
    @echo off
    ...
    echo copy /Y Test.txt "C:\2222\..."
    copy /Y Test.txt "C:\2222\..."
    ...
     

    либо делаешь так:

    Код:
     
    set "save_prompt=%prompt%"
    prompt $s$h
    copy /Y Test.txt "C:\2222\..."
    set "prompt=%save_prompt%"
     

     
     
    Добавлено:
    Tipulatoid


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:27 08-11-2007
    Ilyansk

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Здравствуйте, уважаемое сообщество. провел в поиске намало времени, но ... видно искатель такой
    У меня не получается аналог массива переменных на батнике...
    Задача: есть файл с посылками данных, разделенных пробелами. Посылка заканчивается ключевым словом, например HALT. количество паттернов в посылке РАЗНОЕ, а мне нужны 3-й и 4-й с КОНЦА. Сейчас я, пока не встречаю HALT забиваю переменные Т1...Tn, инкрементируя n (set /a n+=1) потом

    Код:
     
    ...
    set /a n+=1
    T!n!=%1      
    rem  %1 паттерн в посылке, получаемый от внешенго цикла, как параметр
    if "%1"=="HALT" (
    :: в переменных T1...Tn накопились паттерны
    :: теперь неразрешенная мной задача (условно)
    :: во внешний файл занести значения паттернов с номерами 2 и 3 если всего их было 6
    echo t(n-4) >> ext_file.txt
    echo t(n-3) >> ext_file.txt
    ...
    )
     

    дана часть внутреннего цикла (n обнуляется во вне, shift двигает %1)
    не получается "выудить" значение переменной Твычисляемый-номер.  
    запутался я в этих %% и !! ... Помогите, плзззз...
     

    Всего записей: 70 | Зарегистр. 27-07-2006 | Отправлено: 07:14 08-11-2007 | Исправлено: Ilyansk, 07:19 08-11-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ilyansk
    А примерчик конкретный, желательно со всеми вариантами? Что есть , что надо получить.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 08:15 08-11-2007
    Maza Faka



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

    Код:
     
    @echo off
     
    type test.txt | findstr /i "halt\>"> new.txt
    for /f "tokens=3" %%a in ('find /v /c "" new.txt') do set str_count=%%a
     
    set /a str=%str_count%-3
    call :parsing
    set /a str=%str_count%-4
    call :parsing
     
    del /f /q new.txt
    pause
    goto :EOF
     
    :parsing
    for /f "skip=%str% delims=" %%a in (new.txt) do set pStr=%%a & goto :show
     
    :show
    echo %pStr%
     

     
    Добавлено:

    Цитата:
    файл с посылками данных, разделенных пробелами. Посылка заканчивается ключевым словом, например HALT. количество паттернов в посылке РАЗНОЕ, а мне нужны 3-й и 4-й с КОНЦА

    Тебе нужны строки
    Цитата:
    3-й и 4-й с КОНЦА, заканчивается ключевым словом, например HALT
    ? или из каждой строки нужно "выдирать" слова заканчивающиеся
    Цитата:
    например HALT
    ?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:24 08-11-2007 | Исправлено: Maza Faka, 08:31 08-11-2007
    Ilyansk

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ой, вот это да! вот это оперативность! спасибо за отклик! извините, я тут "погружен" вот и думал, что ваши телепаты не в отпуске... в общем есть файл со след. содержимым
     
    11 22 33 44 555 66 77 HALT 11 22 3333 44 555 HALT 11 22 33 44 5 6666 77 88 HALT
     
    на выходе должны иметь файл
    44,555
    22,3333
    5,6666
     
    так яснее? мысль была такая: до слова HALT запоминаем посылки  
    (я тут вставлю комменты..., осторожнее, из-за них "сходу" код не запашет)

    Код:
    set "n=0"
    for /f "tokens=*" %%A in (inp_fil.txt) do call :proc %%A
    goto :eof
    :proc
    if not "%1"=="" (                                      // если не пусто
    set /a n+=1                                             // инкремент счетчика паттернов
    set T!n!=%1                                              //запоминание в Тn паттерна n
    if "%1"=="HALT" (                                     //если паттерн HALT посылка кончилась
       set /a i1=n-4                                         //вычисляем индексы нужных Т
       set /a i2=n-3
       echo %T!i1!%,%T!i2!% >> out_file.txt   //пишем на выход, вот тут-то и трабль
                                    //конструкция %Т!i1!%, по-моему, должна выдать содержимое      
                                         //T4 при n=8, но выдается пусто
       set "n=0"                        //обнуление счетчика паттернов
    )
    shift                               //сдвиг входа
    goto :proc
    )

     rem  в основе лежит конструкция уважаемого igor_andreev
    Т1=11 Т2=22 и тд.  индексы у Т инкрементируются
    встретив HALT, отнимаем у текущего индекса 3 и 4, "подклеиваем" полученные значения к имени Т, получаем, например Т3 и ее ЗНАЧЕНИЕ записываем на выход  
     в приложении к приведенному примеру
     
    Т=11 Т2=22 Т3=33 Т4=44 Т5=555 Т6=66 Т7=77 Т8=HALT
    тут мы "стопоримся"
    4-й назад элемент от HALT, не считая его самого, это Т4=44. Счетчик=8, так вот, в файл нужно записать содержимое Т4 (8-4) и Т5 (8-3). счетчик паттернов каждый раз может быть разный...

    Всего записей: 70 | Зарегистр. 27-07-2006 | Отправлено: 10:14 08-11-2007 | Исправлено: Ilyansk, 10:23 08-11-2007
    king_stiven

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

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 10:43 08-11-2007
    Ilyansk

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    да стоит оно там, набирал код от руки из головы. тот готовый слегка запутан, и не HALT там...  
    это и не очень важно, для меня не ясен был синтаксис конструирования имени переменной для вывода
    а получилось так:  
    что бы вывести значение Тn, для разных n
    применять конструкцию !T%n%!
    но учесть, что подстановка %n% не обновляется по времени выполнения, но уже есть куда копать...
    ... накопал, достаточно echo !T%n%! >> out_file.txt вызвать через call
    все, всем спасибо  

    Всего записей: 70 | Зарегистр. 27-07-2006 | Отправлено: 10:46 08-11-2007 | Исправлено: Ilyansk, 12:01 08-11-2007
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4
    evle (19-03-2008 19:44): Лимит страниц.
    Задачи на bat-файлах 5


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru