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

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ну может всё таки кто то подскажет мне по моему вопросу 2 страницы назад ?
    >>
    Вопрос вот какой:  

    Код:
    @echo off
    cls
    echo Protecting srcds from crashes...
    title srcds Watchdog
    :srcds
    echo (%time%) srcds started.
    start /wait srcds.exe
    echo (%time%) WARNING: srcds closed or crashed, restarting....
    goto srcds  

    То есть запусает, и в случае закрытия запускает повторно и так далее.
    Вопрос собственно вот в чём - если вдруг екзешник выбивает критикалом либо закрывается как то не так как всегда, то в бате появляется строка:  

    Код:
    ^CЗавершить выполнение пакетного файла [Y(да)/N(нет)]?  

    На которую бат не реагирует. Помогите пожалуйста добавить в бат посылку ключа \n в этом случае.
    Заранее большое спасибо.

    Всего записей: 3 | Зарегистр. 01-12-2009 | Отправлено: 10:23 04-12-2009
    king_stiven

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

    Цитата:
    если вдруг екзешник выбивает критикалом либо закрывается как то не так как всегда,

    При этом в диспеичере задач процесс srcds.exe есть или нет?
     
    Добавлено:
    Tase4ka
    В шапке через vbs

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 10:30 04-12-2009
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tase4ka
    Попробуйте так:
    Код:
    @Echo Off
    setlocal enabledelayedexpansion
    Set dt=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
    FOR %%a IN (D:\test\*.txt) DO (
        set tmpd=%%~ta
        set tmpd=!tmpd:~6,4!!tmpd:~3,2!!tmpd:~0,2!
        IF !tmpd!==%dt% copy /Y D:\test\%%~na C:\%%~na
    )
    Pause>nul

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 10:37 04-12-2009
    king_stiven

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

    Код:
    @echo off
    cls
    echo Protecting srcds from crashes...
    title srcds Watchdog
    :srcds
    echo (%time%) srcds started.
    srcds.exe
    echo (%time%) WARNING: srcds closed or crashed, restarting....
    goto srcds

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 10:39 04-12-2009
    mugil_cephalus

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

    Цитата:
    Пришлось использовать в условии "==", так как на EQL ругается, что нет такой функции

    EQU попробуйте

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 10:43 04-12-2009 | Исправлено: mugil_cephalus, 10:46 04-12-2009
    Tase4ka

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

    Цитата:
    Tase4ka
    Попробуйте так:
    Код:
    @Echo Off
    setlocal enabledelayedexpansion
    Set dt=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
    FOR %%a IN (D:\test\*.txt) DO (
        set tmpd=%%~ta
        set tmpd=!tmpd:~6,4!!tmpd:~3,2!!tmpd:~0,2!
        IF !tmpd!==%dt% copy /Y D:\test\%%~na C:\%%~na
    )
    Pause>nul  

     
     
    Так копирует всё содержимое каталога  

    Всего записей: 6 | Зарегистр. 04-12-2009 | Отправлено: 11:10 04-12-2009
    GORA2



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

    Цитата:
    Так копирует всё содержимое каталога  

    Локаль русская? Что значить "всё содержимое"? И не .txt файлы тоже? И .txt файлы с более старыми датами?  
     
    ps исправьте эту строку:
    Код:
    IF !tmpd!==%dt% copy /Y D:\test\%%~nxa C:\%%~nxa  

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 11:19 04-12-2009 | Исправлено: GORA2, 11:22 04-12-2009
    Tase4ka

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2
     
    УУУУУУРРРРРРРАААААААААА
     
     
    вот так сработало:
     
     
    @Echo Off
    setlocal enabledelayedexpansion
    Set dt=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
    FOR %%a IN (W:\*.txt) DO (
        set tmpd=%%~ta
        set tmpd=!tmpd:~6,4!!tmpd:~3,2!!tmpd:~0,2!
        IF !tmpd!==%dt% copy /Y W:\%%~nxa C:\%%~nxa
    )
    Pause>nul  
     
     
    Спасибо огроменное! Могу теперь с чистой совестью и чувством изполненного долга идти обедать

    Всего записей: 6 | Зарегистр. 04-12-2009 | Отправлено: 11:33 04-12-2009 | Исправлено: Tase4ka, 11:34 04-12-2009
    192168

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2
     
    Спасибо.
    Проблема была в пробелах до и после знака присвоения; "даже самый неправильный код должен выглядеть изящно" (с).

    Всего записей: 19 | Зарегистр. 10-11-2006 | Отправлено: 11:44 04-12-2009
    wolf0425



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

    Цитата:
    Пришлось использовать в условии "==", так как на EQL ругается, что нет такой функции
     
    читаем if /? и видим что действительно нет, есть equ

    Цитата:
    Делаю это по следующему коду на основании прочтенных топиков в форумах, но у меня не работает  
    set tmpd=%~t1 >>15.log
    set tmpd=!tmpd:~0,13! >>15.log
     
    это ж где такой пример был? для >> 15.log в смысле. так делать и бессмысленно и без понимания даже вредно - у тебя вот пробел лишний в переменную влез, засада для if

    Цитата:
    IF "!tmpd!" == %DATE% (
    set ntmp=%~n1
    copy /Y D:\test\%ntmp% C:\%ntmp% >>15.log
    )  
    ну что за... везде в цикле писала !tmpd!, а тут, в том же цикле - %ntmp% для свежеопределенной переменной, и еще хочешь чтоб работало
    Кстати, а чему равен используемый строчкой выше %1 ? или там второй % потерялся (и в %~t1 - тоже), а счетчик цикла выбран такой специально для запутывания?
     
    в общем, написать ты хотела видимо вот это:

    Код:
    @echo off
    setlocal enabledelayedexpansion  
    for %%i in (W:\*.txt) do (
        set tmpd=%%~ti
        if "!tmpd:~0,10!" equ "%date%" echo %%i & copy /y "%%~fi" c:\kuda_nado\ 1>nul
    )

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 12:17 04-12-2009 | Исправлено: wolf0425, 13:14 04-12-2009
    Craager



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем, подскажите скрипт или батник для несложной операции, а именно:
     
    Есть обновляемая каждый день папка (назовём её "X") и требуется батник, который будет делать резервную копию (backup) всех файлов и папок из папки "X" в условную папку "Y".
     
    Как это можно реализовать ?

    Всего записей: 389 | Зарегистр. 08-06-2006 | Отправлено: 12:35 04-12-2009 | Исправлено: Craager, 12:40 04-12-2009
    mugil_cephalus

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

    Цитата:
    Цитата:Пришлось использовать в условии "==", так как на EQL ругается, что нет такой функции  
     
    читаем if /? и видим что действительно нет, есть equ  

     
    ах, если бы...
     
    if /?
     
    Изменение команды IF при включении расширенной обработки команд:
     
        IF [/I] строка1 оператор_сравнения строка2 команда
        IF CMDEXTVERSION число команда
        IF DEFINED переменная команда
     
    где оператор_сравнения принимает следующие значения:
     
        EQL - равно
        NEQ - не равно
        LSS - меньше
        LEQ - меньше или равно
        GTR - больше
        GEQ - больше или равно
     
    а ключ /I, если он указан, задает сравнение текстовых строк без учета
    регистра.  Ключ /I можно также использовать и в форме строка1==строка2
    команды IF.  Сравнения проводятся по общему типу данных, так что если
    строки 1 и 2 содержат только цифры, то обе строки преобразуются в числа,
    после чего выполняется сравнение чисел.

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
     
    еси ты такой вумный, то не значит никто не умный, я делала запрос справки поэтому и пыталась использовать согласно справки EQL!
     
    Но работает почему-то EQU...вот!

    Всего записей: 6 | Зарегистр. 04-12-2009 | Отправлено: 13:02 04-12-2009
    king_stiven

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

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 13:14 04-12-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tase4ka
    1) та реплика ( http://forum.ru-board.com/topic.cgi?forum=62&topic=17154&start=1820#13 ) адресована была wolf0425
    2) я сам пострадал с опечаткой справки
     
    в какой-то команде (помимо if) я тоже натыкался на опечатку в операторах сравнения - с тех пор "ученый"

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 13:16 04-12-2009 | Исправлено: mugil_cephalus, 13:21 04-12-2009
    wolf0425



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

    Цитата:
    ах, если бы...
    if /?
    где оператор_сравнения принимает следующие значения:
        EQL - равно  
    Это что у вас за ОС?

    Код:
    where compare-op may be one of:
        EQU - equal
        NEQ - not equal
        LSS - less than
        LEQ - less than or equal
        GTR - greater than
        GEQ - greater than or equal


    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 13:16 04-12-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    вот еще опечатка в ntcmds.chm
    enableextension  
    Включает расширения командного процессора до появления соответствующей команды endlocal, вне зависимости от состояния расширений командного процессора перед командой setlocal.  
    disableextensions  
    Выключает расширения командного процессора до появления соответствующей команды endlocal, вне зависимости от состояния расширений командного процессора перед командой setlocal.  
     
    у enableextension - отсутствует "s"
     
    вот еще
       
     
    это из станека
     
    Добавлено:
    wolf0425

    Цитата:
    Это что у вас за ОС?

    я сам бы хотел знать того переводчика  

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 13:26 04-12-2009 | Исправлено: mugil_cephalus, 13:42 04-12-2009
    192168

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Код:
     
    :begin
    Set/p Oper= Ввод:  
    If %Oper%==1 goto 1
    If %Oper%==2 goto 2
     
    Как записать
    If %Oper%==(кроме 1 или 2) goto begin ?
     
    If /I %Oper% NEQ 1
    If /I %Oper% NEQ 2
    не сработало.
     
    Спасибо.

    Всего записей: 19 | Зарегистр. 10-11-2006 | Отправлено: 16:10 04-12-2009
    01MDM



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

    Цитата:
    Как записать
    If %Oper%==(кроме 1 или 2) goto begin ?  

     
    Сразу определи переменную Oper на случай, если будет "пустой" ввод (просто Enter):

    Код:
     
    @echo off
    setlocal
     
    set "Oper=0"
     
    :begin
    Set/p Oper= Ввод:  
    If %Oper%==1 goto 1
    If %Oper%==2 goto 2
    goto:begin
     
    :1
     
    :2
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:24 04-12-2009
    192168

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

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