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

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

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

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    barsikline



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

    Цитата:
    barsikline
    а какой ftp сервер используешь?  
    Может у него хронические проблемы с русскими каталогами/файлами.
     
    Добавлено:
    попробуй другим ftp клиентом, например far или total. Надо определить на чьей стороне проблема клиента или сервера.

    Через Total или Far все ок. Наверно ftp сервер кривой ).
     
    wolf0425

    Цитата:
    переключаться в кодировку 1251 заранее, батник тоже сохранять в виндовой. примерно так:
     
    Код:
    @echo off
    chcp 1251  
    (echo user anonymous anonymous
     echo ls
     echo cd "/Инструкция/"
     echo pwd
     echo bin
     echo get file.tst
    ) | ftp -n localhost  

     
    Так пробывал - не помогает...

    Всего записей: 33 | Зарегистр. 24-10-2008 | Отправлено: 02:32 17-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    barsikline так все же - какой сервер то, и в какой кодировке с ним работают ФАР с тоталом?
     
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 04:05 17-06-2010
    barsikline



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    есть файл с текстом, к примеру:
    01_текст текст текст
    02_текст текст текст
    03_текст текст текст
    и т.д.
     
    написал такой батник:
    @echo off
    chcp 1251
    set /p lsd= < 05.txt
    net send * %lsd:~18%
    exit
     
    при выполнении msg или net send берут только первую строчку из файла.
    А как сделать так, чтобы команда msg или net send выводили весь текст из файла на экран?  
     
    Добавлено:
    wolf0425

    Цитата:
    barsikline так все же - какой сервер то, и в какой кодировке с ним работают ФАР с тоталом?  

    ftp сервер Gene, а в какой кодировке не заню.

    Всего записей: 33 | Зарегистр. 24-10-2008 | Отправлено: 04:20 17-06-2010 | Исправлено: barsikline, 05:07 17-06-2010
    res2001



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

    Цитата:
    ftp сервер Gene, а в какой кодировке не заню.

    я у себя тестировал предложение wolf0425 по кодировке - отработало правильно, так как он и говорил. Надо чтоб файл сам у тебя был тоже в кодировке 1251 (в блокноте его открой, если русские буквы читабельные, значит 1251).
     

    Цитата:
    при выполнении msg или net send берут только первую строчку из файла.
    А как сделать так, чтобы команда msg или net send выводили весь текст из файла на экран?  

    Поясни что ты хочешь получить. Ты хочешь net sendом разослать сообщение содержащееся в файле? Или каждая строчка файла представляет отдельное сообщение?
    По моему логичен первый вариант, но, на сколько я знаю net send не может форматировать передаваемый текст (разделять его на строки).
    Поэтому можно заставить передать весь твой файл как одну строку, прочитав из файла в цикле каждую строку и присвоив их переменной. У юзера будет выглядеть не очень симпатично, если файл достаточно длинный, но цели достигнешь К тому же наверняка у net send есть ограничение на длину передаваемой строки.

    Код:
    @echo off
    for /f "tokens=*" %%a in (05.txt) do call set msg=%%msg%% %%a
    net send * %msg%
    echo %msg%
     

     
    wolf0425

    Цитата:
    ты опять работу кода не проверял
    но пример показателен тем, что монотонные ограниченные мысли - сходятся, я это проверял в самом начале. НЕ РАБОТАЕТ, установка err в таких скобках - ни на что снаружи скобок не влияет.  
    "такие" - это )|  

    Точно, не проверял. Появилась мысль, поспешил поделится Надо как-то сдерживать себя.
    Кроме set, еще и goto не работает и call тоже. Видимо с файлом флагом пока самый оптимальный вариант.
    Но его можно создавать и обычным echo error >err.falg

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 09:21 17-06-2010
    barsikline



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

    Цитата:
    Поясни что ты хочешь получить. Ты хочешь net sendом разослать сообщение содержащееся в файле? Или каждая строчка файла представляет отдельное сообщение?
    По моему логичен первый вариант, но, на сколько я знаю net send не может форматировать передаваемый текст (разделять его на строки).
    Поэтому можно заставить передать весь твой файл как одну строку, прочитав из файла в цикле каждую строку и присвоив их переменной. У юзера будет выглядеть не очень симпатично, если файл достаточно длинный, но цели достигнешь К тому же наверняка у net send есть ограничение на длину передаваемой строки.
     
    Код:
    @echo off
    for /f "tokens=*" %%a in (05.txt) do call set msg=%%msg%% %%a
    net send * %msg%
    echo %msg%

     
    Спасибо. Но желательно чтобы выводилась в одном сообщении по строчкам как файле, а не все до кучи ).  К стати размер сообщения действительно ограничен. Может подскажете как можно сделать так чтобы из всех строчек бралась та часть теста перед которой, к примеру стоит буква "в", или может ту которая начинатеся с "O:\", чтобы уменьшить строки.
    например:
    Файл скопирован в каталог O:\Копия\
    Файл скопирован в каталог O:\Копия\
    Файл скопирован в каталог O:\Копия\
    и т.д.
    короче отсечь "Файл скопирован в" и оставить "каталог O:\Копия\"
     
    И еще при выполнении  
    @echo off
    for /f "tokens=*" %%a in (05.txt) do call set msg=%%msg%% %%a
    net send * %msg%
    echo %msg%
     
    Текст  echo %msg% выводится какой-то закодированный.

    Всего записей: 33 | Зарегистр. 24-10-2008 | Отправлено: 10:57 17-06-2010 | Исправлено: barsikline, 10:58 17-06-2010
    res2001



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

    Цитата:
    Текст  echo %msg% выводится какой-то закодированный.

    те же проблемы с кодировкой что и в случае FTP.  
    Кодировка текстового файла (05.txt) и батника должны совпадать.
     
     
    Добавлено:
    barsikline

    Цитата:
    короче отсечь "Файл скопирован в" и оставить "каталог O:\Копия\"  

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

    Код:
    @Echo Off
    for /f "tokens=*" %%a in (05.txt) do set vv=%%a & call set msg=%%msg%% %%vv:~26%%
    echo %msg%
     

     
    Добавлено:
    barsikline

    Цитата:
    Но желательно чтобы выводилась в одном сообщении по строчкам как файле, а не все до кучи

    Боюсь что нормальным способом этого не сделать.
    НО можно попробовать в конце каждой строки добавлять столько пробелов сколько нужно для переноса текста на следующую строку.
     
    Добавлено:

    Код:
    @Echo Off
    set "space=                                                                                                                                                                                                                                      "
    for /f "tokens=*" %%a in (05.txt) do set "vv=%%a%space%" & call set "msg=%%msg%%%%vv:~26,200%%"
    net send * "%msg%"
     

     
    Обрати внимание на присвоение переменной space - присваивается строка состоящая из кучи пробелов (у меня около 230).
    Не факт, что будет отрабатывать на всех системах одинаково. Не известно от чего зависит размер окна вывода службы сообщений.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 11:05 17-06-2010 | Исправлено: res2001, 11:06 17-06-2010
    igor_andreev

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

    Цитата:
    Через Total или Far все ок. Наверно ftp сервер кривой ).  

    Вполне может, у меня сейчас тоже не получилось стандартным ftp.exe с папкой "Инструкция" поработать Зато получилось с ftps.exe
     
    Тебе нужна вот эта штука:
    http://ftp.ipswitch.com/ipswitch/product_downloads/MOVEit_Portable_Install.zip
     
    Это от разработчиков WS_FTP бесплатная замена стандартному консольному фтп-клиенту. Основной синтаксис такой-же, дополнительно приятные мелочи типа команд passive или sleep, возможность запуска c указанием юзера\пароля в комстроке:
    ftps.exe -user:username -password:pass -s:script.txt
    с SSL работает и т.п.
     
    Можно просто поместить в PATH. Сами разработчики вообще советуют переименовать ftps.exe в ftp.exe и заменить стандартную виндовую ftp

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 14:59 17-06-2010 | Исправлено: igor_andreev, 15:08 17-06-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Подскажите пожалуйста, как можно получить список файлов с путями при Drag and Drop, и если можно чтобы работала с файлами которые лежат в папках.
     
    И как можно сделать фильтр полученного списка, мне надо убрать из списка все файлы. кроме файлов определенным разрешением?
     
    Спасибо за внимание

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 16:38 17-06-2010 | Исправлено: lorents, 17:03 17-06-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents
    Пролистни несколько страниц назад , ты уже задавал этот вопрос и я тебе ответил. Провалы в памяти? Лентяй ты здоровый.

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 17:05 17-06-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    я помню, но я так и не понял, как с этим работать?

    Код:
    :hj
    echo %1
    shift
    goto :hj  


    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 17:18 17-06-2010 | Исправлено: lorents, 17:19 17-06-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents
    1 засунуть мой код в батник
    2 Drag and Drop ом бросить на него выделенные что тебе надо и посмотреть глазами
    3 Отчитаться о результате. Здесь. Полробно.

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 17:38 17-06-2010
    lorents



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

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 17:47 17-06-2010 | Исправлено: lorents, 17:47 17-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents king_stiven а проверять что параметры закончились и давно  "%~1" == "" - Пушкин должен?
     
    Добавлено:

    Код:
    @echo off
    :hj
    if "%~1" == "" echo completed & pause & exit
    call :_proc %1
    shift
    goto :hj  
     
    :_proc
    set "type=%~a1 "
    if %type:~0,1% equ d (echo dir %1) else (echo file %1)
    exit /b

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 17:50 17-06-2010 | Исправлено: wolf0425, 18:05 17-06-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents
    1 Засунь в батник после
    echo %1
    команду pause
    2 запусти
    3 Периодически нажимай на ентер
     
     
    Добавлено:
    wolf0425
    Спокойней, пациент нуждается в небольших дозах лекарств неторопливо и постепенно, полученные результаты должны не спеша зафиксироваться в мозгу, образовав устойчивые связи, а ты сразу его большими конструкциями пугаешь.

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 17:56 17-06-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    тоже самое, только теперь нет сплошного повтора, при попытка перенести файл, выдает тоже самое сообщение что и было
     
    wolf0425
    попробовал ваш вариант, при  попытке перенести файл, батник закрывается, никаких сообщений нет, так и должно быть?
    я как понимаю %~z1 и есть список файлов?

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 18:06 17-06-2010
    wolf0425



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

    Цитата:
    попробовал ваш вариант, при  попытке перенести файл, батник закрывается, никаких сообщений нет, так и должно быть?
    я как понимаю %~z1 и есть список файлов?
    не, там бага была в одном из вариантов правки, даже две:
    закрывался от того что тильда потерялась в следуюющей строке
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 18:08 17-06-2010 | Исправлено: wolf0425, 18:09 17-06-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents
    Вот мой результат:
     
     
     
    C:\Documents and Settings\1>pause
    Для продолжения нажмите любую клавишу . . .
     
    C:\Documents and Settings\1>shift
     
    C:\Documents and Settings\1>goto :hj
     
    C:\Documents and Settings\1>echo D:\досуг\батники\пробные\1
    D:\досуг\батники\пробные\1
     
    C:\Documents and Settings\1>pause
    Для продолжения нажмите любую клавишу . . .
     
    C:\Documents and Settings\1>shift
     
    C:\Documents and Settings\1>goto :hj
     
    C:\Documents and Settings\1>echo D:\досуг\батники\пробные\6
    D:\досуг\батники\пробные\6
     
    C:\Documents and Settings\1>pause
    Для продолжения нажмите любую клавишу . . .
     
    C:\Documents and Settings\1>shift
     
    C:\Documents and Settings\1>goto :hj
     
    C:\Documents and Settings\1>echo D:\досуг\батники\пробные\7
    D:\досуг\батники\пробные\7
     
    C:\Documents and Settings\1>pause
    Для продолжения нажмите любую клавишу . . .
     
    1 руки выпрямляй, приведи свой текст батника
    2 покажи как ты делаешь Drag and Drop

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 18:26 17-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven с готовой паузой то любой дурак сможет
    это тебе и мне не надо советов куда вписывать паузу если чего-то не то на экране

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 18:31 17-06-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
     
    D:\Прочее\Image Optimizer>echo
    Режим вывода команд на экран (ECHO) включен.
     
    D:\Прочее\Image Optimizer>pause
    Для продолжения нажмите любую клавишу . . .
     
    D:\Прочее\Image Optimizer>shift
     
    D:\Прочее\Image Optimizer>goto :hj
     
    D:\Прочее\Image Optimizer>echo
    Режим вывода команд на экран (ECHO) включен.
     
    D:\Прочее\Image Optimizer>pause
    Для продолжения нажмите любую клавишу . . .
     
    D:\Прочее\Image Optimizer>shift
     
    D:\Прочее\Image Optimizer>goto :hj
     
    D:\Прочее\Image Optimizer>echo
    Режим вывода команд на экран (ECHO) включен.
     
    D:\Прочее\Image Optimizer>pause
    Для продолжения нажмите любую клавишу . . .
     
    Добавлено:

    Цитата:
    2 покажи как ты делаешь Drag and Drop

    просто перетаскиваю файлы на запущенный батник

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 18:50 17-06-2010 | Исправлено: lorents, 18:52 17-06-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents
    Ищи ошибки у себя, выполни это:
     
    1 руки выпрямляй, приведи свой текст батника  
    2 покажи как ты делаешь Drag and Drop
     
    Почитай в инете как правильно делать Drag and Drop
     
    Добавлено:
    lorents

    Цитата:
    просто перетаскиваю файлы на запущенный батник

    неправильно, надо выделенные файлы перетащить на незапущенный батник.

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 18:57 17-06-2010
       

    Страницы: 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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru