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

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



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

    Цитата:
    нужно чтобы при запуске батника выводился запрос на ввод имени файла и передавался как параметр программе, запускаемой из батника


    Код:
     
    @echo off
    set /p "name=Please enter file name: "
    rem ====================
    program.exe %name%
    rem или
    start "" program.exe %name%
    rem ====================
     
     

    program.exe заменяешь на свою программу. Если она консольная, тогда используешь строчку запуска без start-a, если нет - оставляешь только строчку со start-ом.

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:41 15-08-2008 | Исправлено: Elroir, 13:42 15-08-2008
    contrafack

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

    Цитата:
    Подскажите пожалуйся, мне надо автоматизировать процесс архивирования:
    Встренный планировшик не подходит, т.к. по разному должен выполнятся архивация.  
    значит задача такая:
    Есть папка 777, которая находится в C:\Base
    при запуске BAT-ника должен архивироватся 777 папка и хранится в папке D:\rezerv. Имя файла желательно совпал с датой архивацией

     
    Может все таки подскажете ?

    Всего записей: 3085 | Зарегистр. 21-04-2008 | Отправлено: 15:06 15-08-2008
    VitRom

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    contrafack
    http://segfault.kiev.ua/smart-questions-ru.html#before

    Всего записей: 2967 | Зарегистр. 18-06-2006 | Отправлено: 17:06 15-08-2008
    MsdLamer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте мастера. Есть вопрос по работе с FTP.
    написал батничек который выкладывает файлы на FTP каждый вечер, но появилась не большая сложность. Как проверить доступен ли ФТП, мало ли что .... ...(ping отключен) Так вот если доступен тогда скопировать на него файлы, а если не доступен тогда выдать сообщение что Все плохо. Спасибо.
     
    Текст батника1:
    ftp.exe -n -s:cl_toftp.ftp
    ____________________
    Текст батника2:
    open FTP.ru
    user  
    pasword
    prompt
    binary
    hash
    cd Otchet\
    mput C:\1\*.txt
    quit
     

    Всего записей: 53 | Зарегистр. 26-07-2007 | Отправлено: 11:49 16-08-2008 | Исправлено: MsdLamer, 12:02 16-08-2008
    Shift7

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Искренне Извеняюсь......скорее всего вопрос тупой...но мало ли....возможно ли чтоб при закритии батника выполнялась команда, например запуск файла? или бред полный?
     
     
    Добавлено:
    Вопрос 2 можно ли через батник сделать "не убиваемый процесс" - я понимаю что не убиваемых не бывает, но хоть чтото можно. Если да напишите примерчик Плизз. Я только столкнулся с этим делом, поэтому просьба не ругатся сильно.
    Заранее благодарен...

    Всего записей: 8 | Зарегистр. 06-08-2008 | Отправлено: 13:11 16-08-2008
    vvnet

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как реализовать такое:  
    Есть два файла одинакового размера (512байт), необходимо 4 байта из одного файла заменить 4 байтами из другого файла, смещение одинаковое. Это нужно реализовать в DOS.  
    Спасибо.

    Всего записей: 125 | Зарегистр. 27-06-2006 | Отправлено: 17:19 16-08-2008
    problematique

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток!
    Прошу Вашей помощи.
    Эти четыре задания нужно проделать в FARе. Не могли ли бы вы мне помочь?
     
    Используя программы arj.exe и tar.exe, написать .bat файл, преобразующий все файлы текущего каталога из формата .tgz в формат .arj.  
     
    Используя программы coder.exe, написать .bat файл, преобразующий все .html файлы текущего каталога из формата Win CP1251 в формат KOI-8.  
     
    Написать .bat файл, который в командной строке Windows создает на сервере ECON директорию TEMP, внутри которой создает еще одну директорию TEMP1. Далее копирует в эти каталоги все файлы с расширением .txt из папки "C:\Program Files\Far". Затем в директории TEMP1 переименовывает файлы с расширением .txt в файлы с тем же именем, но расширением .bak. После чего в каталоге TEMP объединяет все файлы с расширением .txt в один файл all.txt, а исходные .txt файлы удаляет.  
     
    В графической оболочке Windows создать на сервере ECON директорию WIN, внутри которой создать еще одну директорию WIN1. Далее скопировать в эти каталоги все файлы с расширением .txt из папки "C:\Program Files\Far". Затем в директории WIN1 переименовать файлы с расширением .txt в файлы с тем же именем, но расширением .bak. Повторить то же самое, только с созданием каталогов FAR и FAR1 соотвественно в текстовой оболочке FAR Manager.  

    Всего записей: 1 | Зарегистр. 17-08-2008 | Отправлено: 23:04 17-08-2008
    Cyril Konst



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, как сделать вложенный циклы из For /f ?

    Код:
    for /f ''tokens=1" %%i in ('for /f ''tokens=3" %%i in (fined.tmp) do query user %%i') do echo %%i

      не работает.

    Всего записей: 632 | Зарегистр. 12-08-2003 | Отправлено: 10:12 18-08-2008 | Исправлено: Cyril Konst, 10:15 18-08-2008
    NIKZZZZ



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

    Цитата:
    Подскажите, как сделать вложенный циклы из For

    Можно попробовать так:

    Код:
     for /f ''tokens=1" %%i in ('cmd /c for /f ''tokens=3" %%i in (fined.tmp) do query user %%i') do echo %%i

     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 10:19 18-08-2008
    Cyril Konst



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Нет, не работает.
    Может есть другой вариант решения проблеммы?:
    Нужно получить из файла 3-е слово, передать её в команду query user, но вывести только первое слово из результата.
    (Нам по номеру сессии нужно получить логин пользователя)

    Всего записей: 632 | Зарегистр. 12-08-2003 | Отправлено: 10:46 18-08-2008 | Исправлено: Cyril Konst, 10:48 18-08-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cyril Konst
    Тогда можно попробовать так (test.bat):
     

    Код:
    if "%1"=="flag" goto _1
    for /f ''tokens=1" %%i in ('call test.bat flag') do echo %%i
    ....
    goto :eof
     
    :_1
    for /f ''tokens=3" %%i in (fined.tmp) do query user %%i
    goto :eof  
     

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 11:00 18-08-2008
    Cyril Konst



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    У ж тогда проще через файл сделать:

    Код:
    for /f ''tokens=3" %%i in (fined.tmp) do query user %%i >>fined2.tmp
    for /f ''tokens=1" %%i in (fined2.tmp) do echo %%i
    del fined2.tmp

    Я думал, может короче есть конструкция...
     

    Всего записей: 632 | Зарегистр. 12-08-2003 | Отправлено: 11:19 18-08-2008
    king_stiven

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

    Код:
    for /f "tokens=3" %%c in (fined.tmp) do (
        for /f "tokens=1" %%d in ('query user %%c') do echo %%d
        pause
        goto :eof    
    )

    Третье слово из первой строчки fined.tmp (а если в первой строчке fined.tmp меньше трёх слов? тогда не подойдёт, надо переделать) передаётся как %%c сюда:
    for /f "tokens=?" %%d in ('query user %%c') do echo %%d
    вместо
    query user %%c
    правильно написать, так как с командой query user незнаком.

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 14:19 18-08-2008 | Исправлено: king_stiven, 14:23 18-08-2008
    Cyril Konst



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Спасибо большое. Заработало. 3 слова в файле обязательно будут ибо это вывод команды tasklist. Иначе программа на этот код не должна попасть.
    Нужно сделать теперь это разруливание.
    Т.е. обход этого кода, если:  
    tasklist | find "процесс"  
    выдаёт пустую строку.
    Или как вариант:  
    tasklist /fi "имя образа eq процесс" /nh
    PS. Тока команды:      
        pause  
        goto :eof  
    не нужны.

    Всего записей: 632 | Зарегистр. 12-08-2003 | Отправлено: 17:16 18-08-2008
    king_stiven

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

    Цитата:
    Нужно сделать теперь это разруливание.  
    Т.е. обход этого кода, если:  
    tasklist | find "процесс"  
    выдаёт пустую строку.  
    Или как вариант:  
    tasklist /fi "имя образа eq процесс" /nh  

    Не понял, поподробней.
     
    Если правильно понял...

    Код:
    tasklist | find "процесс"
    if not errorlevel 1 (
        for /f "tokens=3" %%c in (fined.tmp) do (
            for /f "tokens=1" %%d in ('query user %%c') do echo %%d
        )
    )

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 18:16 18-08-2008 | Исправлено: king_stiven, 18:39 18-08-2008
    Cyril Konst



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Да, спасибо, именно так.
    Тока первая строка должна быть tasklist | find "процесс">fined.tmp
    А весь скрипт нужен для вывода логинов пользователей терминального сервера, у которых запущено определённое приложение "процесс".

    Всего записей: 632 | Зарегистр. 12-08-2003 | Отправлено: 19:23 18-08-2008 | Исправлено: Cyril Konst, 19:27 18-08-2008
    Cyril Konst



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопросик по передаче параметров a процедуры cmd-файлов

    Код:
    for /L %%i in (1,1,5) do call:func %%i
    goto:eof
    :func
    echo %%i

    вышеприведённая функция по идее должна выводить значения от 1 до 5.
    Но этого не происходит. Почему?

    Всего записей: 632 | Зарегистр. 12-08-2003 | Отправлено: 09:24 19-08-2008 | Исправлено: Cyril Konst, 09:26 19-08-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cyril Konst
    Потому что переменная %%i действует только в пределах первой строчки, надо так

    Код:
    for /L %%i in (1,1,5) do call:proc %%i
    goto:eof
    roc
    echo %1

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 09:34 19-08-2008
    NovaC

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    нужен bat файл который бы перебирал (с заданной степенью глубины) папки и файлы начиная с корня (или с заданной папки) определял размер (может и чего ещё по возможности) и сохранял инфу в txt файле. т.е. результат нужен приблизительно в таком виде :
    C:\
    C:\Documents and Settings                     200 Mb
    C:\Documents and Settings\All Users\      50 Mb
    C:\Documents and Settings\UserName\    150 Mb
    ..........................................................................
    C:\Program Files\                                   5 000 Mb
    C:\Program Files\Common Files\             500 Mb
    ..........................................................................
    C:\WINDOWS\                                        2 500 Mb  
    C:\WINDOWS\system32\                         1 300 Mb
     
    и .т.д.
    Если cmd не осиливает возможен вариант на VBS. Подскажите с чего начать ? и где искать ?

    Всего записей: 95 | Зарегистр. 09-01-2008 | Отправлено: 11:07 19-08-2008
    pgofman2

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите - почему не работает батник - проверяется доступность интернета путем пингования шлюза и двух днсов

    Код:
     
    set servername=
    set router=
    set dns1=
    set dns2=
     
    PING %router% | FIND "TTL=" >NUL
    IF ERRORLEVEL 1 GOTO router
    goto Exit
     
    :router
    PING %dns1% | FIND "TTL=" >NUL
    IF ERRORLEVEL 1 GOTO dns1
    goto Exit
     
    :nds1
    PING %dns2% | FIND "TTL=" >NUL
    IF ERRORLEVEL 1 GOTO reboot
    goto Exit
     
    :reboot
    c:\windows\system32\shutdown.exe -r -f -m \\%servername% -t 60 -d up:125:1
    goto Exit
     
    :Exit
     

     
    и если интернета нет - то перезагрузка сервера
     

    Всего записей: 66 | Зарегистр. 07-09-2006 | Отправлено: 11:34 19-08-2008 | Исправлено: pgofman2, 11:35 19-08-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