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

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

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

KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

hErAx

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

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

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

  • Отправлено: 01:53 25-10-2015 | Исправлено: Paromshick, 21:51 18-12-2017
    Inoz2000



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

    Цитата:
    Если её отключить, то пункт появляется
    может быть и так

    Цитата:
    Утилитка тоже нужна
    Их у вас там так много и все тоже нужны. Вы бы хоть таблицу по типу отсортировали. Так может другой вариант решения быстрее найдётся…

    ----------
    Мы все умрём. (-:

    Всего записей: 4891 | Зарегистр. 23-04-2009 | Отправлено: 08:28 25-08-2017
    villa777



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

    Всего записей: 2773 | Зарегистр. 22-06-2011 | Отправлено: 08:35 25-08-2017
    Vidocqq

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    нашел батник, но он не работает. Не подскажете почему - не выдает текст на экране "!number!.text", где !number! должно меняться от 01 до 05.
     
    set cntStart=1
    set cntEnd=5
    set number=
    set addZero=1
    set local enabledelayedexpansion
    for /l %%i in (%cntStart%,1,=%cntEnd%) do (
    rem    echo %%i
        if %%i LSS 10 (
            if %addZero% EQU 1 (
                set number=0%%i
            ) else (
                set number=%%i
            )
        ) else (
            set number=%%i
        )
    rem     echo number: !number!  ^!number!  %%number%
        echo "!number!.text"
    )
    pause
    exit /b

    Всего записей: 1012 | Зарегистр. 03-09-2007 | Отправлено: 11:55 09-09-2017 | Исправлено: Vidocqq, 11:56 09-09-2017
    Inoz2000



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

    Всего записей: 4891 | Зарегистр. 23-04-2009 | Отправлено: 12:12 09-09-2017
    Vidocqq

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Inoz2000
    Это была опечатка
    без пробела тоже не работает.
    На экране постоянно получаю - "!number!.text"
    Не хочет номер подставлять, нивкакую..

    Всего записей: 1012 | Зарегистр. 03-09-2007 | Отправлено: 12:20 09-09-2017 | Исправлено: Vidocqq, 12:21 09-09-2017
    YuS_2



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

    Цитата:
    без пробела тоже не работает.

    ищите ещё "опечатки"... заодно, в начало добавьте @echo off
     

     
    Даже если исправить ещё одну "очепятку", лишний знак "=" в цикле, то всё равно, всё также будет работать:
     

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 12:38 10-09-2017 | Исправлено: YuS_2, 12:48 10-09-2017
    VadKomarov



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

    Цитата:
    [size=5][/size]Всем здравствуйте.  
    Сразу прошу прощения за такой простецкий вопрос.  
    Суть такая. есть файлы они копируются в нужные папки по расширениям.  
    проблема заключается вот в чем.  
     
    к примеру есть файл ххххххххх_123456789.xml.ops и есть файл ххххххххх_123456789.xml[1].ops теоретически должны быть одинаковыми, но надо проверить их как то на размер и оставить больший с именем ххххххххх_123456789.xml.ops  
    это задача 1  
    и потом задача 2  
    есть папка(и) (5 штук) где эти файлы уже складируются (после обработки в специальном обработчике EXE) куда именно из 5 папок ляжет этот файл не известно, и так же есть папка из которой обработчик берёт эти файлы, надо определить если ли такой файл ххххххххх_123456789.xml.ops (с таким же размером) во всех этих папках, если он уже есть и с таким же размером то просто удалить а если нет то скопировать в папку для обработки и соответственно если новый файл большего размера то так же положить в обработку  
     
    для более детального объяснения:  
    папки с именами 0,1,2,3,4 - это папки хранения обработанных ранее файлов  
    папка Work - место откуда берутся файлы для обработки  
    проверять надо в папках 0-4 и work !!!  
    и папка IN это папка в которую помещаются файлы приходящие с почты и в которой могут быть файлы с именем *[1].* - задача №1  
     
    если плохо объяснил то могу более детально расписать.  
     
    Заранее огромное спасибо
     

     
    Ребята хоть и не решил пока вопрос с проверкой по размеру но вот вдруг кому понадобиться решение.
     

    Код:
     
    chcp 1251
    @Echo Off
    for /f %%A in ('dir /b /a-d /os *.xml[?].*') do (                            
       echo Расширение файла: %%~xA  
       if /i not "%%~xA" == ".fi!" (                                                
          echo НАЙДЕН ФАЙЛ НЕ В СТАДИИ ЗАГРУЗКИ
          for /f "tokens=1* delims=[]" %%a in ("%%~nA") do (                    
           echo Имя файла: %%A  
           for /D %%B in (D:\0 D:\1 D:\2 D:\3 D:\4 D:\Temp) do (      
            call D:\findfiles.bat %%B %%A %%a%%~xA
           )                                                                    
          if /i exist %%A (
          if /i exist %%a%%~xA (                                                
            echo Уже есть файл, надо написать сравнение по размеру
            ) Else (
            echo Переименование файла
            ren %%A %%a%%~xA  
            )  
          )
          )                                                                      
        ) else (
        echo %%A НАХОДИТСЯ В СТАДИИ ЗАГРУЗКИ
        )                                                                        
    )                                                                            
    echo -------------------ПРОВЕРКА НА СУЩЕСТВОВАНИЕ УЖЕ ЗАЛИТЫХ---------------------
    for /f %%A in ('dir /b /a-d /os *.xml.*') do (                            
       if /i not "%%~xA" == ".fi!" (                                                
           echo Ищем файл %%A
           for /D %%B in (D:\0 D:\1 D:\2 D:\3 D:\4 D:\Temp) do (      
            call D:\findfiles.bat %%B %%A %%A
           )
       )                                                                  
    )

     

    Код:
     
    rem findfiles.bat
    echo Проверяем %1\%3
    if /i exist %2 (
            if /i exist %1\%3 (
               echo найден в %1 удаляем и выходим
               del %2
               exit /b
               ) else (
               echo искомого файла в папке %1 нет
               )
    ) else (
    echo ранее уже удален
    )
     

    Всего записей: 100 | Зарегистр. 01-05-2005 | Отправлено: 03:37 11-09-2017
    maxe101

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте люди добрые, нужно сделать батник который удалял бы файлы в папке с расширениями .bak и .txt, при этом он должен это делать не по "старости" файлов, а по количеству их в папке (нужно что бы хранилось в папке по 2 файла от каждого расширения). То бишь: если в  папке 8 файлов батник должен снести 2 файла от каждого расширения но при этом оставить более свежие. Я полагаю задача не простая т.к. не нашел нигде метода решения.

    Всего записей: 5 | Зарегистр. 11-09-2017 | Отправлено: 12:47 11-09-2017
    NIKZZZZ



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

    Код:
    @echo off
    setlocal enabledelayedexpansion
    set /a i=2
    for /f "delims=" %%a in ('dir /b /a-d /o-d *.txt') do (
      if !i!==0 (
        echo     del %%a
      ) else (
        echo not del %%a  
            set /a i-=1
      )
    )
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 13:43 11-09-2017
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    NIKZZZZ
    Проще skip в цикле заюзать, тогда и delayed expansion не понадобится

    Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 13:47 11-09-2017
    Onjy

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Может знает кто?  
    Есть вот такая строчка: forfiles /p D:\ /s /d -31 /c "cmd /c echo @path" > E:\files.txt
    Выводит список имен файлов старше н-дней, но русские имена выводит вопросами.  
    Подскажите, пожалуйста, как вывести русские имена в читабельном виде?
    Спасибо.

    Всего записей: 22 | Зарегистр. 04-08-2017 | Отправлено: 14:01 11-09-2017
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Onjy
    Переключить кодировку перед командой
    Цитата:
    chcp 1251

    Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 14:05 11-09-2017
    Onjy

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Огромное спасибо за такой быстрый ответ, но не подскажете ли куда именно в моем случае вставить этот параметр,
     
     
    Добавлено:
    Всё, вроде получилось. Меня спас метод научного тыка. Еще раз спасибо.  
    Теперь строка выглядит вот так: forfiles /p D:\ /s /d -31 /c "cmd /c echo chcp 1251 @path" > E:\files.txt
     
    Добавлено:
    Увы. Рано радовался. На рабочей станции (тест) отработало нормально с кодировкой 1251. Все записи читаемы, но на английском сервере опять выходят одни "?". Менял кодировки кроме 1251 на 850, 855, 866, 65001. Всегда в русских именах одни "???".

    Всего записей: 22 | Зарегистр. 04-08-2017 | Отправлено: 14:08 11-09-2017
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Onjy
    Поставил английскую XP и вашим любимым "методом тыка" выяснил, что просто chcp нужно запускать ДО forfiles
    Код:
    chcp 1251 && forfiles /p D:\ /s /d -31 /c "cmd /c echo @path" > E:\files.txt

    В таком виде работает и для 1251, и для 866, и для 65001 и даже для 855...


    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 23:05 11-09-2017
    Onjy

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

    Всего записей: 22 | Зарегистр. 04-08-2017 | Отправлено: 08:21 12-09-2017
    maxe101

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

    Цитата:
    @echo off  
    setlocal enabledelayedexpansion  
    set /a i=2  
    for /f "delims=" %%a in ('dir /b /a-d /o-d *.txt') do (  
      if !i!==0 (  
        echo     del %%a  
      ) else (  
        echo not del %%a  
            set /a i-=1  
      )  
    )  
     


    Всего записей: 5 | Зарегистр. 11-09-2017 | Отправлено: 10:11 13-09-2017
    bomzz

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    @echo off
    cd /d D:\Path
    dir /b
    pushd D:\Path
    dir /b
    popd
    pause
     
    Добавлено:
    как то запутано оно работает, но ничего страшного не делает
     
    Добавлено:
    по моему просто сообщает об удалении второго текстового файла

    Всего записей: 3412 | Зарегистр. 29-03-2016 | Отправлено: 10:29 13-09-2017 | Исправлено: bomzz, 10:30 13-09-2017
    maxe101

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Блин, не могу заставить работать этот код. Распишу по подробней что нужно, может кто напишет код. Есть папка C:\Users\admin\Desktop\test, в ней файлы с расширением .txt, требуется удаление этих файлов если они страрше 2-х дней и что бы он не удалял их если в папке осталось 2 файла с этим расширением. Пожалуйста распишите каждое действие для понимания процесса.

    Всего записей: 5 | Зарегистр. 11-09-2017 | Отправлено: 10:58 13-09-2017 | Исправлено: maxe101, 10:59 13-09-2017
    NvvLazyTiger



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет, maxe101.
    Цитата:
    Есть папка C:\Users\admin\Desktop\test, в ней файлы с расширением .txt, требуется удаление этих файлов если они страрше 2-х дней и что бы он не удалял их если в папке осталось 2 файла с этим расширением. Пожалуйста распишите каждое действие для понимания процесса
    Не вопрос. Можно и попроще, и расписать...
    Smile

    Код:
    @echo off
    :: место действия
    set dirL=C:\Users\admin\Desktop\test
    :: маска файлов-"кандидатов"
    set fTyp=*.txt
    :: полная маска (файлов-"кандидатов")
    set fTyp=%dirL%\%fTyp%
    :: сколько оставить
    set leave=2
    :: счётчик
    set count=0
    :: "кандидаты" есть? (в именах файлов могут оказаться пробелы и прочие ужасы)
    if exist %fTyp% (
    :: перебор в сторону прошлого и БЕЗ атрибутов "скрытый", "только чтение" или "системный"
     for /F "delims=" %%Z in (
     'dir %fTyp% /A-D-H-R-S /B /O-D'
     ) do (
    :: очередной "кандидат" на
     set fNam="%%Z"
    :: пошли, заценим-с...
     call :KillThis
     )
    )
    :: отчёт о проделанной работе
    echo %~nx0 "Kill too old %fTyp% (leave <= %leave%)": found %count% file(s)
    goto :eof
     
    :KillThis %%Z собственно действие...
    :: зачтём "кандидата"
    set /a count+=1
    :: больше заданного?
    if %count% LEQ %leave% goto :eof
    :: да, команда "поплакать..."
    echo #%count% %fNam%
    :: команда "УБИТЬ!"
    rem erase %fNam%
    Как есть - выводит список "кандидатов".
    Если убрать "rem " (в последней строке), - будет удалять...
     
    NB. *.bak - по образцу.
    + доп. условие "страрше 2-х дней" НЕ проверяется.
     
    Updated. Ещё немножко наглядности подсыпано....
     
    ---
    Удачи!
    Влад.

    Всего записей: 257 | Зарегистр. 14-02-2009 | Отправлено: 14:57 13-09-2017 | Исправлено: NvvLazyTiger, 05:09 14-09-2017
    maxe101

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ПРИ МНОГО БЛАГОДАРЕН!





    п. 2.8.2. главы VIII Соглашения по использованию

    Всего записей: 5 | Зарегистр. 11-09-2017 | Отправлено: 16:17 13-09-2017 | Исправлено: KLASS, 17:00 13-09-2017
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Активные темы » Задачи на bat-файлах 12
    KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru