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

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

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Dis74
    Приведи пример своего батника, можно в сокращённом виде, но чтобы было понятно.
    Набери в командной строчке for /?
    Разбор команды тебе может помочь
    FOR /F ["options"] %%e IN ('command') DO set /p curdate=%%e

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 17:48 09-09-2008
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VitRom
    в русском языке нет слова "пайпов"
    хочешь пообщаться, пиши в личку
    в контексте данной темы твой ответ должен был выглядеть так:
    Код:
    @echo off
    set "pr=myprog"
    for /f "skip=2 tokens=3 delims=    " %%a in ('@reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "%pr%"') do set pd=%%a
    echo
    Program Dir: %pd%
    после delims= должен идти символ табуляции

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 17:57 09-09-2008
    avkorets



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    @echo off  
    for %%j in (*.txt) do (  
    setlocal  
    set /p firstline=<%%j  
    echo %firstline% 1>> 1.tmp    
    for /f "skip=1 tokens=1-8 delims=;" %%1 in (%%j) do (  
        echo %%1;%%2;%%3;%%4;;;;%%6;;%%5;%%7;%%8 1>> 1.tmp  
    )  
    move /y 1.tmp %%j  
    )  
     
    пишет первую строку  
    режим ввода команд на экран (echo) выключен  
    провозился полдня так и не решил почему так выдает...=(
    %firstline% вообще имеет пустое значение, видимо здесь зарыто->
    set /p firstline=<%%j
    мож ешо варит у кого =)

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    avkorets
    Так тебе надо для одного файла или нескольких? Я если честно уже запутался...
    Напиши, что конкретно надо, по пунктам.  

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да сначала было для одного.
    Потом выяснилось что в директории может быть много файлов(внутри впринципе все идентичны)
    Вот я взял за основу твой код и сунул в цикл....
    Он впринципе пашет но вот с первой строкой в файлах застрял...Первая строка немного отличима от остальных и ее не нужно менять,но нужно чтобы она была на выходе.
    Этот код в итоге обрабатывает все файлы как положено но вместо первой строки в выходных файлах красуется:
    режим ввода команд на экран (echo) выключен  
    все остальные строки все как нана.  
    =)

    Всего записей: 81 | Зарегистр. 09-09-2008 | Отправлено: 19:44 09-09-2008 | Исправлено: avkorets, 19:52 09-09-2008
    king_stiven

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

    Код:
    @echo off
    setlocal enabledelayedexpansion
    for %%j in (*.txt) do (
    set /p firstline=<%%j
    echo !firstline! 1>> 1.tmp
    for /f "skip=1 tokens=1-8 delims=;" %%1 in (%%j) do (
        echo %%1;%%2;%%3;%%4;;;;%%6;;%%5;%%7;%%8 1>> 1.tmp
    )
    move /y 1.tmp %%j
    )

    Смотри в шапке

    Цитата:
    setlocal enabledelayedexpansion и переменные окружения  


    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 20:26 09-09-2008 | Исправлено: king_stiven, 20:27 09-09-2008
    01MDM



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

    Код:
     
    @echo off  
    for %%i in (*.txt) do call:1 "%%i"
    goto:eof
     
    :1
    set /p firstline=<%1  
    echo %firstline% 1> 1.tmp    
    for /f "skip=1 tokens=1-8 delims=;" %%1 in ('type %1') do (  
        echo %%1;%%2;%%3;%%4;;;;%%6;;%%5;%%7;%%8 1>> 1.tmp  
    )  
    move /y 1.tmp %1  
     

     
    %%1 %%2 %%3 и т.д лучше заменить на %%a %%b %%c и т.д. Так как получается ошибка при обработке токена если он из одной цифры (1;2;3....)

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Огромное спасибо все работает замечательно =0)

    Цитата:
    king_stiven

    setlocal enabledelayedexpansion и переменные окружения  
    пробовал ток видимо с первого раза впихнул в тело цикла не помогло =)
    В шапке уже ознакомился но видимо не улеглось =)

    Цитата:
    01MDM

    Огромнейшее спасибо, последовал Вашему совету перешел на буквенные значения токена.
    после обработки файлики стали тяжелее ..выяснилось что в конце каждой строки клеется два пробела, откуда?

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



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

    Цитата:
     ..выяснилось что в конце каждой строки клеется два пробела, откуда?

     
    Посмотри повнимательней и удали концевые пробелы в батнике.

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ВОТ пример батника моего:
    ftp -s:res.txt 14.112.32.15       - сам батник
    а вот текстовый файл res.txt с коммандами:
     
    rem логин
    user                                      
    rem пароль
    111  
    rem  переход в директорию  
    rem если директория на кириллице - пишет access denied!
    rem  а если на латинице то все ок!  
    cd "Справочники"      
    rem на кириллицу в названии файла НЕ ругается!
    get 16ываыва.zip D:\16ываыва.zip    
     
    Что то можно сделать с этим?
    пробовал в OEM и ANSI кодировках - без разницы

    Всего записей: 39 | Зарегистр. 28-11-2006 | Отправлено: 16:09 10-09-2008
    19w85



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

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 09:20 12-09-2008
    Elroir



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

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

    Да, с помощью утилиты choice.exe входящей в состав Win2003 или Win2000 Resource Kit.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 12:26 12-09-2008
    avkorets



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

    Цитата:
    set /p firstline=<%%j

    а так же красиво возможно выцепить номер последней строки из файла??
    тупо номер и больше ничего=)

    Всего записей: 81 | Зарегистр. 09-09-2008 | Отправлено: 14:34 12-09-2008 | Исправлено: avkorets, 15:09 12-09-2008
    01MDM



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

    Цитата:
    выцепить номер последней строки из файла??  

     

    Код:
     
    for /f "tokens=1 delims=:" %%i in ('findstr  /n .* 1.txt') do set num=%%i
    echo %num%
     

     

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



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

    Цитата:
    01MDM

    а как оперировать этим значением?
    прибавить или отнять значение..в данном случае номер строки ???
    set /a чот не пашет....ругается на остутствующий оператор и опреанд...
    сказать проще.
    в любом файле определить последнюю строку вывести ее и 12 идущих до нее.

    Всего записей: 81 | Зарегистр. 09-09-2008 | Отправлено: 16:38 12-09-2008 | Исправлено: avkorets, 17:21 12-09-2008
    king_stiven

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

    Цитата:
    в любом файле определить последнюю строку вывести ее и 12 идущих до нее.

    Что вывести, саму строку, 12 последних строк или номер ? Говори чётче, и ответ сразу будет конкретный.

    Цитата:
    а как оперировать этим значением?  
    прибавить или отнять значение..в данном случае номер строки ???  


    Код:
    for /f "tokens=1 delims=:" %%i in ('findstr  /n .* 1.txt') do set num=%%i
    set /a num-=12
    echo %num%

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 17:40 12-09-2008
    avkorets



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    =)
    Решил сам ток другим методом =)
    @echo off  
    setlocal enabledelayedexpansion
    for %%i in (*.txt) do set file_name=%%i
    for /f "tokens=1 delims=:" %%j in ('findstr  /n .* %file_name%') do set /a "num=%%j"-12)
    for /F "skip=%num% tokens=1 delims=" %%f in (%file_name%) do echo %%f>>1.tmp
    move /y 1.tmp %file_name%
    Кстати прием set /a num-=12 забавный возьму на заметку спасибо всем еще раз=)
     
    Парвда есть тумманность одна...насчет строки for /f "tokens=1 delims=:" %%j in ('findstr  /n .* %file_name%')
    непонятно почему она ищет именно последнюю строку...В моем файле последняя срока была ====, мож разжуете??
    Пожалуйста!!!!

    Всего записей: 81 | Зарегистр. 09-09-2008 | Отправлено: 18:02 12-09-2008 | Исправлено: avkorets, 18:24 12-09-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    avkorets
    Набери просто в ком строке
    findstr  /n .* 1.txt
    и поймёшь
     

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 18:46 12-09-2008 | Исправлено: king_stiven, 18:47 12-09-2008
    avkorets



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    нумерует после номера ставит :
    вцелом цикл в колону ставит номера строк...
    непонятно почему точка =)
    Впринципе если подставить : тоже работает..

    Всего записей: 81 | Зарегистр. 09-09-2008 | Отправлено: 20:21 12-09-2008
    19w85



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

    Цитата:

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

    Да, с помощью утилиты choice.exe входящей в состав Win2003 или Win2000 Resource Kit.

    Я имел ввиду сделать ограничение времени на ожидание ввода конкертного значения переменной
    Если просто ввести такую команду, то будет неограниченный по времени запрос на ввод значения:

    Код:
    set /p z=

    а нужно ограничить...
     
    Что-то я не понял каким образом это сделать с помощью choice...

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 21:04 12-09-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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru