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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    DamNet

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

    Всего записей: 46 | Зарегистр. 12-08-2003 | Отправлено: 07:54 07-07-2009
    k8m

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Помогите написать бат файл, который бы решыл задачку.
    Есть текстовый файл, следующего формата:
    "
    53615|25-06-2009 19:08:38|4|00|69.6|5633000011000910
    207185|25-06-2009 19:08:39|4|00|60.75|5633000011000390
    276284|25-06-2009 19:08:40|4|00|65.56|5633000011001240
    380363234571|25-06-2009 19:08:41|4|32|24.63|5600100081066750
    380365034572|25-06-2009 19:08:54|4|32|94.19|5600100081066760
    380363534585|25-06-2009 19:08:55|4|32|75.33|5600100081066890"
     
    нужно разбить этот файл на несколько:
    1)данные в первом поле 5,6 знаков - попадают в первый файл
    2)Остальная информация должна попасть в 15 других файлов Остаются записи, где первое с 12 знаками.Ключевыми являются 2 символа, которые идут после "38036"(тоисть 38036(35)34585)Вот это число в скобочках может иметь 15 значений.В зависимости от кого, катое значение принимает это число строчка попадает в тот или иной файл.
     
    Вроде понятно написал.
    Заранее благодарен за ответ.)

    Всего записей: 3 | Зарегистр. 07-07-2009 | Отправлено: 16:40 07-07-2009
    king_stiven

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

    Код:
    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
    for /f "usebackq tokens=1* delims=|" %%c in ("1.txt") do (
        set hjk=%%c
        if "!hjk:~11,1!"=="" (
            echo %%c^|%%d>> 2.txt
        ) else (
            if "!hjk:~5,2!"=="32" echo %%c^|%%d>> 3.txt
            if "!hjk:~5,2!"=="36" echo %%c^|%%d>> 4.txt
                                  ...
                                  ...
            if "!hjk:~5,2!"=="50" echo %%c^|%%d>> 17.txt
        )
    )
    Вместо многоточия допиши.
     
    или так

    Код:
    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
    for /f "usebackq tokens=1* delims=|" %%c in ("1.txt") do (
        set hjk=%%c
        if "!hjk:~5,2!" LEQ "9" echo %%c^|%%d>> 2.txt
        if "!hjk:~5,2!"=="32" echo %%c^|%%d>> 3.txt
        if "!hjk:~5,2!"=="36" echo %%c^|%%d>> 4.txt
                              ...
                              ...
        if "!hjk:~5,2!"=="50" echo %%c^|%%d>> 17.txt
    )

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 22:54 07-07-2009 | Исправлено: king_stiven, 23:02 07-07-2009
    Unitaz



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    господа а можно из батника сочетания нажатие клавиш эмулировать - Ctr+Alt+->  и т. д.

    Всего записей: 2289 | Зарегистр. 28-06-2002 | Отправлено: 00:45 08-07-2009
    Maza_Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Unitaz
    Ищите в шапке утилиту nircmd

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:41 08-07-2009
    Unitaz



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

    Цитата:
    Unitaz  
    Ищите в шапке утилиту nircmd

    крутая утилита может всё однако help не имеет даже тривиального поиска ....нашёл косвенную команду  

    Цитата:
    Answer 'Yes' to a standard Windows message-box.     nircmd.exe dlg "" "" click yes

    но это не совсем то что нужно  
    P.S. Если кто проделывал этот фокус - одновременно нажать из батника три произвольные кнопки , напишите убогому пожалуйста

    Всего записей: 2289 | Зарегистр. 28-06-2002 | Отправлено: 11:01 08-07-2009 | Исправлено: Unitaz, 11:04 08-07-2009
    k8m

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven, спасибо большое), все работает)
    Можно тогда продолжить этот батничёк еще чуть:
    Допустим вот таких файлов как 1.txt будет несколько:1а, 1б, 1в.
    1)МОжете можете дописать в батник что бы файлы 2,3.. 17,18 писались каждый в свою папку?  
    2)Файл 1 бывает за разное число, тоисть 1_20090622.txt, 1_20090623.txt, 1_20090624.txt и т.д..Можно  ли написать бат файл который бы сам распознавал дату и соответственно в файл 2,3.. 18 приклеивал эту дату.
     
    еще раз спасибо)

    Всего записей: 3 | Зарегистр. 07-07-2009 | Отправлено: 12:34 08-07-2009
    alexander6161



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Unitaz
    Цитата:
    Если кто проделывал этот фокус - одновременно нажать из батника три произвольные кнопки , напишите убогому пожалуйста

    Смотри команду sendkey. В справке подробно всё описано.

    Всего записей: 185 | Зарегистр. 17-08-2008 | Отправлено: 12:44 08-07-2009
    Snegov1k



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день,  
     
    Есть батник выкладывающий wput'ом архив на ftp. очень хочется видить процесс выполнения. wput без проблем пишет в файл, а на экран от чего то не хочет (или я не догоняю как это сделать).  
     
    Вобщем вопрос - есть ли возможность выводить процент выполнения задания в bat?  

    Всего записей: 48 | Зарегистр. 12-10-2006 | Отправлено: 13:07 08-07-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Unitaz
    nircmdc.exe sendkey ctrl down
    nircmdc.exe sendkey Alt down
    nircmdc.exe sendkey ctrl  up
    nircmdc.exe sendkey Alt up
    как кнопку
    Цитата:
    ->
    эмулировать не помню
    k8m
     

    Цитата:
    Допустим вот таких файлов как 1.txt будет несколько

    for /?

    Цитата:
    Можно  ли написать бат файл который бы сам распознавал дату и соответственно в файл 2,3.. 18 приклеивал эту дату.  
     

    set /?

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 13:45 08-07-2009
    k8m

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

    Цитата:
    for /?  


    Цитата:
    set /?  

     
    эту команду куда вставить?
    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
    for /f "usebackq tokens=1* delims=|" %%c in ("1.txt") do (
        set hjk=%%c
        if "!hjk:~11,1!"=="" (
            echo %%c^|%%d>> 2.txt
        ) else (
            if "!hjk:~5,2!"=="32" echo %%c^|%%d>> 3.txt
            if "!hjk:~5,2!"=="36" echo %%c^|%%d>> 4.txt
                                  ...
                                  ...
            if "!hjk:~5,2!"=="50" echo %%c^|%%d>> 17.txt
        )
    )  
     
    Кстати только что проверил второй вариант- там 2торой файл точно такой же как и первый.
    Видно что-то здесь
      if "!hjk:~5,2!" LEQ "9" echo %%c^|%%d>> 2.txt  
    не работает(

    Всего записей: 3 | Зарегистр. 07-07-2009 | Отправлено: 14:01 08-07-2009
    DeadAnarchist

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть батник следующего содержания

    Код:
    c:\rar a -m5 -as -ep1 -ilogc:\rar.txt Feedreader "%userprofile%\AppData\Roaming\Feedreader"
    cls
    type c:\rar.txt
    pause
    del c:\rar.txt

    который находит директорию Feedreader и делает ее архив
     
    Как сделать что бы, если не находит данную директорию, то не происходило выполнение файла???
    А то получается если что если по указанному пути %userprofile%\AppData\Roaming\Feedreader нету директории Feedreader, то архив затирается, и как результат, я теряю резервную копию.....

    Всего записей: 53 | Зарегистр. 13-09-2008 | Отправлено: 15:21 08-07-2009
    01MDM



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

    Код:
     
    @echo off
     
    if not exist "%userprofile%\AppData\Roaming\Feedreader" goto:eof
     
    c:\rar a -m5 -as -ep1 -ilogc:\rar.txt Feedreader "%userprofile%\AppData\Roaming\Feedreader"
    cls
    type c:\rar.txt
    pause
    del c:\rar.txt  
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:30 08-07-2009
    slay1212

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как вывести сообщение на экран из логон логоф скрипта - cmd файла (w2k3)? По умолчанию весь вывод из них подавляется в ГП, и разрешать не хочется из-за одного сообщения.  
     

    Всего записей: 336 | Зарегистр. 28-05-2008 | Отправлено: 16:21 08-07-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    slay1212
    msg.exe поможет?
     
    msg /?
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:34 08-07-2009
    slay1212

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
     Спасибо, все ок. Жаль что раньше не знал об этой встроенной утилите
     Еще. Можно из бат файла создать записи для логон логоф скрипта?

    Всего записей: 336 | Зарегистр. 28-05-2008 | Отправлено: 17:29 08-07-2009
    2life

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

    Цитата:
    Распиши, что и как должно делаться:  
    - как именуется (как идентифицировать) то, что следует скопировать;  
    - правило переименования "есть->должно быть" (что удаляется/добавляется в имени.расширении).  
     
    Уточни касаемо "сегодняшней даты, и времени", - должен ли скрипт работать при любых локальных настройках даты/времени?? Если "нет", - приведи выдачу (формат) команд  
    Код: echo %date%  
    echo %time%  

    Извиняюсь, что задержался:
    - Именуется, начало от папки которую архивируем, далее дата и время, далее номер архива, по которому, Я думаю должно приниматся решение об удалении. Про привести формат выдачи команд, Я не понял...  
     
    Полазил по форуму, дополнил свое видение так, правильно двигаюсь хотя бы?
     

    Цитата:
     
    @echo off  
    REM 1c upload started  
    "C:\Program Files\1Cv77\BIN\1cv7s.exe" config /D"F:\Base1C\PRBasic\" /NBackup /PziK77b /@f:\backup\zik-current\zik.prm  
    cls
    REM upload transfer to backup srv started  
    net use Z: \\192.168.1.200\bk\ZiKCurr /user:user1 passw0rd  
    "C:\Program Files\WinRAR\rar.exe" a -y -r -dh -df -agYYYYMMDD_HH_MI_SS "Z:\bk\ZiKCurr\zik"  "D:\BACKUP\zik"
    cls
    Echo Y | net use Z: /delete
     

     

    Всего записей: 86 | Зарегистр. 04-08-2006 | Отправлено: 00:37 09-07-2009
    NvvLazyTiger



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2life
    Цитата:
    Про привести формат выдачи команд, Я не понял...
    Т.к. предполагается использовать в батнике дату/время (в частности - текущие), то есть нюанс... ;)
    Если батник будет работать на компе с известными локальными настройками, то получить дату/время просто (выделить нужные элементы выдачи указанных мной команд).
    Если же локальные настройки заранее не известны или ожидаются разные для разных мест запуска, то нужны отдельные пляски с бубном для получения даты в нужном формате [см. напрример "Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)"]. Тоже самое (хоти и не совсем также) и для времени. Например, у меня на WS
    Код:
    O:\>echo %date%
    Чт 2009.07.09
    O:\>echo %time%
    13:28:47.61
    А на моём сервере
    Код:
    Y:\>echo %date%
    09.07.2009
    Y:\>echo %time%
    13:29:50,95
    Отсель и вопрос касаемо... ;)
     
    BTW У меня в батниках используются форматы: "yyyy.MM.dd HH:mm:SS" ("2009.07.09 16:34:51") - для логов и проч. (т.е. "для людей") и "yyMMddHHmmSS" ("90709163451") - для имён файлов и т.п. (т.е. "для роботов").  
     
    Касаемо формирования "1c upload" - ничего не скажу, не владею предметом.
     
    Касаемо "net use Z: [...]" - полезно проверять успешность этой критической команды. Например по коду возврата (%ErrorLevel%), или по видимости нужного каталога на удалённом ресурсе (if exist Z:\bk\ZiKCurr\ [...]).
     
    Касаемо приведённой строки с "rar.exe"
    • использование ключа "-ag" избавляет от нужды морочиться с локальными настройками, но
    • и для этой команды полезно проверять её успешность ;)

    Остаётся
    Цитата:
    этом количество копий как то ограничивалось, например 60 полных копий
    Здесь, если наложить ограничение на содержимое каталога с архивами - "только наши архивы", то можно сделать просто:
    Код:
    set nCount=0
    for %%a in (Z:\bk\ZiKCurr\zik*.Rar) do call :ChkDel %%a
    goto :EndChkDel
     
    :ChkDel Kill 61-th file
    set /a nCount+=1
    if %nCount% LEQ 60 goto :eof
    erase %1
    goto :eof
     
    :EndChkDel
    Т.е. удаляются 61-й и последующие файлы по маске "Z:\bk\ZiKCurr\zik*.Rar".
     
    NB. П/п :ChkDel позволяет просто организовать логирование действий.

    Всего записей: 257 | Зарегистр. 14-02-2009 | Отправлено: 07:36 09-07-2009
    HaK1R



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

    Цитата:
    1)МОжете можете дописать в батник что бы файлы 2,3.. 17,18 писались каждый в свою папку?  
    2)Файл 1 бывает за разное число, тоисть 1_20090622.txt, 1_20090623.txt, 1_20090624.txt и т.д..Можно  ли написать бат файл который бы сам распознавал дату и соответственно в файл 2,3.. 18 приклеивал эту дату.  

     

    Код:
    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
    for /f "tokens=1,2 delims=_" %%a in ('dir /b "a*_????????.txt"') do (
      for /f "usebackq tokens=1* delims=|" %%c in ("%%a_%%b.txt") do (
        set hjk=%%c
        if "!hjk:~5,2!" LEQ "9" echo %%c^|%%d>>"C:\folder1\2_%%b.txt"
        if "!hjk:~5,2!"=="32" echo %%c^|%%d>>"D:\priod\das\3_%%b.txt"
        if "!hjk:~5,2!"=="36" echo %%c^|%%d>>"G:\1\2dasd\4_%%b.txt"
                              ...
                              ...
        if "!hjk:~5,2!"=="50" echo %%c^|%%d>>"C:\17_%%b.txt"
      )
    )  


    Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 10:30 09-07-2009
    Pr1nt

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, пожалуйста, с простым вроде вопросом:
    Как можно использовать переменную внутри другой переменной?
    Такой способ не работает:
     
    set a="hello"
    set b=1
    set c=!a:~%b%,2!
    echo %c%
     
    т.е. я хочу чтобы переменной "c" присваивалась часть строки "а" (в нормальном виде set c=%a:~1,2%)

    Всего записей: 11 | Зарегистр. 19-04-2007 | Отправлено: 13:20 09-07-2009
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru