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

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

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

vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 17:45 04-09-2010 | Исправлено: Accessor, 18:04 28-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ты досом что ли такой файл создал?
     
    Добавлено:
    http://www.masm32.com/board/index.php?topic=14702.0
    я вот тута разбирал как С-ишная библиотека работает, пробел откидывает в начале
     
    Добавлено:
    точно создает
     
    Добавлено:
    ECHO OFF
    COLOR 9F
    CLS
    set COUNT=" 1.txt"
    echo off>%COUNT%
    pause
     
    Добавлено:
    переименовать его в винде в " 11.txt" уже не получаеца
     
    Добавлено:
    точку не дает. значит под досом еще можно было с пробела, а под виндой убрали. почему я так и не понял
     
    Добавлено:
    под досом такая же фигня, copy con или волков командером создать такой файл нельзя, а через переменную обойти можно, это дыра
     
    Добавлено:
    не то что такое имя не допустимо, оно может конфликтануть с командной строкой видимо, поэтому какая то подпрограмма пробел обрезает.  
     
    Добавлено:
    под досом командная строка хранится по смещению 0080h с начала сегмента программы, а имя программы после psp. в винде имя программы с путем и командной строкой хранится в одной строке, видимо вот тут какой то конфликт может быть из за пробела
     
    Добавлено:
    самое смешное что под восьмым досом (который в виндовс хп) эта дыра закрыта, а под виндой (тот же самый дос) нет
     
    Добавлено:
    в принципе ничего удивительного - сам дос нтфс не видит, поэтому если комманд ком запустить под виндой он будет ей перепуливать все файловые команды. вот тут наверно и дырка
     
    Добавлено:
    только батники под виндой создают больше нигде не хочет - пишет файл нот фаунд или файл креате еррор

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 08:25 13-09-2010
    GORA2



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

    Цитата:
    имя файла не может заканчиваться точкой(точками)

    Может, если файл имеет расширение:

    Код:
    имя_файла............txt

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 12:35 13-09-2010 | Исправлено: GORA2, 12:36 13-09-2010
    res2001



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

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

    Вполне себе можно создавать файлы и с пробелами в начале и с точкой в конце, другое дело что некоторые программы их не могут нормально открыть, но это дело этих программ.
    Сама файловая система работает с такими файлами на ура.
    Например FAR прекрасно создает подобные файлы, копирует их и т.п.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 12:47 13-09-2010
    bomzzz



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

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:04 13-09-2010 | Исправлено: bomzzz, 14:31 13-09-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    bomzzz
    FAR же написан не на голом месте и не работает с файловой системой напрямую. Все делается через WIN API, а значит винда ничего против таких файлов не имеет.
     

    Цитата:
    скажите лучше как счетчик внутри фора организовать


    Код:
    set /a "count=0"
    for ... do (
        set /a "count+=1"
    )

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:32 13-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    он не циклы фора должен считать, а независимо от фора счет вести внутри тела цикла
     
    Добавлено:
    фар ничего против не имеет и обратных слешей и прямых и кавычек в именах
    и звездочек
     
    Добавлено:
    через апи напрямую точки обрезает а пробел нет.
     
    Добавлено:
    експлорер получается их обрезает

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:35 13-09-2010 | Исправлено: bomzzz, 14:40 13-09-2010
    res2001



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

    Цитата:
    он не циклы фора должен считать, а независимо от фора счет вести внутри тела цикла  

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

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:49 13-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    при разборе выхода команды DIR если папка с таким именем существует дописать в конец нумер и так далее
     
    Добавлено:
    еще бы желательно сделать это без сетенабллокал, а то тогда восклицательные знаки в именах нельзя использовать. но так наверно не получица

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:52 13-09-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    bomzzz
    дык, что значит
    Цитата:
    если папка с таким именем существует
    , естественно существует, ты же dir по этим же папкам делаешь, или я чего-то не понял.
    Получается просто добавить ко всем папкам порядковый номер?
     

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 15:08 13-09-2010
    bomzzz



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

    Цитата:
     

    задача:
    в одной папке лежат абсолютно случайные файлы,  как то: файлы с расширениями, без расширений и возможно имеющие одинаковые имена, но имеющие разные расширения (или не имеющие). к некоторым файлам созданы файлы описаний, имя которых: <имя файла с раширением.txt>, в то же время текстовые файлы, находящиеся в папке, могут и не являться файлами описаний. надо распихать все файлы по папкам с названием - <имя файла без расширения>, файлы описаний должны попасть в папки своих файлов. ну и понятное дело во всем этом могут быть русские буквы. так как файлы абсолютно случайные, какие то ситуации могут в этой схеме быть и не упомянуты

     
    если в папке лежат файлы KAKA KAKA.BAT KAKA.RAR KAKA.ZIP KAKA.VOB
    то каждая должна попасть в свою папку с именем KAKA-1 KAKA-2........
     
    Добавлено:
    я сделал что если папка уже существует то в конец расширение приляпывается, ну а как сделать с порядковыми нумерами. может от фора отказаться

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 15:12 13-09-2010 | Исправлено: bomzzz, 15:15 13-09-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    bomzzz
    чтоб не плодить кучу счетчиков для каждого файла, можно делать так:
    когда надо создать папку проверяем ее на существование, если она уже существует, добавляем 1 в конец и снова проверяем. Делается достаточно просто рекурсивной функцией, что-то подобное только для файлов я уже делал.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 15:18 13-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну не получается внутри фора сделать метку и отдельный цикл организовать. ругается на метки
     
    Добавлено:
    ну напиши батник человеку, на этом форуме даунлоадмастера в оснвоном люди которые компьютер только включать умеют. главное чтоб короче получилось. и желательно с нумерами
     
    http://downloadmaster.ru/forum/viewtopic.php?f=2&t=12727

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 15:19 13-09-2010
    res2001



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

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 15:25 13-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну может я чета натупил засыпал уже когда делал
     
    Добавлено:
    http://forum.ru-board.com/topic.cgi?forum=62&topic=21297&start=200#20
    рабочая болванка уже есть

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 15:27 13-09-2010 | Исправлено: bomzzz, 15:33 13-09-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    bomzzz
    как-то так получилось, по моему то что надо:

    Код:
    @echo off
    setlocal enabledelayedexpansion
    set "outdir=c:\1\"
    set "indir=c:\2\"
    for /f "tokens=*" %%a in ('DIR /A-D /B %indir% ') do (
        call :getdirname %%~na
        md %outdir%!getdirname!
        move %indir%%%a %outdir%!getdirname!\
    )
    exit
     
    rem Имя каталога в переменной !getdirname!
    :getdirname
    if "%2" equ "" (set "fnum=0" & set "getdirname=%1") else (set "fnum=%2" & set "getdirname=%1-%2")
    if exist %outdir%%getdirname%\nul (
        set /a "fnum+=1"
        call :getdirname %1 !fnum!
    ) else set "fnum="
    exit /b

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 16:16 13-09-2010 | Исправлено: res2001, 17:15 13-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а как им пользоваться то.  
     
    Добавлено:
    чета у мене ошибка, скопировалось что ли криво

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 16:41 13-09-2010
    sergioser

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Я новенький на форуме. Извините, если задам вопрос, который обсуждался уже, в поиске не нашел.
    В командной строке опыт работы минимальный, надеюсь, что кто-нибудь откликнется.
    Надо нарисовать скрипт, который бы анализировал текстовый файл на предмет наличия заданых символов (а именно мак-адреса). Если символы есть - послать мыло, или проиграть звук(а можно и одно и другое), если символов нет - ничего не делать.
    Буду благодарен за любые мысли по поводу. Или может подскажите где уже похожее чего-нибудь обсуждалось.
    Спасибо заранее за помощь.
    Всего хорошего!

    Всего записей: 5 | Зарегистр. 13-09-2010 | Отправлено: 16:44 13-09-2010 | Исправлено: sergioser, 16:48 13-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    мак адреса заранее известного?

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 16:45 13-09-2010
    res2001



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

    Цитата:
    а как им пользоваться то.  

    инициализируй переменные indir и outdir правильными значениями.
    dir перечисляет файлы из indir, а каталоги создаются в outdir.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 16:49 13-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну я создал на диске С 1 и 2 папки и у меня апшипка, батник вылетел. в 1 наложил файлов
     
    Добавлено:
     

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 16:52 13-09-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 9
    vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru