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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    УРА, всё получилось!
     
    А как убрать пробелы перед двоеточием :
    0163 :42301810813005338766 :500.00 :€ў -®ў €ў - €ў -®ўЁз:
    054 :42307810313001101365 :1000.00 :ЏҐва®ў ЏҐва ЏҐва®ўЁз:

    Всего записей: 3681 | Зарегистр. 16-10-2010 | Отправлено: 20:45 17-10-2010 | Исправлено: serg3001, 20:49 17-10-2010
    res2001



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

    Код:
    @echo off
    >nul chcp 1251
    SetLocal EnableDelayedExpansion
    set "tmpfile=abc.txt"
    del /f/q %tmpfile%
    for /f "tokens=1,* delims=|" %%a in (a.txt) do (
        for /f "tokens=1,2,* delims=|" %%c in ('find "%%a" b.txt ^| more +2') do set "bstr=%%c|%%e" & set "cf=%%c"
         for /f "tokens=1,2 delims=|" %%c in ('find "!cf!" c.txt ^| more +2') do set "cstr=%%d"
        >>%tmpfile% echo.%%a^|%%b^|!bstr!^|!cstr!
    )
    for /f "tokens=1-7 delims=|" %%a in (%tmpfile%) do >>%%b.txt echo.%%g:%%f:%%c:%%e:
    del /f/q %tmpfile%

    Почему то команда findstr не ищет в этой кодировке, а find - ищет.
     
    Добавлено:
    serg3001
    Пробелы перед двоеточием скорее всего тянутся из исходных файлов.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 20:50 17-10-2010
    serg3001



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
     
    странно вот в АВВ без пробелов 0164:42306810913005834330:1000.00:Сидоров Сидор Сидорович:
    а в АВБ  
    0163 :42301810813005338766 :500.00 :Иванов Иван Иванович:
    054 :42307810313001101365 :1000.00 :Петров Петр Петрович:
     
    ещё можно ли влепить двоеточие между всеми ФИО - Петров:Петр:Петрович ?

    Всего записей: 3681 | Зарегистр. 16-10-2010 | Отправлено: 20:58 17-10-2010 | Исправлено: serg3001, 21:03 17-10-2010
    res2001



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

    Цитата:
    странно вот в АВВ без пробелов

    Смотри в исходных файлах в конце строк, наверняка есть пробел.

    Цитата:
    ещё можно ли влепить двоеточие между всеми ФИО - Петров:Петр:Петрович ?


    Код:
    @echo off
    >nul chcp 1251
    SetLocal EnableDelayedExpansion
    set "tmpfile=abc.txt"
    del /f/q %tmpfile%
    for /f "tokens=1,* delims=|" %%a in (a.txt) do (
        for /f "tokens=1,2,* delims=|" %%c in ('type b.txt ^| find "%%a" ') do set "bstr=%%c|%%e" & set "cf=%%c"
         for /f "tokens=1,2 delims=|" %%c in ('type c.txt ^| find "!cf!" ') do set "cstr=%%d"
        >>%tmpfile% echo.%%a^|%%b^|!bstr!^|!cstr!
    )
    for /f "tokens=1-7 delims=|" %%a in (%tmpfile%) do (
        for /f "tokens=1-3" %%x in ("%%e") do >>%%b.txt echo.%%g:%%f:%%c:%%x:%%y:%%z
    )
    del /f/q %tmpfile%

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 21:05 17-10-2010
    serg3001



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всё отлично, большое спасибо, видно, что голова спеца сделала так быстро код, молодец.
     
    P.S. Кстати, Каспер показывает при запуске на последнем bat файле PDM.RootShell

    Всего записей: 3681 | Зарегистр. 16-10-2010 | Отправлено: 21:37 17-10-2010 | Исправлено: serg3001, 16:59 14-11-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    спасибо. У меня при попытке просмотреть результат выдает  

    Цитата:
    Режим вывода команд на экран (ECHO) отключен.

    Как это исправить?

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3291 | Зарегистр. 30-12-2007 | Отправлено: 23:35 17-10-2010 | Исправлено: lorents, 23:35 17-10-2010
    01MDM



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

    Цитата:
    Режим вывода команд на экран (ECHO) отключен.

    А как ты смотришь? Запускаешь в консоли? Попробуй с паузой:

    Код:
     
    @echo off
    setlocal
     
    for /f "tokens=2 delims=()" %%i in ('findstr "Block boundaries:" png.log') do call:set %%i
    echo %blocks%
     
    pause 1>nul
    goto:eof
     
    :set
    set "blocks=%1"  
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:42 17-10-2010
    lorents



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

    Код:
    @echo off
    setlocal  
    set Docs="%~dp0Docs\"
    PATH %Docs%;%PATH% >nul
     
    for /f "delims=" %%i in ('dir /b /s /a-d Dir0\*.png') do (
        pngout -v "%%~fi" > png.log
        for /f "tokens=2 delims=()" %%k in ('findstr "Block boundaries:" png.log') do call :set %%k
        echo %blocks%
        pause
        for /L %%j in (0,1,5) do pngout -f%%j -n%block% "%%~fi"
    )


    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3291 | Зарегистр. 30-12-2007 | Отправлено: 00:13 18-10-2010 | Исправлено: lorents, 00:14 18-10-2010
    wolf0425



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

    Цитата:
    в отдельности код работает как надо, но вот так, не хочет  

    конечно не хочет, и про то что внутри цикла все %переменные%, в твоем случае %blocks%,  заменяются на их значения до начала исполнения цикла - тебе пора бы уже запомнить.
     
    переноси  echo %blocks%  внутрь подпрограмы :set, или за скобку фора - смотря что хочешь смотреть...
       

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 01:06 18-10-2010 | Исправлено: wolf0425, 01:07 18-10-2010
    01MDM



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

    Код:
     
    @echo off
    setlocal  
    set Docs="%~dp0Docs\"
    set PATH=%Docs%;%PATH%
     
    for /f "delims=" %%i in ('dir /b /s /a-d Dir0\*.png') do (
        pngout -v "%%~fi" > png.log
        for /f "tokens=2 delims=()" %%k in ('findstr "Block boundaries:" png.log') do call:set "%%i" %%k
    )
    goto:eof
     
    :set
    set blocks=%2
    echo %blocks%
    for /L %%i in (0,1,5) do pngout -f%%i -n%block% "%%~f1"
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 08:34 18-10-2010
    res2001



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

    Цитата:
    P.S. Кстати, Каспер показывает при запуске на последнем bat файле PDM.RootShell. На кодировку видимо реагирует.

    даа, вот так и делаются вирусы
    Не на кодировку, видимо в коде какая-то часть совпала с PDM.RootShell.
    Может не стоит пользоваться этим батником, а то вдруг там действительно вирусняк получился

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425 точно, спасибо
     
    01MDM
    он не видит "%%~f1", выдает, что файл не найден
     
    я сейчас пробую использовать вместо %Переменная% использовать !Переменная!
     
    Добавлено:

    Код:
    @echo off
    SetLocal EnableDelayedExpansion
     
    for /f "delims=" %%i in ('dir /b /s /a-d Dir0\*.png') do (
        pngout -v "%%~fi" > png.log
        for /f "tokens=2 delims=()" %%k in ('findstr "Block boundaries:" png.log') do set f=%%k
        set blocks=!f!
        echo !blocks!
        for /L %%j in (0,1,5) do pngout -f%%j -n!block! -v "%%~fi"
    )

    Сделал так, но у меня почему-то выдает вместо допустим 21, выдает 21 blocks
    Почему так?

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3291 | Зарегистр. 30-12-2007 | Отправлено: 09:27 18-10-2010 | Исправлено: lorents, 09:31 18-10-2010
    wolf0425



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

    Цитата:
    вместо допустим 21, выдает 21 blocks Почему так?
    п почему тебе кажется, что должно отсекать blocks?
    у тебя delims=(), в 21 blocks  ни одной скобки нет - что просил то и выдает.
    если ты хотел чтоб ещё и по пробелу разграничивало - добавь пробел после ()
    только наверно токены пересчитать придется

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 10:16 18-10-2010
    lorents



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

    Код:
    @echo off
    SetLocal EnableDelayedExpansion
     
    for /f "delims=" %%i in ('dir /b /s /a-d Dir0\*.png') do (
        pngout -v "%%~fi" > png.log
        for /f "tokens=4 delims=( " %%k in ('findstr "Block boundaries:" png.log') do set f=%%k
        set blocks=!f!
        echo !blocks!
        del png.log
        for /L %%j in (0,1,5) do pngout -f%%j -n!blocks! -v "%%~fi"
    )


    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3291 | Зарегистр. 30-12-2007 | Отправлено: 10:24 18-10-2010 | Исправлено: lorents, 10:30 18-10-2010
    01MDM



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

    Цитата:
    он не видит "%%~f1", выдает, что файл не найден

    Мог бы и исправить на "%~f1"
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:34 18-10-2010
    M1chA



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста, как реализовать анализ архивируемых  файлов...
    Надо архивировать папки пользователей, но не архивировать например *.exe и *.jpg которые находятся в папках.
     
    Сейчас работает батник такого плана:
     

    Код:
     
    @chcp 1251>nul
    @echo Запрещен вход на терминал!
    @"c:\program files\WinRar\WinRAR.exe" a  -u -dh -r -rr5p -os -ow -ms -agDD-MMM-YY -ibck -t -ILOG"D:\Backup\Users.log" "D:\Backup\users.rar" @"D:\Backup\users.txt"
    @"c:\program files\WinRar\WinRAR.exe" a  -u -dh -r -rr5p -os -ow -ms -agDD-MMM-YY -ibck -t -ILOG"X:\Base\Users.log" "X:\Base\users.rar" @"D:\Backup\users.txt"
    @echo Резервная копия пользовательских папок создана!
    @change logon /enable
    @echo Вход на терминал разрешен!
    @net send 192.168.0.100 Резервная копия создана!
    @restart
     

     
    Как видно из кода, он архивирует все без разбора...

    Всего записей: 283 | Зарегистр. 11-10-2006 | Отправлено: 15:17 18-10-2010 | Исправлено: M1chA, 15:36 18-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    M1chA
    Дык у rara есть опция -x для исключения файлов по маске.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 15:45 18-10-2010
    M1chA



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
     
    Разобрался,спасибо.
    И еще вопрос. А как исключить определённые каталоги из архивирования?

    Всего записей: 283 | Зарегистр. 11-10-2006 | Отправлено: 15:57 18-10-2010 | Исправлено: M1chA, 16:07 18-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    M1chA
    можно даже создать файл где будут перечислены исключаемые файлы.

    Цитата:
    Покажи пожалуйста примером  

    дык rar /? посмотри.

    Цитата:
    А как исключить определённые каталоги из архивирования?

    так же как и файлы.
     
    Кстати, зачем используешь winrar.exe, из батника лучше rar.exe юзать, лежит в том же каталоге, он консольный, окошек лишних не открывает.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 16:07 18-10-2010
    M1chA



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    Проверил,не исключает каталоги...

    Всего записей: 283 | Зарегистр. 11-10-2006 | Отправлено: 16:24 18-10-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