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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Simple Crypt, спасибо - помогло!

    Всего записей: 149 | Зарегистр. 13-03-2008 | Отправлено: 05:42 14-04-2008
    dumsik



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Еще один способ выяснения текущего дня недели с помощью утилиты из Reskit now.exe
     
    SETLOCAL EnableDelayedExpansion
     
    call :GetWeekdayNumber
     
    echo %dd%
     
    GOTO :EOF
     
    :GetWeekdayNumber
    now.exe | FIND /I "mon" && (SET dd=1 & GOTO :EOF)
    now.exe | FIND /I "tue" && (SET dd=2 & GOTO :EOF)
    now.exe | FIND /I "Wed" && (SET dd=3 & GOTO :EOF)
    now.exe | FIND /I "Thu" && (SET dd=4 & GOTO :EOF)
    now.exe | FIND /I "Fri" && (SET dd=5 & GOTO :EOF)
    now.exe | FIND /I "Sat" && (SET dd=6 & GOTO :EOF)
    now.exe | FIND /I "Sun" && (SET dd=7 & GOTO :EOF)
    GOTO :EOF

    Всего записей: 58 | Зарегистр. 29-01-2004 | Отправлено: 08:10 14-04-2008 | Исправлено: dumsik, 08:14 14-04-2008
    HelpAbout



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

    Всего записей: 25 | Зарегистр. 11-04-2008 | Отправлено: 10:20 14-04-2008
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rush, на глазок на мегабайтном логе разницы в скорости не вижу

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 17:14 14-04-2008 | Исправлено: wolf0425, 17:15 14-04-2008
    Ilyansk

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    По вопросу что-то ничего не нашлось, а он простой: как запустить TheBat! с параметрами из BAT файла?
    Они (Риты), как нарочно затруднили автоматизацию. То у них восклицательный знак по умолчанию в имени директории, то символ ключа - слэш!
    У меня кострукция
    start /max "c:\program files\the bat!\thebat.exe" /nologo /mailu=....
    дает ошибку:
    Недопустимый ключ: "/nologo".
    По-моему это сообщение команды start
    что делать? нужно что бы батник закрывался, а почтовик продолжал  работать.

    Всего записей: 70 | Зарегистр. 27-07-2006 | Отправлено: 13:54 15-04-2008
    Tipulatoid



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

    Цитата:
    что делать? нужно что бы батник закрывался, а почтовик продолжал  работать.


    Код:
    start "" /max "c:\program files\the bat!\thebat.exe" /nologo /mailu=....

     
    А грамотней взять путь из реестра в целях универсальности батника:
     

    Код:
    setlocal enabledelayedexpansion
    call :check_bat
    start "" /max "%smailclient%" /nologo /mailu=....
    goto next
     
     
    :check_bat
    setlocal disabledelayedexpansion
    for /f "tokens=3*" %%a in ('reg query "HKCU\Software\RIT\The Bat!" /v "EXE path"') do set "lmailclient=%%b"
    for /f "tokens=*" %%a in ('echo "%lmailclient%"') do set smailclient=%%~sa
    endlocal & set "smailclient=%smailclient%"
    goto :eof
     
    :next

     
    Во втором варианте также решена проблема с воскл. знаком

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 16:34 15-04-2008 | Исправлено: Tipulatoid, 16:38 15-04-2008
    Grim_Repo



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, вообщем имеется батник который спрашивает откуда копировать файлы и куда копировать... Но проблема в том что батник спрашивает "С какого hdd сделать backup?"... В идеале - надо ввести просто букву диска, без : или \ так как батник их сам подставит... Тоесть требуется чтобы в случае если юзер введет C:\ или C: - батник удалял : или :\ автоматом...  
    Так же для "Куда копировать?" нужно чтоб батник делал следующее:
    1. После ввода пути - батник должен проверить наличие диска на который юзер хочет копировать... Тоесть - юзер ввел H:\backup\1234, батник выполнил "if exist H: (goto EXIST) else goto NOT EXIST"
    2. Требуется чтобы в случае если юзер введет H:\backup\1234\ - батник удалил последнюю \ так как батник сам ее проставит...
    Так же есть проблема в том что надо через xcopy создавать папку - вида DD.MM.YYYY_HH-MM-SS ... Но если поставить - %date%_%time% - xcopy не может создать папку так как %time% выглядит как - HH:MM , но в винде нельзя создать папку с именем в котором имеется :
     
    P.S.
    Повторю свои старые вопросы на которые так и не последовало ответов:

    Цитата:
    Еще хотелось бы узнать - как заставить батник записывать ВСЕ свои действия в лог...

    Цитата:
    Кстати - реально ли сделать так чтобы, батник сохранял свои последнии настройки в файл конфигурации... И считывал их оттуда...

     
    Заранее, спасибо!

    Всего записей: 397 | Зарегистр. 02-05-2006 | Отправлено: 20:19 15-04-2008 | Исправлено: Grim_Repo, 21:30 15-04-2008
    king_stiven

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

    Цитата:
    так как %time% выглядит как - HH:MM , но в винде нельзя создать папку с именем в котором имеется :  

    for /f "tokens=x delims=:" %%e in ("%time%") do (
     
    Разбери %time% как строчку, справка тебе в помощь. По остальным вопросам, всё это многократно обсуждалось, советую скачать все страницы темы, начиная со свежих.
    set /?

    Цитата:
    Кстати - реально ли сделать так чтобы, батник сохранял свои последнии настройки в файл конфигурации... И считывал их оттуда...  

    Вполне.
     
     

    Всего записей: 2182 | Зарегистр. 17-07-2006 | Отправлено: 21:43 15-04-2008
    shva

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Простой вопрос, а ставит нас в тупик!
    set a=1 & echo %a%
    Какого рожна не выводит присвоенного значения переменной?
    Помогите разобраться с тремя соснами!

    Всего записей: 11 | Зарегистр. 19-12-2006 | Отправлено: 22:10 15-04-2008
    Tipulatoid



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

    Цитата:
    Тоесть требуется чтобы в случае если юзер введет C:\ или C: - батник удалял : или :\ автоматом...  


    Код:
    @echo off
    set /p drive=Введите диск  
    set drive=%drive:~0,1%
     


    Цитата:
    Тоесть - юзер ввел H:\backup\1234, батник выполнил "if exist H: (goto EXIST) else goto NOT EXIST"


    Код:
    @echo off
     
    set /p path=Введите путь  
     
    pushd %path:~0,1%:
    set error=%errorlevel%
    popd
     
    if %error%==0 (
       goto exist
    ) else (
       goto not_exist
    )
     
    :exist
    echo Диск %path:~0,1%: существует
    goto :eof
     
    :not_exist
    echo Диск %path:~0,1%: не существует
    goto :eof
     


    Цитата:
    Требуется чтобы в случае если юзер введет H:\backup\1234\ - батник удалил последнюю \ так как батник сам ее проставит...


    Код:
    set /p path=Введите путь  
     
    if %path:~-1%==\ (
       set path=%path:~0,-1%
    )


    Цитата:
    Так же есть проблема в том что надо через xcopy создавать папку - вида DD.MM.YYYY_HH-MM-SS ... Но если поставить - %date%_%time% - xcopy не может создать папку так как %time% выглядит как - HH:MM , но в винде нельзя создать папку с именем в котором имеется :


    Код:
    set ctime=%time::=-%
    set ctime=%ctime:~0,-3%
    echo %ctime%


    Цитата:
    Еще хотелось бы узнать - как заставить батник записывать ВСЕ свои действия в лог...

    Запускай батник следующим образом из консоли auto.bat>log.txt Внутри батника можешь закоментировать строку @echo off

    Цитата:
    Кстати - реально ли сделать так чтобы, батник сохранял свои последнии настройки в файл конфигурации... И считывал их оттуда...

    Реально. Вот пример записи в ini - файл:

    Код:
     
    :ask_mail_adress
    set mail_adress=
    echo Введите адрес основного ящика, через который Вы будете общаться с участниками.
    set /p mail_adress=
    if not defined mail_adress (echo  & goto ask_mail_adress)
    echo [Mail adress]%mail_adress%>> send.ini
     

    Пример чтения из ini-файла:

    Код:
    for /f "delims=] tokens=1*" %%a in ('find "[Mail adress]" send.ini') do set mail_adress=%%b

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 22:21 15-04-2008 | Исправлено: Tipulatoid, 22:42 15-04-2008
    01MDM



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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    set a=1 & echo !a!
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:43 15-04-2008 | Исправлено: 01MDM, 23:54 15-04-2008
    Nagual



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

    Цитата:
    Так же есть проблема в том что надо через xcopy создавать папку - вида DD.MM.YYYY_HH-MM-SS ... Но если поставить - %date%_%time% - xcopy не может создать папку так как %time% выглядит как - HH:MM , но в винде нельзя создать папку с именем в котором имеется :  
     

     
    for /f "tokens=1-6 delims=:., " %a in ("%date% %time:~,-3%") do echo "[%c.%b.%a_%d.%e.%f]"

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 03:53 16-04-2008
    Elroir



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

    Цитата:
    Простой вопрос, а ставит нас в тупик!  
    set a=1 & echo %a%  
    Какого рожна не выводит присвоенного значения переменной?

    Строка выполняется как одна команда. Соответственно, CMD подставляет туда значение переменных до начала выполнения. А что у было нас в переменной "а" до выполнения? Правильно - ничего. Либо переводи чтение переменной на следующую строку, либо используй вариант, показанный  01MDM выше.


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:56 16-04-2008
    Ilyansk

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Tipulatoid
    Спасибо за отклик. Почтовик я так и запускаю (определяю немного не так). Если не сложно, поясните, плз, почему конструкция  
    start "" /max "%smailclient%" /nologo /mailu=....
    не принимает высказывание /nologo за ключ, а в случае
    start /max "%MAILER%" /nologo /BATCH:"%wd%rass.txt"
    принимает?
    ЗЫ %MAILER% несет полный путь к почтовику
     
    Elroir
    в таком случае используется инструкция
    setlocal enabledelayedexpansion  
    и выражение
    set a=1 & echo !a!
    т.е. переменная обрамляется восклицательными знаками. Внимание: выражение  setlocal enabledelayedexpansion - палка о двух концах. Из текстовых переменных исчезают при выводе восклицательные знаки. Когда я столкнулся с этим применил при обращении к ней инструкцию setlocal DISABLEDELAYEDEXPANSION, потом снова включал setlocal enabledelayedexpansion

    Всего записей: 70 | Зарегистр. 27-07-2006 | Отправлено: 09:45 16-04-2008 | Исправлено: Ilyansk, 09:50 16-04-2008
    shva

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Elroir
    Ilyansk
    Спасибо за подсказку и разъяснения!
     
    Elroir
    Тяжело воспринимается фраза "Строка выполняется как одна команда", ведь очевидно, что в строке две команды объединенные символом "&" !?

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ, помогите кто может!
     
    Просьба не остылать к мануалам, т.к. ограничен по времени и мозгу.
    Есть необходимость в батнике, который бы копировал из папки D:\1 последний созданный файл, причем  время создания должна учитываться вплоть до секунд.
    В папку D:\2.  
     
    Во второй части задач на бат нашел что-то подобное но реализовать под себя не смог.
     
    Существует ли возможность производить копирование файла в зависимости от наличия в содержимом файле кодового слова(у него нет четкой позиции в файле). Если да, хотелось бвы увидеть пример.  
     
    Заранее благодарю, всех откликнувшихся за ответы.

    Всего записей: 32 | Зарегистр. 13-09-2006 | Отправлено: 11:21 16-04-2008 | Исправлено: bmax, 11:24 16-04-2008
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    добрый день
     
    подскажите как лучше определить ОС
    если по команде ver
     
    XP выдает -- Microsoft Windows XP [Version 5.1.2600]
                        Microsoft Windows XP [Версия 5.1.2600]
    Vista --          Microsoft Windows [Версия 6.0.6000]
    Vista с SP1    Microsoft Windows [Версия 6.0.6001]
     
    то можно так
    FOR /f "TOKENS=*" %%i IN ('ver ^| FIND "Версия 5.1.2600"') DO GOTO XP_RU
    FOR /f "TOKENS=*" %%i IN ('ver ^| FIND "Version 5.1.2600"') DO GOTO XP_EN
    FOR /f "TOKENS=*" %%i IN ('ver ^| FIND "6.0.6000"') DO GOTO Vista
    FOR /f "TOKENS=*" %%i IN ('ver ^| FIND "6.0.6001"') DO GOTO Vista
     
    но чтото не очень нравится
    какие есть еще варианты - более красивые
     
    спасибо
     
     

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 11:23 16-04-2008 | Исправлено: JohnRD, 11:38 16-04-2008
    ebrr

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста как удалить определенную папку с помощью батника (допустим c:\Test)

    Всего записей: 36 | Зарегистр. 19-07-2007 | Отправлено: 11:39 16-04-2008
    king_stiven

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

    Код:
    for /f "tokens=*" %%c in ('dir "D:\1\*.*" /t:c /b /a:-d') do (
        xcopy "D:\1\%%c" D:\2
        goto :eof
    )


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

    Всё таки посмотри справку по FIND, там достаточно понятно это обьяснено.
    ebrr
    rd c:\Test

    Всего записей: 2182 | Зарегистр. 17-07-2006 | Отправлено: 11:52 16-04-2008
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    JohnRD
    Что надо определить?
    Виста, ХР, или 2000? или еще наличие SP
     
    Вообще лучше искать только по номеру билда, не учитывая текстовые строки
     
    ebrr
    RD /?

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 11:59 16-04-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

    Рейтинг.ru