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

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

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

evle (19-03-2008 19:44): Лимит страниц.
Задачи на bat-файлах 5
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 15:21 11-09-2007 | Исправлено: Elroir, 01:52 26-02-2008
    compi

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    да , запутался, с 3.0.566.0 , ноя только что поменял и skip=4 и версию.
    стоит версия 3.0.566.0 с ней и нужно сравнить, чтобы понять, стоит ли ставить обновление, т.к. уже есть версия выше

    Всего записей: 56 | Зарегистр. 18-12-2005 | Отправлено: 03:51 23-12-2007
    Elroir



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

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:53 23-12-2007
    compi

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    нет, всё ровно начинает инсталить, могу в ПМ весь код выслать

    Всего записей: 56 | Зарегистр. 18-12-2005 | Отправлено: 03:57 23-12-2007
    Elroir



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

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 04:03 23-12-2007
    compi

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    слушай уже сломал себе голову, но установка происходит независимо от версии. что-то не так . Я всё перенабрал ручками, запустил батник на компе где стоит последняя версия ПРОГРАММЫ и всё ровно начинается установка обновления. Т.е. стоит версия 3.0.566.0, мы с ней сравниваем "%%а"=="3.0.566.0" и начинается установка обновления хотя по идее должен быть пропуск

    Всего записей: 56 | Зарегистр. 18-12-2005 | Отправлено: 13:29 23-12-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    compi
    A ты уверен, что %%a получает нужное значение, попробуй изменить skip. Просто когда ты приводил пример вывода reg query, ты не указал заглавную строчку

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:52 23-12-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    compi
    OK. Давай попробуем по шагам.
    1. Создаешь батник с таким кодом:

    Код:
     
    @echo off  
    for /f "skip=4 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\ESET\ESET Security\CurrentVersion\Info" /v ProductVersion') do echo "%%a"
     

    Запускаешь, должно выдать 3.0.566.0 в кавычках. Проверь, что выдает именно это и, что между кавычками и числом нет пробелов.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:53 23-12-2007
    compi

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

    Код:
    for /f "skip=4 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\ESET\ESET Security\CurrentVersion\Info" /v ProductVersion') do echo "%%a"  
    pause

     
    ничего не вывело кроме "Для продолжение нажмите..."

    Всего записей: 56 | Зарегистр. 18-12-2005 | Отправлено: 15:11 23-12-2007
    01MDM



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

    Код:
     
    set "regpath=HKLM\SOFTWARE\ESET\ESET Security\CurrentVersion\Info"
    for /f "tokens=3" %%a in ('reg query  "%regpath%" ^| find "ProductVersion"') do echo "%%a"
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:47 23-12-2007 | Исправлено: 01MDM, 16:02 23-12-2007
    slech



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    всем привет ещё раз.
    опять со ввоим вопросом насчёт копирования файлов по сети из а в б
    Файл копируются по заданию - но не всегда успешно - поэтому нужно проверять.

    Цитата:
     
    set /p "folder=Enter folder name : "
    robocopy \\PC1\Pictures\%folder% \\PC2\Designers\Pictures\%folder% /S /E /R:2 /NP /XO /LOG:log.txt
    blat log.txt -server mailserver -f user@domain.com -tf emaillist.txt -s "%folder% - pictures copy status" -log logblat.txt
     

    1.Как включить в конструкцию что бы если не ввели значение папки(set /p "folder=Enter folder name : ") - тогда на выход, т.е. не делаем ничего.
    2.Как заставить robocopy копировать файл если источник полный файл а адресат такой же файл но с нулевым размером ? Если включить опцию /XO - skip old? он просто всё пропускает. Если её выключть начинает всё переписывать.
    3.Как в blat указать в теме письма русское слово ?
    4.Как сделать dir и вывести списочек 2-ух, 3-ёх последних созданных папок ?
     
    Спасибо.

    Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 10:25 25-12-2007 | Исправлено: slech, 10:28 25-12-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    slech
     
    1.Как включить в конструкцию что бы если не ввели значение папки(set /p "folder=Enter folder name : ") - тогда на выход, т.е. не делаем ничего.  
     
    set /p "folder=Enter folder name : "  
    if "%folder%"=="" goto :eof

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 11:29 25-12-2007 | Исправлено: king_stiven, 11:30 25-12-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    slech
    Еще можно поставить setlocal, на случай если скрипт запускается несколько раз в одной сессии или:

    Код:
     
    set folder=? (Так как нельзя создавать папки и файлы с "?")
    set /p "folder=Enter folder name : "  
    if %folder%==? goto :eof
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:37 25-12-2007
    slech



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    01MDM
    Спасибо №1 готово.
     
    nnbackup
    AnyDifference <ON/OFF>
     
    Определяет поведение nnBackup во время синхронизации каталогов. По умолчанию nnBackup копирует в приемный каталог все новые файлы из исходного каталога и все файлы с более "новой" датой создания или модификации. Выставив AnyDifference в ON, можно предписать nnBackup копировать и файлы, чья дата создания/модификации изменилась в противоположную сторону или не изменилась вовсе, но при этом изменился размер файла.
     
    Аналог опции командной строки -ad.

    то что нужно - правдо по лиценции программа не походит.
    может кто знает кто так может ещё делать из бесплатного ?
    в robocopy не нашёл такого.

    Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 14:18 25-12-2007 | Исправлено: slech, 14:36 25-12-2007
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть такая задача. Нужно синхронизировать каталоги на двух машинах с помощью флэшки минимальными средствами. Одновременно машины недоступны.
    1. Создаем текстовой файл на синхронизируемой машине , содержащий содержимое каталога + некоторый хеш (например размер, дату и т.п.) для каждого файла.
    2. На другой машине запускаем батник, который должен создать на флэшке каталог, содержащий новые или обновленные файлы вместе со структурой каталогов + список удаленных файлов.
    3. Синхронизация.
     
    Я написал подобную штуку, но уж больно кривая получилась. Интересно было-бы взглянуть на это чужим взором.
       

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 15:53 25-12-2007
    compi

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    привет. твой код прекрасная работает, но дальше я так и не сдвинулся. Сравнение идёт через команду If

    Код:
    IF  "%%a" GEQ "3.0.566.0" goto end2

    но я что-то не могу уловить, нужное условие. Нужно следующее, если всё что больше или рано числу 3.0.566.0, то должно выполняться goto end2, иначе goto пропускается
     

    Код:
    set "regpath=HKLM\SOFTWARE\ESET\ESET Security\CurrentVersion\Info"
    for /f "tokens=3" %%a in ('reg query  "%regpath%" ^| find "ProductVersion"') do echo ver.%%a
    if "%%a" GEQ "3.0.566.0" goto end2

    эта конструкция работает не совсем верно, я уже подставлял LEQ и др. варианты но эффект не верный

    Всего записей: 56 | Зарегистр. 18-12-2005 | Отправлено: 16:14 25-12-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    compi
    нельзя сравнить "число" 3.0.0.0.1 и "число" 3.0.0.0.2

    Код:
     
    set "regpath=HKLM\SOFTWARE\ESET\ESET Security\CurrentVersion\Info"
    for /f "tokens=3" %%a in ('reg query  "%regpath%" ^| find "ProductVersion"') do (
         echo ver.%%a
         set oldVer=%%a
    )
     
    if %oldVer:.=% GEQ 305660 goto end2
     

     
    Будет работать правильно если будет соблюдаться стандарт обозначения версий, т.е не будут обозначения как 3.0.556.10b2

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:47 25-12-2007 | Исправлено: 01MDM, 16:52 25-12-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    compi
     
    скобки поставь
     
    set "regpath=HKLM\SOFTWARE\ESET\ESET Security\CurrentVersion\Info"  
    for /f "tokens=3" %%a in ('reg query  "%regpath%" ^| find "ProductVersion"') do (
        if "%%a" GEQ "3.0.566.0" goto end2
    )
     
    код вместо %%a должен подставлять значение только внутри цикла for
     
    Добавлено:
    slech
     
    4.Как сделать dir и вывести списочек 2-ух, 3-ёх последних созданных папок ?  
     
    Это отдельная задача, или идёт в контексте с робокопи?

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 17:02 25-12-2007
    antonn2

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    обошел три предыдущие темы, не нашел похожего, самому квалификации не хватает сотворить
    Есть такая струкnура папок:
    c:\one\111\
    c:\one\222\
    c:\one\333\
    c:\one\444\
    в каждой конечной папке лежат несколько файлов и файл log.txt.
     
    мне нужно найти все "цифровые" папки в c:\one\ и скопировать этот самый log.txt их каждой папки в таком виде:
    c:\temp\111_log.txt
    c:\temp\222_log.txt
    c:\temp\333_log.txt
    c:\temp\444_log.txt
     
    не могу составить батничек, ну пути нашел вроде, а мне с номерами нужно

    Код:
    set diskk=c:\one
    for /d %%i in ("%diskk%%~1*") do (
        echo %%i
    )


    Всего записей: 96 | Зарегистр. 13-11-2006 | Отправлено: 20:58 25-12-2007
    01MDM



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

    Код:
     
    @echo off
    for /d %%i in ("c:\one\*") do copy "%%i\log.txt" "c:\temp\%%~ni_log.txt"
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:09 25-12-2007
    slech



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

    Цитата:
    slech
     
    4.Как сделать dir и вывести списочек 2-ух, 3-ёх последних созданных папок ?  
     
    Это отдельная задача, или идёт в контексте с робокопи?

    это самое первое - для того что бы знать что вводить в качестве парамера для  
    set /p "folder=Enter folder name : "

    Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 23:13 25-12-2007
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4
    evle (19-03-2008 19:44): Лимит страниц.
    Задачи на bat-файлах 5


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru