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

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

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

vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Nagual



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

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

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

  • Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:28 19-03-2008 | Исправлено: Nagual, 01:02 24-09-2008
    boss911



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
     
    Я плохо понимаю в написаниях батников, но в данном случае нечего не происходит, консоль мигом закрывается, в любых случаях: когда в папке "PackFiles" лежит файл и, когда она пуста.
     
    Мне нужно: если файлы не обнаруживаются, выводиться сообщение, после чего нажимаем любую клавишу и скрипт прекращает свою работу, как в этом случае:

    Код:
    Echo Џ взҐ**лҐ д ©«л *Ґ * ©¤Ґ*л. “бв *®ўЄ  Ўг¤Ґв ЇаҐаў * .  
     Echo.  
     Pause  
     Exit  

    Если же файл присутствует, то нечего не выводится на экран, после чего выполняются последующие команды скрипта.

    ----------
    Мама не горюй

    Всего записей: 3586 | Зарегистр. 29-01-2005 | Отправлено: 20:34 17-06-2008
    01MDM



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

    Цитата:
     Если же файл присутствует, то нечего не выводится на экран, после чего выполняются последующие команды скрипта.
     

     
    Другой вариант

    Код:
     
    @echo off
    chcp 1251 1>nul
    dir /b /a PackFiles\ | findstr /v "?" 1>nul || (
        echo Файлы не найдены
        pause 1>nul
        goto:eof
    )
     
    :: Здесь выполняются команды, если папка не пуста
    echo Файлы в папке есть, скрипт выполняется дальше
    chcp 866 1>nul
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:59 17-06-2008 | Исправлено: 01MDM, 21:07 17-06-2008
    boss911



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

    Цитата:
    Другой вариант

    Жесть! То, что мне надо, спасибо.
     
    А вот это для меня совсем новое:

    Код:
    chcp 1251 1>nul
    ------
    chcp 866 1>nul

    Теперь не надо перегонять в DOS и в пакетном файле никаких карлючек в русских символах. Я правильно понял и это не помешает выполнению других команд?

    ----------
    Мама не горюй

    Всего записей: 3586 | Зарегистр. 29-01-2005 | Отправлено: 21:18 17-06-2008
    01MDM



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

    Цитата:
    не помешает выполнению других команд?

    Думаю, что нет. Если только не обрабатывать вывод команд в DOS-кодировке.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:25 17-06-2008
    boss911



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть два пакетных файла:
     
    Install.cmd (кусок кода)
    и
    Repl_Files.cmd
     
    Они были разделены для того, чтобы содержимое Repl_Files.cmd не маячило в консоли, когда будут выполняться те или иные команды.
     
    Помогите "склеить" эти два пакетных файла в один, чтобы при этом не потерять не одной из его функций, а также, по мере возможности, скрыть выводимые логи в консоли (содержимое Repl_Files.cmd).

    ----------
    Мама не горюй

    Всего записей: 3586 | Зарегистр. 29-01-2005 | Отправлено: 22:49 17-06-2008 | Исправлено: boss911, 23:13 17-06-2008
    01MDM



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

    Цитата:
    Помогите "склеить" эти два пакетных файла в один, чтобы при этом не потерять не одной из его функций, а также, по мере возможности, скрыть выводимые логи в консоли (содержимое Repl_Files.cmd).

     
    Попробуй, работоспособность не гарантирую, т.к даже не знаю что он делает и как.

    Код:
     
    @echo off
     
    For /F "Delims=" %%I In (FileList.lst) Do Call :ReplaceFiles "%%~I"
     
    GoTo :EOF
     
    :ReplaceFiles
    Set CF=%~nx1
    Set SOR=PackFiles\%CF%
    If Exist "%SOR%" (
        Echo %1
        Echo %1 >> CheckCopy.txt
        Call:Repl_F %1 "%SOR%"
    ) Else (
        Echo %SOR% >> NotCopy.txt
    )
    GoTo :EOF
     
    :Repl_F
    WfpAdmin.exe /DeprotectALL              1>nul
    Copy /y %2 "%~dp1"                         1>nul
    if ErrorLevel 1 (
         Zap.exe  "%1"                              1>nul
         Copy /y %2 "%~dp1"                    1>nul
         Echo "%1" 1>> Zap.txt
    )
    attrib +S +H %SYSTEMDRIVE%\*.tmp 1>nul
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:18 17-06-2008
    boss911



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    удалено
     
    Добавлено:
    01MDM
     
    Все же что-то не так. Тут идет копирование файлов, если файл занят, и оно его не может перезаписать, тогда срабатывает Zap.exe, после чего опять продолжается копирование. Так вот этот Zap.exe не срабатывает и мне выбивает, что данный файл занят.
     
    А можно сделать без вызова процедуры 'Repl_F', вписать ее в процедуру 'ReplaceFiles'?

    ----------
    Мама не горюй

    Всего записей: 3586 | Зарегистр. 29-01-2005 | Отправлено: 00:22 18-06-2008 | Исправлено: boss911, 00:24 18-06-2008
    boss911



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

    Код:
    :ReplaceFiles
    Set CF=%~nx1
    Set SOR=PackFiles\%CF%
    If Exist "%SOR%" (
     Echo %1
     Echo %1 >> CheckCopy.txt
     Call:Repl_F %1 "%SOR%"
     ) Else (
       %SOR% >> NotCopy.txt
       )
    GoTo :EOF
     
    :Repl_F
    WfpAdmin.exe /DeprotectALL >nul
    Copy /y %2 "%~dp1" 2>nul
    if ErrorLevel 1 (
    Zap.exe  "%1"  >nul
    Copy /y %2 "%~dp1" 2>nul
    Echo %1 >> Zap.txt
    )

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

    Код:
    Copy /y %2 "%~dp1"

    2>nul не совсем решает ситуацию.

    Цитата:
    "C:\WINDOWS\File1.dll"
    Скопировано файлов:         1.
    "C:\WINDOWS\File2.dll"
    Скопировано файлов:         0.


    ----------
    Мама не горюй

    Всего записей: 3586 | Зарегистр. 29-01-2005 | Отправлено: 07:46 18-06-2008 | Исправлено: boss911, 07:46 18-06-2008
    01MDM



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

    Цитата:
    только вот лог "NotCopy.txt" создается пустым,

     

    Код:
    ) Else (
       echo %SOR% >> NotCopy.txt
       )  

     

    Цитата:
    2>nul не совсем решает ситуацию.


    Код:
    Copy /y %2 "%~dp1" 1>nul 2>&1

     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 08:56 18-06-2008
    z1riser

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    igor_andreev, рассмешил старика...
     
    Повторяю задачу: "организовать 10 одновременных потоков"
     
    по поводу сети(если не понятно)...
    Cервер имеет подключение 1Гбит (и сетевуха гигабитная, и в ПОЛНОСТЬЮ гигабитный свитч фоткнуто.. даже транки есть более 1Гбита )
     
    батник должнен крутится на сервере, и одновременно с 10 компов копировать...
     
    лист компов должен браться из "net view"

    Всего записей: 22 | Зарегистр. 09-07-2007 | Отправлено: 11:48 18-06-2008
    GM07

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть подключение "inet" по VPN к прову, которое нужно периодически переподключать с таймаутом в 5 секунд например c целью получения нового внешнего IP. Имеет ли право на жизнь следующая конструкция:
     
    @echo off
    rasdial inet /d
    PING -n 5 127.0.0.1 >nul
    rasdial inet login pass
     
    Дело в том, что творится что-то непонятное: при первом запуске батника все вроде бы сработало, а вот при последующих попытках выходит окно командной строки и висит, при этом ничего не происходит.  
    убрал @echo off - вижу что крутится первая строка но разъединения не происходит. пробовал оставлять в батнике только по одной строке отключения/подключения - тоже ничего. в чем трабл?
     
    зы: в написании командных файлов я полный ноль, потому и возникают такие наверное очень глупые вопросы...

    Всего записей: 74 | Зарегистр. 26-07-2004 | Отправлено: 14:55 18-06-2008
    igor_andreev

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

    Цитата:
    Повторяю задачу: "организовать 10 одновременных потоков"  

    Короче хочешь, чтоб одновременно работало только 10 экземпляров robocopy.exe
    Приблизительно так батник должен выглядеть, без проверки(у мну в net view меньше десяти компов)

    Код:

    @echo off
     
    rem устанавливаешь счетчик процессов robocopy в ноль
    set /a "count=0"
     
    for /f "tokens=1 delims=\" %%a in ('net view ^| find "\\"') do (
     rem start без /wait
     start /min /high robocopy.exe "\\%%i\C$" X:\backup\uim\%%i\C ...
     rem чтоб заморочек не было с восклицательными знаками - enabledelayedexpansion
     rem не используй, вызывай метку и там увеличивай %count%
     call :robo_count
     start /min /high robocopy.exe "\\%%i\D$" X:\backup\uim\%%i\D ...
     call :robo_count
    )
    goto :eof
     
    :robo_count
    set /a "count+=1"
    rem если счетчик процессов robocopy не равен десяти - возврат в цикл FOR
    if not "%count%/"=="10/" goto :eof
    rem если запустили уже 10 робокопей - ждем, пока они закончат работу
    :robo_wait
    rem задержку поставь какую удобней вместо 10
    sleep 10
    rem вместо tlist впиши, что у тебя на сервере список процессов
    rem выводит, pv.exe там или tasklist.exe или еще что
    tlist | find /i "robocopy" && goto :robo_wait
    rem если все 10 процессов завершились - счетчик сбрасываем на ноль
    set /a "count=0"
    goto :eof

    Если robocopy версии 026 - в ней есть параметр /IPG, яб его еще задействовал, опытным путем определи нужное значение.
     
     
    Добавлено:
    GM07
    Попробуй батник переименуй

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 15:45 18-06-2008 | Исправлено: igor_andreev, 16:16 18-06-2008
    boss911



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

    Цитата:
    echo %SOR% >> NotCopy.txt

    Вот я плуг, сам же стер echo, видимо, это моя невнимательность.
     

    Цитата:
    Copy /y %2 "%~dp1" 1>nul 2>&1

    Респект, ты меня за последние сутки очень выручил, еще раз большое тебе спасибо!

    ----------
    Мама не горюй

    Всего записей: 3586 | Зарегистр. 29-01-2005 | Отправлено: 16:43 18-06-2008
    AndryG

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди добрые!!! Помогите ... никак не получается ...
    Общая идея: нужно переименовать DBF файл в зависимости от значения одно из полей первой записи
     
    Научился вытаскивать в STDOUT (на экран) нужное поле. А вот как теперь взять часть этой строки, да запихнуть в rename - никак

    Код:
     
    rem выводит на экран строку 20080618
    cdbflite.exe __vab.dbf /browse /range:1 /select:data_op
    rename __vab.dbf ... вот сюда надо поставить "VAB_0618"
     

    Как скрестить эти дела?
    Единственное, что в голову пришло:

    Код:
     
    set a= | cdbflite.exe __vab.dbf /browse /range:1 /select:data_op
    Но set  и каналы не дружат
     

     

    Всего записей: 26 | Зарегистр. 07-09-2007 | Отправлено: 17:38 18-06-2008
    boss911



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
     
    Подробнее...
     
    Изначально в Repl_F.cmd шло копирования файлов из "Temp" в "%SystemRoot%\cache\", потом только начинали выполняться следующие команды. А сейчас копирование происходит после завершения всех команд, и файлы копируются не в "%SystemRoot%\cache\", а в папку, откуда был запущен пакетный файл, также, в конце всех выполненных команд, пишется:

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

    Что же не так?

    ----------
    Мама не горюй

    Всего записей: 3586 | Зарегистр. 29-01-2005 | Отправлено: 19:42 18-06-2008 | Исправлено: boss911, 19:42 18-06-2008
    01MDM



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

    Цитата:
    Но set  и каналы не дружат

     
    for /? (for /f)
     

    Код:
     
    @echo off  
    for /f %%i in ('cdbflite.exe __vab.dbf /browse /range:1 /select:data_op') do (
          set a=%%i && call:ren
    )
    goto:eof
     
    :ren
    set a=%a:~4%
    ren "__vab.dbf" "VAB_%a%"
     

     
     
    Добавлено:
    boss911
     
    Напиши в личку полный батник и краткое описание, что он должен делать. Не въеду :(

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:49 18-06-2008
    AndryG

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ШАМАН!  
    Я час просидел над FOR /F ... и теперь не могу вспомнить, что я не так писал.
    Благодарю.

    Всего записей: 26 | Зарегистр. 07-09-2007 | Отправлено: 20:17 18-06-2008
    vektoral

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Простите и извините за возможно пустое беспокойство... Но вопрос чайниковский.. Как с помощью бат файла или скрипта сделать следующее:
    1. ежедневно при загрузке компа запускать бат файл на выполнение с задержкой минуты в 3
    (тоесть он не должен нагружать комп сразу при загрузке ОС) Установлена ХР.
    Этот файл должен делать следующее:  
    1. копировать заданную папку в другую папку с текущей датой.. (типа  xcopy c:\1\*.*  d:\arhiv\%DATA\*.*)
    2. удалять эти же копии в d:\arhiv\ созданные на 2 дня ранее.
     
    Тоесть у меня должны быть архивы каталога за последние 2 дня..  
     
    Это возможно ??????? если да то вышлите этот файл на адрес evtrifimov@yandex.ru
    Заранее очень благодарен за помощь.

    Всего записей: 1 | Зарегистр. 17-06-2008 | Отправлено: 21:52 18-06-2008
    GM07

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    это шутка была?
    мое файло откликается на recon.bat

    Всего записей: 74 | Зарегистр. 26-07-2004 | Отправлено: 22:03 18-06-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GM07
     
    Попробуй
    rasdial inet /DISCONNECT

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:23 18-06-2008
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 5
    vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru