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

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

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

    Цитата:
    с созданием лога без дополнительной строки, в папке от куда запускался батник, только без команды FOR... Реально ли так сделать?
    Да, с некоторыми оговорками.

    Код:
    copy "c:\source folder\*.*" "d:\target folder"|find /V /I "скопировано файлов">>%~dp0copylog.txt
    Оговорки:
    1. Локалезависимо. К примеру, "скопировано файлов" на английской ОС должно звучать как "files copied". Соответственно, уточняйте конкретно у себя, что выдаёт copy.
    1a. Кодировка файла обязана соответствовать DOS-кодировке локали (для русской локали - CP-866).
    2. Файл с названием "Очень много скопировано файлов.txt" будет скопирован, но в список не попадёт, поскольку его имя отвечает критерию фильтрации.


    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 17:47 10-12-2009
    MuxauJl

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день.
    Есть задачка. Имеется исходный текстовый файл 1.txt и новый файл 2.txt, примерно следующего содержания:
    1.txt
    один
    два
    три
    четыре
    пять
     
    2.txt
    три
    четыре
    пять
    шесть
    семь
    восемь
     
    Нужно вывести в файл 3.txt следующий результат:
    шесть
    семь
    восемь

    Всего записей: 3 | Зарегистр. 10-12-2009 | Отправлено: 18:15 10-12-2009
    BorlandIMHO

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

    Код:
    for /f %%A in (2.txt) do (
    find /i "%%A" 1.txt  
    if ERRORLEVEL 1 echo %%A >>3.txt
    )


    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 18:50 10-12-2009
    MuxauJl

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо, для слов из моего примера работает. Но дело в том, что записи в файлах содержат несколько слов в строке, так же в строке могут содержаться как пробелы так и табуляция. Возможно ли переносить строки целиком?

    Всего записей: 3 | Зарегистр. 10-12-2009 | Отправлено: 19:14 10-12-2009 | Исправлено: MuxauJl, 19:15 10-12-2009
    BorlandIMHO

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

    Цитата:
    Возможно ли переносить строки целиком?

    Не вопрос... Просто нужно было сразу задачу правильно формулировать. Типа "вывести в файл 3.txt строки из файла 2.txt, для которых отсутствуют совпадения в файле 1.txt"...

    Код:
    for /f "delims=" %%A in (2.txt) do (  
    find /i "%%A" 1.txt  
    if ERRORLEVEL 1 echo %%A >>3.txt  
    )  


    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 19:26 10-12-2009 | Исправлено: BorlandIMHO, 19:28 10-12-2009
    01MDM



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

    Код:
     
    1>3.txt findstr /v /g:1.txt 2.txt
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:39 10-12-2009
    Ninja33



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

    Цитата:
    Ninja33 а чем тебе команда FOR помешала?

    У меня есть батник с таким содержанием:

    Код:
    @echo off
    SET WorkDir=%~dp0
    set dmdll=%windir%\system32
     
    if not exist "%dmdll%\XceedCry.dll" (
      COPY "%WorkDir%\XceedCry.dll" "%dmdll%"
      regsvr32 /s "%dmdll%\XceedCry.dll"
    )
    if not exist "%dmdll%\XCEEDZIP.DLL" (
      COPY "%WorkDir%\XCEEDZIP.DLL" "%dmdll%"
      regsvr32 /s "%dmdll%\XCEEDZIP.DLL"
    )
    if not exist "%dmdll%\xcdsfx32.bin" COPY "%WorkDir%\xcdsfx32.bin" "%dmdll%"
    if not exist "%dmdll%\asycfilt.dll" COPY "%WorkDir%\asycfilt.dll" "%dmdll%"
    if not exist "%dmdll%\stdole2.tlb" COPY "%WorkDir%\stdole2.tlb" "%dmdll%"
    Regedit /S %WorkDir%\reg.reg
    start "" /WAIT DriverMagician.exe

     
    Во первых я этот с трудом написал, а как задействовать в этом коде команду For, даже примерно не знаю ... Но, зато знаю как удалить по списку скопированные файлы, поэтому и спрашиваю, а то ни как не могу дописать этот батник...
     
    BorlandIMHO, спасибо, буду думать...

    Всего записей: 32 | Зарегистр. 28-09-2008 | Отправлено: 22:47 10-12-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SANIOK_AV
    subj по вопросу с 77-ой страницы
    ты спрашивал
    Цитата:
    1) придумаю как автоматизацию нажатия этих кнопок))  

    я тут наткнулся (помимо рекомендованного мною решения на autoIt) на команду из vbs/wsh - WshShell.SendKeys   http://forum.ru-board.com/topic.cgi?forum=33&topic=1491&start=1340#14

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 11:08 11-12-2009
    Eggorka

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Что-то никто не откликнулся... Неужели задача не имеет решения или я коряво сформулировал вопрос? Попробую немного переформулировать.
     
    Надо из папки D:\IN\ скопировать в папку D:\OUT\ все файлы, причём если в папке D:\OUT\ уже присутствуют файлы с совпадающими именами -- переименовать новые, добавив к имени, скажем, единицу. Пример. Папка IN содержит файлы a.txt и b.txt, папка OUT -- файлы a.txt и c.txt. В результате в каталог D:\OUT\ должны добавиться файлы a1.txt и b.txt.
     

    Всего записей: 11 | Зарегистр. 20-11-2008 | Отправлено: 12:09 11-12-2009
    othy

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите... очень нужно.
    Win 2003 R2 standart SP2 Ru
    Почему может подвисать chcp 1251 или 866
    При прерывании команды по Ctrl+C видно что переключение отрабатывает.
    В инете пока не нашёл ответ...

    Всего записей: 62 | Зарегистр. 28-11-2005 | Отправлено: 14:51 11-12-2009
    01MDM



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

    Код:
     
    @echo off
    setlocal
     
    for /f "tokens=*" %%i in ('dir /b /a "d:\in"') do call:copy "%%i"
    goto:eof
     
    :copy
    set "file=%~n1"
    :check
    if exist "d:\out\%file%%~x1" set "file=%file%1" && goto:check
     
    copy "d:\in\%~n1%~x1" "d:\out\%file%%~x1"
     


    Цитата:
    Что-то никто не откликнулся...

    Подобные вопросы задают с периодичностью раз в месяц. Отвечать по нескольку раз на один и тот же вопрос видимо не представляет интереса. А еще есть поиск..

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:54 11-12-2009
    seregaknorrr1



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

    Цитата:
    Подскажите, как сделать паузу между откл. и  подключением, например в 5сек  
    @echo off  
    rasdial.exe "internet" /disconnect  
    nircmdc.exe wait 15000  
    :Connect  
    rasdial.exe "internet" "Логин" "пароль"  
    rasdial.exe | find.exe /i "internet"  
    if %errorlevel%==1 (nircmdc.exe wait 5000 & goto Connect)

     
    Можешь воспользоваться командой sleep 5 из пакета Windows Server 2003 Resource Kit Tools

    Всего записей: 102 | Зарегистр. 19-01-2005 | Отправлено: 02:00 12-12-2009
    btester

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.
    BAT-ник должен выполнять следующие действия: Сравнивать два текстовых файла с именами report.txt и tmp.txt; если файлы различаются нужно добавить содержимое tmp.txt в файл archive.txt и делать tmp.txt таким же как report.txt; если файлы срвпадают, то ничего не делать...
     
    Вся проблема со сравнением содержимого файлов. Перепробовал кучу вариантов - ничего не получается.
    Буду признателен за помощь

    Всего записей: 1 | Зарегистр. 12-12-2009 | Отправлено: 19:47 12-12-2009 | Исправлено: btester, 19:49 12-12-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    btester
    Код:
    fc report.txt tmp.txt || copy archive.txt+tmp.txt  & copy report.txt tmp.txt


    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 20:57 12-12-2009
    Eggorka

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Огромное спасибо! Работает.  
    Кстати, если вопрос возникает так часто, то может, в FAQ его? Поиском, конечно, пользовался (и не только на Ru.Board'е), потратил не один день, но то ли грамотно сформулировать вопрос не получилось, то ли ещё что... В общем, ещё раз спасибо.

    Всего записей: 11 | Зарегистр. 20-11-2008 | Отправлено: 09:54 13-12-2009
    milair

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    гуру! наведите на мысль как это реализовать: есть у програмки ini-файлик, который изменяется в течении суток, произвольное кол-во раз. вопрос- можно ли написать батничек, который бы допустим через шедулер запускался бы к примеру раз в 10 минут,смотрел за датой изменения ini-файла, и если c момента последнего запуска, этот файл изменился, то выполнять команду перезапуска проги?

    Всего записей: 14 | Зарегистр. 28-11-2005 | Отправлено: 12:34 13-12-2009
    amnon10



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Привет уважаемые гуру
    Помогите..
     
    if exist %SORC%\temp\%DIR%\*.* (echo Est' fayli) else (Echo Netu Filov)
     
    Как я не извращался в результате всегда Est' fayli хотя их там нет.

    Всего записей: 85 | Зарегистр. 23-04-2003 | Отправлено: 13:40 13-12-2009
    NeKit1000

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

    Код:
    for %i in (*.sfd) do mplayer %i -dumpaudio -dumpfile %i.adx

    Как можно заставить сохранять файл не с расширением .sfd.adx, а просто .adx, то есть вычесть из %i расширение .sfd?

    Всего записей: 9 | Зарегистр. 21-03-2008 | Отправлено: 01:41 14-12-2009
    BorlandIMHO

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

    Цитата:
     вычесть из %i расширение .sfd?

    Вместо %i.adx использовать %~ni.adx

    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 01:52 14-12-2009
    NeKit1000

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BorlandIMHO, спасибо, получилось. Можно только попросить объяснить что это значит и как работает?

    Всего записей: 9 | Зарегистр. 21-03-2008 | Отправлено: 01:58 14-12-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