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

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

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

vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 16:59 14-11-2006 | Исправлено: Elroir, 04:30 26-04-2007
    ViSiToR



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

    Цитата:
    надо добавлять разделительные пустые строчки в "Готовые решения и частые вопросы".

    Убрал...
     

    Цитата:
    "В помощь батнику" - неправильно по смыслу. Вряд ли командному файлу нужна помощь

    Огого! ещё как нужна
     

    Цитата:
    "Администратирование, Автоматизация, и Сеть" - если следовать общему стилю, то заглавная буква должна быть только одна - в начале. Администратирование переименовать в Администрирование, а перед "и" убрать запятую

    Ок, поправил, а запятая перед буквой “и” была добавлена в конце, я сначала задумался, писать ли там “и Сеть” или нет  

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 04:58 28-02-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Гораздо лучше!
    Кроме "В помощь батнику" - все нравится. Название не отражает того, что там находится.

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
    См. теперь - “В помощь батнику” переименовал в “Альтернативные решения”, и оттуда убрал “Создание помощи по всем командам консоли 2000 и XP” на передний флан.
     
    Добавлено:
    А также вывел из под “Полезные Ссылки” строку “Встроенный справочник по командам: hh ntcmds.chm” - нечего ей там делать, это не ссылка
     
    Нормально теперь? можем обновлять шапку?

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 06:25 28-02-2007 | Исправлено: ViSiToR, 06:31 28-02-2007
    Elroir



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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 06:30 28-02-2007
    ViSiToR



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

    Цитата:
    Обновляй

    Обновил
     
    P.S
    И надо же, а я думал это только мне не спится в такие дремучие часы


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 06:34 28-02-2007
    Elroir



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

    Цитата:
    Обновил  

    Хорошо получилось - аккуратно и глаза не разбегаются.
    P.S. Я тоже думал, что в такое время все спят

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 06:38 28-02-2007
    Tipulatoid



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

    Цитата:
    на работе такая ситуация- на общем корпоративном сетевом диске, допустим //server лежит куча файлов, и раз в пару часов появляется новый файл. нужно выбрать последний по дате создания ( т.е. самый новый), скопировать его в локальную папку, например рабочий стол и открыть приложением которое с этим типом файлов ассоциировано. возможно ли такое?

     
    Поскольку здешние гуру не отвечают, я попробую. Сразу скажу, никогда с сетью дел не имел и не знаю, работают ли консольные команды с ними как обычно ли есть ньюансы.  

    Код:
    @echo off
    setlocal enabledelayedexpansion
     
    set source=//server
     
    set counter=1
    for /f "tokens=*" %%a in ('dir %source% /a:-d /o:-d /b') do (
       if /i !counter!==1 (    
          set file_to_copy=%%a)
       set /a counter=!counter!+1)
     
     
    copy /y "%source%\%file_to_copy%" > nul
     
    start /b "" "%file_to_copy%"
     

     
    Проверить мне мой код негде. Этот батник должен скопировать самый новый файл из папки //server в текущую папку откуда батник запущен. Ну и откроет его, если имеется ассоциация с расширением этого файла. Название папки - источника файла менять в строке set source=//server Если что не заработает, пиши.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 06:47 28-02-2007 | Исправлено: Tipulatoid, 07:20 28-02-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    Все верно, кроме того, что dir /od сортирует по дате модификации, а не создания файлов. Кроме того можно обойтись без счетчика:

    Код:
     
    for /f "usebackq tokens=*" %%a in (`dir %source% /a-d /od /b /tc`) do set file_to_copy=%%a
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 06:59 28-02-2007
    Tipulatoid



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

    Цитата:
    Кроме того можно обойтись без счетчика:

    Ну да, точно, не сообразил как-то что проще последнюю строку вывода взять чем 1-ую

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 07:18 28-02-2007
    igor_andreev

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

    Цитата:
    А также вывел из под “Полезные Ссылки” строку “Встроенный справочник по командам: hh ntcmds.chm
    Вот вы сидите тут в семь утра по Москве в инете под XP Professional , а народ в это время из под XP Home или Win 2000 безуспешно пытается встроенный справочник по командной строке открыть. А не получается. Правильнее так

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 07:20 28-02-2007
    Elroir



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

    Цитата:
    Вот вы сидите тут в семь утра по Москве в инете под XP Professional , а народ в это время из под XP Home или Win 2000 безуспешно пытается встроенный справочник по командной строке открыть. А не получается

    Нда.. надо ставить виртуальные машины с разными операционками и на них проверять .  
    P.S. Шапку исправил.
    P.P.S. У нас (если я правильно понимaю, где находится ViSiToR) 6 утра

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



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

    Цитата:
    а народ в это время из под XP Home или Win 2000 безуспешно пытается встроенный справочник по командной строке открыть.

    Ну я то не трогал эти команды, а проверять ну если честно, небыло желания  
     
    Elroir

    Цитата:
    У нас (если я правильно понимaю, где находится ViSiToR) 6 утра

    А где я нахожусь? , у меня да, 6:39  

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 07:39 28-02-2007 | Исправлено: ViSiToR, 08:21 28-02-2007
    ipmanyak



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

     

    ----------
    В сортире лучше быть юзером, чем админом...

    Всего записей: 11724 | Зарегистр. 10-12-2003 | Отправлено: 16:32 28-02-2007 | Исправлено: ipmanyak, 16:34 28-02-2007
    drondo



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

    Цитата:
     Все верно, кроме того, что dir /od сортирует по дате модификации, а не создания файлов. Кроме того можно обойтись без счетчика:  

    а как будет полностью код выглядеть? куда встявлять и что заменить твоим кодом?

    Всего записей: 461 | Зарегистр. 28-10-2005 | Отправлено: 20:13 28-02-2007
    Elroir



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

    Код:
     
    @echo off  
    setlocal
    set source=//server  
    for /f "usebackq tokens=*" %%a in (`dir %source% /a-d /od /b /tc`) do set file_to_copy=%%a
    copy /y "%source%\%file_to_copy%" > nul  
    start /b "" "%file_to_copy%"
     


    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 21:01 28-02-2007
    drondo



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо большое,завтра на работе проверю и отпишусь.
    А если в пути или в имени кирилица присутствует работать будет?

    Всего записей: 461 | Зарегистр. 28-10-2005 | Отправлено: 22:08 28-02-2007 | Исправлено: drondo, 22:10 28-02-2007
    Elroir



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

    Цитата:
    А если в пути или в имени кирилица присутствует работать будет?

    Не вижу причин, по которым может не работать. На всякий случай, в строчке for-а возьми в кавычки %source%.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 22:40 28-02-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    all
    Здесь Ysan предложила задачку, которая мне показалась интересной.
     
    Подсчет строк - задача тривиальная; для подсчета символов я взял код igor_andreev который он здесь приводил по другому поводу (хотя, наверное, можно и проще сделать - узнать размер текстового файла и отнять символы возврата каретки, перевода строки и конца файла) А вот подсчитать кол-во слов - тут я не знаю как. Надо, наверное, подсчитать кол-во пробелов в файле и от этого числа плясать, да как это сделать?

    Код:
    @echo off
    if "%~1"=="" (
       echo Не задан текстовый файл для анализа
       goto end)
     
    set file=%~1
     
    ::Выяснение кол-ва символов
    set symbols_quantity=0
    for /f "tokens=*" %%a in (%file%) do call :temp_file "%%a"
    goto next_label
     
    :temp_file
    echo.%1>line#.tmp
    for %%a in (line#.tmp) do set /a "line_length=%%~za-4"
    set /a symbols_quantity=%symbols_quantity%+%line_length%
    goto :eof
     
    :next_label
    del /q line#.tmp
    echo Всего символов в файле %file%: %symbols_quantity%
     
     
    ::Выяснение кол-ва строк
    setlocal enabledelayedexpansion
     
    :: Выяснение кол-ва непустых строк
    set counter=0
    for /f "tokens=*" %%a in (%file%) do (
       set /a counter=!counter!+1)
     
    :: Выяснение кол-ва пустых строк
    set count=0
    for /f "tokens=*" %%a in ('findstr /r /v /n "." %file%') do (
       set /a count=!count!+1)
     
    :: Выяснение общего кол-ва строк
    set /a line_quantity=%counter%+%count%
     
    echo Всего строк в файле %file%: %line_quantity%
     
    :end


    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 04:02 01-03-2007 | Исправлено: Tipulatoid, 04:29 01-03-2007
    igor_andreev

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

    Цитата:
    Надо, наверное, подсчитать кол-во пробелов в файле и от этого числа плясать, да как это сделать?

    Это test.cmd

    Код:

    @ECHO OFF & SETLOCAL
     
    SET "cnt=0"  
    CALL :tokcnt Warning SSL not supported by remote system for data link
    PAUSE & GOTO :EOF  
     
    :tokcnt  
    if NOT "%~1"=="" SET /A cnt+=1 & SHIFT & GOTO :tokcnt
    ECHO [%cnt%]%*
    SET "cnt=0"

     
    Это без особых проверок, как там отреагирует батник, если в строчке знаки перенаправления > или еще что такое попадется(а оно попадется ), но направление куда-то "в ту сторону" тебе копать надо.

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 04:38 01-03-2007 | Исправлено: igor_andreev, 04:53 01-03-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    Задачка совсем не тривиальная. С количеством строк и символов проблем нет, а вот с количеством слов - огромные. Как сказал igor_andreev:

    Цитата:
    если в строчке знаки перенаправления > или еще что такое попадется(а оно попадется ),  

    А кроме того, если в строке есть разные комбинации символов, вроде "= =" - это вообще улет . В качестве параметра командной строки, символ "равно" просто не виден. И есть очень много подобных сложностей.
    P.S. Кстати, откуда взялась цифра 4, которая отнимается от длины строки?
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 06:27 01-03-2007 | Исправлено: Elroir, 06:28 01-03-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 2
    vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru