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

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



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Koster_2
    И что же он пишет, когда не удаляет?

    Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 19:14 13-11-2017
    Koster_2



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pasha_ZZZ,
    ничего не пишет, на секунду моргнёт окно и всё. Посмотреть не удается.  

    Всего записей: 161 | Зарегистр. 08-12-2002 | Отправлено: 22:05 13-11-2017 | Исправлено: Koster_2, 22:07 13-11-2017
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Koster_2
    а поставить паузу в конце? или просто цмд запустить и выполнить там

    Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 22:12 13-11-2017
    Koster_2



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pasha_ZZZ
    пишет  
    Error:  Отказано в доступе.

    Всего записей: 161 | Зарегистр. 08-12-2002 | Отправлено: 22:22 13-11-2017
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Koster_2
    Вроде по-русски написано. Должно быть все понятно. Можно, например, использовать psexec -s

    Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 23:01 13-11-2017
    Koster_2



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

    Всего записей: 161 | Зарегистр. 08-12-2002 | Отправлено: 23:27 13-11-2017
    danetz

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Мужики хелп!! Есть бат файл определяющий время загрузки винды. У меня он ругается на ошибку - в пути вместо диска двойная буква "С". Откуда она берется и как будет верно?
     
    @echo off
    FOR /F "Tokens=4" %%a IN (‘%windir%\system32\wevtutil.exe qe Microsoft-Windows-Diagnostics-Performance/Operational /rd:true /f:Text /c:1 /q:"*[System[(EventID = 100)]]"  /e:Events ^| FIND "Duration"’) DO SET BTIME=%%a
    ECHO Boot Time is : %BTIME%
     
    Добавлено:
    пару ошибок найдено - отрабатывает но не выдает время
     
    FOR /F "usebackq tokens=4" %%a IN (`%windir%\system32\wevtutil.exe qe Microsoft-Windows-Diagnostics-Performance/Operational /rd:true /f:Text /c:1 /q:"*[System[(EventID = 100)]]"  /e:Events ^| FIND "Длительность загрузки"`) DO SET BTIME=%%a
    ECHO Boot Time is : %BTIME%

    Всего записей: 400 | Зарегистр. 25-02-2012 | Отправлено: 08:16 16-11-2017
    YuS_2



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

    Цитата:
    отрабатывает но не выдает время

    Всё дело в кодировках. Строки на кириллице в кодировке 1251, find найти не может. Надо либо шаблон задавать кракозябрами, либо вывод утилиты привести к кодировке 866... в общем, бубны, шаманы, пляски.
     
    А пока дам строку, которая выведет голое число времени загрузки, но на powershell:  
    script.ps1

    Код:
    (Get-WinEvent -logn Microsoft-Windows-Diagnostics-Performance/Operational|where{
        $_.id -eq '100'
        }|select -ind 0
    ).message.split("`n")|select-string -patt 'Длительность'|%{
        ($_.tostring().split(':') -match 'ms|мс') -replace '\s|мс|ms'
    }

    - запускать от имени администратора. При желании, код можно и в батнике использовать, и даже в переменную утрамбовать...

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 12:36 16-11-2017 | Исправлено: YuS_2, 18:38 17-11-2017
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    danetz
    Цитата:
    FIND "Длительность загрузки"
    заменить на
    Цитата:
    findstr /r "[0-9]ms$"

    Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 12:57 16-11-2017
    YuS_2



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

    Цитата:
    findstr /r "[0-9]ms$"

    Да, можно и так, конечно... но завтра понадобится событие с номером 200, а там уже, увы:

    Цитата:
    19091мс

    Это microsoft, там всё жестко сделано, на любой вкус, цвет и лангуэдж...
    в PoSh это учесть гораздо проще... см. выше, немного поправлено...

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:52 16-11-2017 | Исправлено: YuS_2, 14:55 16-11-2017
    CGGB

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

    Код:
     
    set FOLDER=%1
    if exist %temp%\files.lst del %temp%\files.lst
    FOR %%A in (%FOLDER%\*.*) do @echo %%~txA "%%A"  >>%temp%\files.lst
    FOR /F "tokens=1-6,* delims=.: " %%A in (%temp%\files.lst) do @rename %%G %%C_%%B_%%A__%%D_%%E.%%F
    del %temp%\files.lst
     

    Хотелось бы его подточить под свои нужды, ну или новый сделать, но знаний почти ноль.
    В общем, нужны ещё и секунды в именах файлов.  
    Вот тут есть наработки тут и тут  
    А так же нужны старые имена в конце новых, а там могут быть и пробелы и точки и тире и скобки всех мастей, в общем, почти всё что угодно может там быть. Если что, эти символы не необходимы в итоговых именах и можно скипать или заменить на что-то в итоговых именах. Т.е. что бы на выходе было что-то вроде YYYY_MM_DD__HH_MM_SS_oldname.extension
    Зарание спасибо если кто поможет.

    Всего записей: 13 | Зарегистр. 25-02-2010 | Отправлено: 18:16 17-11-2017
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Orlandovich
     
    Время файла можно получить аналогично размеру:

    Цитата:
    @echo off
    setlocal
    call :size %1
    echo Size for %1 is %retn% bytes.
    exit
    :size
    set retn=%~z1
    goto:EOF

    иначе получите сообщение об ошибке использования переменной пути. С временем будет так:

    Цитата:
    @echo off
    setlocal
    call :time %1
    echo Time for %1 is %retn%.
    exit
    :time
    set retn=%~t1
    goto:EOF

    или если нужен полный путь к файлу/каталогу, то так:
    @echo off
    setlocal
    call :time %1
    echo Time for %1 is %retn%.
    exit
    :time
    set retn=%~dpt1
    goto:EOF

    выведет время последней записи с точностью до минуты.
     
    CGGB
     
    Не понял сложности сей конструкции, особенно с переименованием. ren /y "*.*" "*%DATE% %TIME%.*" в каталоге и сама дров наломает. Зачем ещё и посуду бить?

    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 33194 | Зарегистр. 31-07-2002 | Отправлено: 20:16 17-11-2017
    CGGB

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Victor_VG
    Нужно не текущее время, а время изменения, а лучше, создания файлов. Как я понял тут как раз поможет wmic и с секундами и с временем создания, а не изменения.

    Всего записей: 13 | Зарегистр. 25-02-2010 | Отправлено: 10:40 18-11-2017
    YuS_2



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

    Цитата:
    Зарание спасибо если кто поможет.

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

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 12:43 18-11-2017
    CGGB

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    Есть: папка с файлами, внутри полный рандом и с именами и с расширениями.
    Задача: Привести имена файлов к виду, примерно YYYY_MM_DD__HH_MM_SS_oldname.extension путём натравливания папки на батник (ярлык его в лежит в SendTo). YYYY_MM_DD__HH_MM_SS дата последней модификации, а лучше создания, файла. Как-то так.

    Всего записей: 13 | Зарегистр. 25-02-2010 | Отправлено: 15:38 18-11-2017
    Inoz2000



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

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

    Всего записей: 4899 | Зарегистр. 23-04-2009 | Отправлено: 17:13 18-11-2017
    YuS_2



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

    Цитата:
    дата последней модификации, а лучше создания, файла. Как-то так.

    Рекомендую дату последнего изменения, т.к. при копировании файла она сохраняется, в отличие от даты создания.
    Как-то так:
    run.bat
    кодировка файла 866

    Код:
    @echo off
    echo Выполняем...
    powershell -executionpolicy bypass .\script.ps1
    echo Готово.
    pause

     
    script.ps1
    кодировка файла 1251

    Код:
    gi * -exclude script.ps1,run.bat|where{!$_.psiscontainer}|%{
        ren $_.fullname $((
            get-date($_.lastwritetime) -f 'yyyy_MM_dd__HH_mm_ss_'
        )+$_.basename+$_.extension)
    }

     
    либо одним batch-файлом:
    run.bat
    кодировка файла 866

    Код:
    @echo off
    echo Выполняем...
    powershell -executionpolicy bypass "&{gi * -exclude script.ps1,run.bat|where{!$_.psiscontainer}|%%{ren $_.fullname $((get-date($_.lastwritetime) -f 'yyyy_MM_dd__HH_mm_ss_')+$_.basename+$_.extension)}}"
    echo Готово.
    pause

     
    PS В любом варианте: файлы с кодом необходимо поместить в каталог, где необходимо переименовать файлы.
     
    Добавлено:

    Цитата:
    путём натравливания папки на батник

    Если очень хочется получить именно такое действие, то батник немного изменить надо:

    Код:
    @echo off
    if "%~1" equ "" (set "x=*") else (set "x=%~1\*")
    echo Выполняем...
    powershell -executionpolicy bypass "&{if(!(test-path '%x%')){echo 'Not exist path';exit};gi '%x%' -exclude script.ps1,run.bat|where{!$_.psiscontainer}|%%{ren $_.fullname $((get-date($_.lastwritetime) -f 'yyyy_MM_dd__HH_mm_ss_')+$_.basename+$_.extension)}}"
    echo Готово.
    pause

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 18:25 18-11-2017 | Исправлено: YuS_2, 09:11 19-11-2017
    Lepar79



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

    Цитата:
    YYYY_MM_DD__HH_MM_SS дата последней модификации, а лучше создания, файла. Как-то так.
    Решение то простое, и делается это обычным CMD файлом, ты только определись какое удобней.
    Можно воспользоваться расширением переменных FOR.

    Код:
    @ECHO OFF
    FOR %%F IN (*) DO ECHO %%~tF    %%F
    EXIT

     
    Можно через подпрограмму, это более гибкий вариант:

    Код:
    @ECHO OFF
    FOR %%F IN (*) DO CALL :RUNS "%%F"
    EXIT
     
    :RUNS
    ECHO %~t1    %~1
    EXIT /b

     
    Второй варинат более гибкий. Вот тебе кусочек как распарсить дату:

    Код:
    SET DST_TIME=%~t1
    SET DST_DAY=%DST_TIME:~0,2%
    SET DST_MON=%DST_TIME:~3,2%
    SET DST_GOD=19%DST_TIME:~6,2%
    IF %DST_GOD% LEQ 1980 SET /a DST_GOD+=100

    Но он будет зависеть от твоих региональных настроек. Где ты секунды возьмешь - хз.

    Всего записей: 80 | Зарегистр. 18-09-2017 | Отправлено: 23:00 18-11-2017
    CGGB

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

    Всего записей: 13 | Зарегистр. 25-02-2010 | Отправлено: 11:54 19-11-2017
    danetz

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

    Цитата:
    Всё дело в кодировках

     
    Спасибо за ps! В бат файле помогли разобраться. Дело было в том, что я как раз делал 866 кодировку (как всегда когда буквы русские). Но! Нужно было оставлять 1251 и тогда сработало. Странно? Я тоже так думаю, но факт остается

    Всего записей: 400 | Зарегистр. 25-02-2012 | Отправлено: 07:02 20-11-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