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

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

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

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    patrion



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Мне кто нибудь может помочь?

    Всего записей: 69 | Зарегистр. 29-09-2009 | Отправлено: 12:40 26-03-2010
    yurkesha



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

    Цитата:
    precomp -slow "Fallout - Meshes.bsa"



    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 12:45 26-03-2010
    patrion



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Круть! Спасибо! Выручил =)

    Всего записей: 69 | Зарегистр. 29-09-2009 | Отправлено: 12:54 26-03-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    %9_3%.bat (запуск в консоли)

    Код:
    @echo off
    echo Hello, we are in
    rem Рекурсивный вызов, %%~0 раскроется два раза
    call %%~0

    2-ой урок bat-аники  
     

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 14:07 26-03-2010 | Исправлено: mugil_cephalus, 14:08 26-03-2010
    AlexanderBV

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha
    Ясно, спасибо.  
    Знаю в какую сторону теперь копать.

    Всего записей: 80 | Зарегистр. 28-10-2003 | Отправлено: 14:08 26-03-2010
    TAVulator



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

    Цитата:
    Код:for /f "delims=" %%a in (file.lst) do for /r %%a %%i in (*.*) do dir "%%~fi"

    спасибо за ответ.
    Пишет, что Непредвиденное появление: %i.
     
    Как все-таки это сделать?

    Всего записей: 12 | Зарегистр. 03-08-2008 | Отправлено: 14:38 26-03-2010
    wolf0425



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

    Цитата:
    12345678.001   26.03.2010 10:00  100 Кб
    12345678.002   26.03.2010 10:01  500 Кб
    12345678.003   26.03.2010 18:00  200 Кб
    12345678.004   26.03.2010 18:20  800 Кб
    Требуемый файл - 12345678.002  
    Требуемый файл - 12345678.002  
    почему 002 когда 004 имеет ту же дату и больше?

    Цитата:
    при этом сначала отобрать файлы с самой ранней датой создания
    Именно временем создания, а не временем последней его модификации?
     

    Цитата:
    Второй скопированый файл должен быть создан вчера, с самой поздней датой создания и самим меньшим размером. Пример:
    12345678.001   25.03.2010 10:00  100 Кб
    12345678.002   25.03.2010 10:30  500 Кб
    12345678.003   25.03.2010 22:00  200 Кб
    12345678.004   25.03.2010 22:10  800 Кб
    Требуемый файл - 12345678.003  
    опять непонятно почему 003 а не 12345678.001 - у него размер явно меньше. а у 12345678.004  - дата ещё более последняя.
     

    Цитата:
    Чота вспомнилось, сегодня раки маленькие.  
    а вот вчера большие но по 5 рублей.  
    угу, именно оно.
     
    TAVulator
    Цитата:
    спасибо за ответ.
    Пишет, что Непредвиденное появление: %i.
    Как все-таки это сделать?  
    тогда так:
    Код:
    for /f "delims=" %%a in ('type file.lst') do (
        dir "%%~fa"
        for /f "delims=" %%i in (' dir /b/s/a:d "%%~fa"') do dir "%%i\"
    )
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:39 26-03-2010 | Исправлено: wolf0425, 14:57 26-03-2010
    AlexanderBV

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Именно поэтому я указал время. 002 имеет раннее время создания. Сначала должны отфильтроваться 001 и 002, так как оба созданы раньше всех 26.03.2010 10:00 (получается с точностью в 1 минуту, секундами можно пренебречь), а затем среди них уже нужен файл 002 так как у него больше размер. 004 создавался позже.
    Тоже касается и второго файла: за вчера самые "поздние" файлы будут 003 и 004 (в моем сообщении дата и время 25.03.2010 22:00 у обеих файлов), среди них 003 имеет меньший размер. Иногда файлов с полностью одинаковой датой и временем создания не 2, а 1, тогда по размеру сравнение не нужно.
     

    Всего записей: 80 | Зарегистр. 28-10-2003 | Отправлено: 16:04 26-03-2010 | Исправлено: AlexanderBV, 16:25 26-03-2010
    wolf0425



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

    Цитата:
    Именно поэтому я указал время
    именно поэтому я и поправил пример на чуть другое время, когда спрашивал.

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

    Цитата:
    а затем среди них уже нужен файл 002 так как у него больше размер.

    т.е сортировать файлы надо с искусственным загрублением времени и вручную?
    брать просто тот единственный что система считает самым свежим - нельзя?
     

    Цитата:
    Тоже касается и второго файла: за вчера самые "поздние" файлы будут 003 и 004  
    нет, самый поздний - он единственный, по определению самого позднего.  
    Если тебе нужно  посравнивать несколько самых поздних - то надо было не лениться сразу писать критерий выбора этих нескольких.

    Цитата:
    Иногда файлов с полностью одинаковой датой и временем создания не 2, а 1, тогда по размеру сравнение не нужно.  
    если время брать точно - без специально принимаемых мер такой файл всегда единственный, на NTFS шаг времени - миллисекунды.
     
    Кстати ты проигнорировал вопрос - нужен файл в который последним модифицирован или действительно который последним создан? это очень разное время.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 17:43 26-03-2010 | Исправлено: wolf0425, 17:50 26-03-2010
    AlexanderBV

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я не проигнорировал, в предыдущем сообщении написал дата создания. Касательно остального прийду на работу - отпишу.

    Всего записей: 80 | Зарегистр. 28-10-2003 | Отправлено: 18:24 26-03-2010
    wolf0425



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

    Цитата:
    Я не проигнорировал, в предыдущем сообщении написал дата создания.  
    напрочь не вижу - там по контексту слова одинаково подходит и создание и модификация, и никакой уверенности что ты не путаешь одно с другим - так и не наступило.
    Ну если ты уверен что создания  - не вопрос...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 19:33 26-03-2010
    yurkesha



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

    Цитата:
    при этом сначала отобрать файлы с самой ранней датой создания

    Дык AlexanderBV чуток подсказать надо - дальше он сам справится... Надо же с чего-то начинать... Если неправильно сформулировал - в процессе отладки переформулирует...

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 20:28 26-03-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    l3ha,wolf0425
    Все получилось! Спасибо!
     
    Не подскажите, как можно сделать проверку файлов, т.е. проверить все ли необходимые файлы есть, если да, то продолжить работу батника, если нет, то выдать сообщение, что следующие файлы не обнаружены и список файлов?
     
    И как можно сделать, чтобы батник нельзя будет запускать, если он уже запущен?
    В конце я батник буду конвертировать в exe

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 21:25 26-03-2010 | Исправлено: lorents, 00:14 27-03-2010
    rdenk1

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть определенная папка, можно ли удалить в ней все файлы, дата создания которых старее на 7 или более дней по сравнению с текущей датой? Кстати, имя файла совпадает с его датой создания.

    Всего записей: 117 | Зарегистр. 27-04-2009 | Отправлено: 23:25 26-03-2010
    TAVulator



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

    Код:
    @echo OFF
    echo Sync_TAV
    echo Start %date% - %time% >>log.txt
     
    Set c_Day=%Date:~0,2%
    Set c_Month=%Date:~3,2%
    Set c_Year=%Date:~6,4%
    Set c_Hour=%Time:~0,2%
    Set c_Min=%Time:~3,2%
    for /f "delims=" %%a in ('type list.txt') do (
        echo "%%~fa"
        for /f "delims=" %%i in ('dir /b/s/a:d "%%~fa"') do (
            echo "%%~fi"
            for /f "delims=" %%b in ('dir /b/s/a:-d "%%~fi"') do (
                echo "%%b"
                @Call :Goo %%b %%~tb
            )
        )
    )
    REM ---
    echo End %date% - %time% >>log.txt
    GoTo :EOF
    :Goo
    rem echo Goo
    Set f_Name=%1
    Set f_Date=%2
    Set f_Time=%3
    Set f_Day=%f_Date:~0,2%
    Set f_Month=%f_Date:~3,2%
    Set f_Year=%f_Date:~6,4%
    Set f_Hour=%f_Time:~0,2%
    Set f_Min=%f_Time:~3,2%
     
    If /I %f_Year%==%c_Year% (
     If /I %f_Month%==%c_Month% (
      If /I %f_Day%==%c_Day% (
         Echo %F_Name% >>new_list.txt
         Echo %F_Name% %f_Day%.%f_Month%.%f_Year%
      )
     )
    )
    GoTo :EOF
     

    Всего записей: 12 | Зарегистр. 03-08-2008 | Отправлено: 23:47 26-03-2010 | Исправлено: TAVulator, 23:49 26-03-2010
    wolf0425



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

    Цитата:
    есть список каталогов. нужно из этих каталогов со всеми подкаталогами взять все файлы с сегодняшней датой и записать их полный путь в отдельный файл.  
    это на for вложенности меньше чем заявка запускать чего-то абтрактное (dir я же там вписывал для примера) в каждом из подкаталогов каталога списка.
    Да и сравнение на текущую дату у тебя перегружено.
     

    Код:
    @echo off
    for /f "delims=" %%a in ('type list.txt') do (
        echo "%%~fa"
        for /f "delims=" %%i in ('dir /b/s/a-d "%%~fa"') do (
            echo %%~ti | 1>nul findstr /b /c:"%date%" && 1>>new_list.txt echo.%%~fi
            )
        )
    )
    всех делов практически в одну строку

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 00:36 27-03-2010 | Исправлено: wolf0425, 00:42 27-03-2010
    AlexanderBV

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Я не путаю одно с другим и знаю разницу между датой создания и модификации.

    Цитата:
    ниоткуда из предыдущего описания не следует что секундами допустимо и нужно пренебрегать
    согласен

    Цитата:
    брать просто тот единственный что система считает самым свежим - нельзя?  
    угумс

    Цитата:
    Если тебе нужно  посравнивать несколько самых поздних - то надо было не лениться сразу писать критерий выбора этих нескольких.
    Да я и не ленился, просто в процессе изначального написания, не учитывал ряд вещей, кои в последствии переформулировал.

    Цитата:
    если время брать точно - без специально принимаемых мер такой файл всегда единственный, на NTFS шаг времени - миллисекунды.  
    да, согласен
     
    Вот не выдуманный пример:
    В папке у меня имеются файлы:
    12345678.384    7784      24.03.2010 19:18
    12345678.360    5984      24.03.2010 12:38
    12345678.351    5528      24.03.2010 11:21
    12345678.348    1928      24.03.2010 03:35
    12345678.349  24880      24.03.2010 03:35
    12345678.347  24880      23.03.2010 23:49
    12345678.346    1928      23.03.2010 23:49
    12345678.344    1928      23.03.2010 23:34
    12345678.345   24880  23.03.2010 23:34
    Мне нужно скопировать файлы .349 и .344 (в данном случае подойдет и .346,  но только не .348)

    Всего записей: 80 | Зарегистр. 28-10-2003 | Отправлено: 00:46 27-03-2010
    wolf0425



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

    Цитата:
    Если неправильно сформулировал - в процессе отладки переформулирует...

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

    Код:
    for /f "delims=" %%a in ('dir /n /t:c /o-d /a-d ^| findstr /v /B /c:" " ') do set "str=%%~a" & call:proc %%~a
    exit
     
    :proc
    rem и тут на выбор из %1...%4 или из %str% разбирать дату/время/размер/имена как нравится.


    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 00:52 27-03-2010 | Исправлено: wolf0425, 00:53 27-03-2010
    AlexanderBV

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    rdenk1
    Можно.
    forfiles.exe /p D:\test\ /s /m *.* /d -14 /c "cmd /c del /q /f @file"
    Удаляет все файлы в папке D:\test\ старше 14 дней.
    forfiles.exe - утилита из ресурс кита 2003 сервера, подходит под ХР
    Есть и под Windows2000, но размер меньше и ключи отличаются.
     
    Добавлено:
    wolf0425
    Это не логи, а только свеже созданные файлы в указанное выше время, у них дата создания и модификации будет отличатся 2-мя - 3-мя секундами.

    Цитата:
    но если ему действительно надо странное
    Что значит "странное"?
     

    Всего записей: 80 | Зарегистр. 28-10-2003 | Отправлено: 00:59 27-03-2010
    wolf0425



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

    Цитата:
    Это не логи, а только свеже созданные файлы в указанное выше время, у них дата создания и модификации будет отличатся 2-мя - 3-мя секундами.  
    ну а я о чем. рабочие файлы. и время модификации доступно просто из %%~ti - в отличие от времени создания, доступного только через dir /t:c.
     

    Цитата:
    Что значит "странное"?  
    условия, которые быстро и понятно сформулировать не получается.
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 08:36 27-03-2010 | Исправлено: wolf0425, 08:44 27-03-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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru