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

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



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

    Цитата:
    еще одна ошибка нашлась для файлов текстовых со своими описаниями

    Ну я думаю принцип то понятен, можешь в for вставлять любые дополнительные условия.
    Функция getdirname сама ничего не создает и не переносит, только вычисляет имя создаваемого каталога, которое записывается в переменную getdirname, которую и используешь в дальнейшем.

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



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

    Цитата:

    @ECHO OFF
    COLOR 9F
    CLS
    CHCP 1251
    CD /D "C:\TEMP"
    SET MYTIME=%DATE%-%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%

    for /F "delims=" %%I in ('dir /A:-D /B') do (
       if "%%~xI"=="" (
           MD "%%I-%MYTIME%"
            MOVE "%%I" "%%I-%MYTIME%"
            if exist "%%I.txt" MOVE "%%I.txt" "%%I-%MYTIME%"
            REN "%%I-%MYTIME%" "%%I"

       ) else (
           if NOT %%~xI==.txt (
               if exist "%%~nI" (
                   MD "%%~nI-%%~xI"
                    MOVE "%%I" "%%~nI-%%~xI"
                    if exist "%%I.txt" MOVE "%%I.txt" "%%~nI-%%~xI"

               ) else (
                   MD "%%~nI"
                    MOVE "%%I" "%%~nI"
                    if exist "%%I.txt" MOVE "%%I.txt" "%%~nI"

               )
           )
       )
    )
     
    for /F "delims=" %%I in ('dir /A:-D /B') do (

        if exist "%%I" (
                if exist "%%~nI" (
                MD "%%~nI-%%~xI"
                MOVE "%%I" "%%~nI-%%~xI"
                if exist "%%I.txt" MOVE "%%I.txt" "%%~nI-%%~xI"

               ) else (
               MD "%%~nI"
                MOVE "%%I" "%%~nI"
                if exist "%%I.txt" MOVE "%%I.txt" "%%~nI"

               )
        )
    )
    PAUSE

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



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

    Цитата:
    еще одна ошибка нашлась для файлов текстовых со своими описаниями

    Какое имя имеют описания для текстовых файлов?

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



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

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



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

    Цитата:
    MOYFILE.txt - описание: MOYFILE.txt.txt  

    ясно, щаз поправлю код.

    Цитата:
    даунлоад мастером не пользуешься что ли?

    нет

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



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

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



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

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



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

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

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

    Цитата:
    if exist %%I

    if exist "%%I"
     
     

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 19:19 13-09-2010
    bomzzz



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

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

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

    Цитата:
    for /F "delims=" %%I in ('dir /A:-D /B') do (  
           if exist "%%I" (  

    бессмыслено, так как %%I всегда exist
     

    Цитата:
    if exist "%%~nI" (  


    Цитата:
    REN "%%~nI-%%~xI" "%%~nI"  

     
    как можно переименовать, если папка (файл) уже существует?
     

    Цитата:
               if exist "%%~nI" (  
                   MD "%%~nI-%%~xI"  
                    MOVE "%%I" "%%~nI-%%~xI"  
                    if exist "%%I.txt" MOVE "%%I.txt" "%%~nI-%%~xI"  
                    REN "%%~nI-%%~xI" "%%~nI"  

     
    мутно, проверяй
    Вот так проверяют каталоги  
    if exist "%%I\"
     
    А так и каталоги и файлы
    if exist "%%I"

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 23:06 13-09-2010
    bomzzz



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

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 23:08 13-09-2010 | Исправлено: bomzzz, 03:30 14-09-2010
    faithful



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

    Цитата:
    не бессмыслено. потому что %%I не всегда exist  

    Может я чего не понимаю в работе команды dir, но если последняя что-то выдала, то оно таки да всегда exist.

    Всего записей: 240 | Зарегистр. 09-09-2005 | Отправлено: 23:25 13-09-2010
    bomzzz



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

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



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

    Цитата:

    @ECHO OFF
    COLOR 9F
    CLS
    CHCP 1251
    CD /D "C:\TEMP"

     
    for /F "delims=" %%I in ('dir /A:-D /B') do (
           if exist "%%I" (
               if exist "%%~nI" (
     
    REM        if exist " %%~nI\" REN " %%~nI\" "  %%~nI"
     
                    MD " %%~nI"
                    MOVE "%%I" " %%~nI\"
                    if exist "%%I.txt" MOVE "%%I.txt" " %%~nI\"
                    REN " %%~nI\" "%%~nI%%~xI"

               ) else (
                    MD "%%~nI"
                    MOVE "%%I" "%%~nI"
                    if exist "%%I.txt" MOVE "%%I.txt" "%%~nI"

               )
           )
    )
    PAUSE

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

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

    Цитата:
     у меня только счетчик не получилось сделать

    bomzzz
    for /F "delims=" %%I in ('dir /A:-D /B') do (
        set "h=%%I"
        set /a number+=1
        call :yu
    )
    pause
    :yu
    echo %number%
    echo %h%
     
    Добавлено:
    и задачи формулируй чётче, как в школе за 5 класс.
    Дано: в папке имеются файлы вида:
    "a"
    "b"
    "c"
    ...
    Нужно:
    ...
     
    Добавлено:
    for /F "delims=" %%I in ('dir /A:-D /B') do if not exist "%%I" echo file %%I not exist
    проверяй

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 07:22 14-09-2010
    bomzzz



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

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток.
     
    Подскажите, как можно удалить ветку в реестре для каждого локального пользователя в HKCU. Важно, чтобы обрабатывалось моментально, а не при следующем логине пользователя (т.е. решения связанные с GPO не подходят)
    Форум бегло прогуглил, ничего похожего не нашел(
     

    Всего записей: 5 | Зарегистр. 04-08-2007 | Отправлено: 10:24 14-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alloran
    @ECHO OFF
    COLOR 9F
    CLS
    reg delete /?
    pause

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz
    Спасибо, конечно, но задача немного сложнее)
     
    Нужно удалять ключи в HKCU _другого_ пользователя.  
    reg load не подойдет, ибо оно не позволяет подключить куст, если его владелец залогинен и файл используется..
     
    Или, как вариант, нуден способ запускать батники в терминальной сессии другого пользователя)
     
    В общем, нужно решение для экстренного снесения одним пользователем записей о базах 1с 7.7 для всех остальных юзеров..

    Всего записей: 5 | Зарегистр. 04-08-2007 | Отправлено: 10:52 14-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.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru