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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Inoz2000
    К сожалению так тоже пункт не появляется.
    ТУТ

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



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

    Цитата:
    пункт не появляется.  
    я вам не верю.
    Цитата:
    например его нет на видео, аудио, html файлах


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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Inoz2000
    Мне по вашему заняться нечем. Извольте. Навести мышку на картинку.

     
    У меня ХР, если что.

    Всего записей: 2773 | Зарегистр. 22-06-2011 | Отправлено: 00:15 25-08-2017 | Исправлено: villa777, 02:56 25-08-2017
    Inoz2000



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

    во-вторых, 'Очистить корзину' тоже не на всех появляется. MediaInfo тоже... А отсутствие пункта меню выделенного жирным (например, как 'Открыть в PotPlayer') - это так специально задумано или само получилось? Это оффтопик уже.
     
    villa777
    Цитата:
    Мне по вашему заняться нечем.
    Теперь вам есть, чем заняться. У вас там конфликт, так бывает. Какое-то из расширений контекстного меню проводника надо исключить, тогда всё наладится. Если вам надо. Методом тыка, разумеется.
     
    Поможет ShellExView, с помощью которой можно выключать расширения контекстного меню.
    Цитата:
    ShellExView can be used for solving context-menu problems in Explorer environment


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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Inoz2000
    Оказался конфликт с утилитой удаления Unlocker. Если её отключить, то пункт появляется. И как их теперь подружить? Утилитка тоже нужна, когда системой не удаляются файлы, она удаляет на раз.

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



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

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

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

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

    Всего записей: 4917 | Зарегистр. 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

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



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

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

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

    Всего записей: 1013 | Зарегистр. 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 не понадобится

    Всего записей: 12419 | Зарегистр. 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

    Всего записей: 12419 | Зарегистр. 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

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

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

    Всего записей: 22 | Зарегистр. 04-08-2017 | Отправлено: 08:21 12-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