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

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



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

    Цитата:
     
    А как переделать, чтобы создавался один файл (doc.7z), в котором бы были подкаталоги с именами юзеров?
     

    Если только все сначала скопировать в одно место. Вот вариант без "привязки к местности"  расположения профилей пользователей. На home работать не будет, если не установлена wmic.  

    Код:
     
    @echo off
    setlocal
    md arch
    chcp 1251 >nul
    for /f "tokens=2 delims==" %%i in ('wmic useraccount get sid /value') do (
        for /f "skip=2 tokens=3*" %%i in ('reg query "hku\%%i\software\microsoft\windows\currentversion\explorer\shell folders" /v personal 2^>nul') do (
        set "userpath=%%i %%j" && call:arch
       )
    )
    7z a -t7z userdocs.7z arch\
    chcp 866 >nul
    goto:eof
    :arch
    xcopy /s "%userpath%" "arch\%userpath:~3%"
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:46 13-11-2007 | Исправлено: 01MDM, 21:44 13-11-2007
    Cyril Konst



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Чёто не работает как надо...  
    всё в подкаталог одного юзера копирует...

    Всего записей: 634 | Зарегистр. 12-08-2003 | Отправлено: 21:30 13-11-2007 | Исправлено: Cyril Konst, 21:37 13-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cyril Konst
    Пожалуй он будет работать только если все пользователи будут "залогинены"
    Попытка #2

    Код:
     
    @echo off
    for /f "tokens=2 delims==" %%i in ('wmic useraccount get name /value') do (call:next %%i)
     
    7z a -t7z docs.7z arch\
    goto:eof
     
    :next    
    if %1 equ Администратор goto:eof  
    if %1 equ Гость goto:eof  
    if %1 equ SUPPORT_388945a0 goto:eof  
    if %1 equ HelpAssistant goto:eof  
    if %1 equ ASPNET goto:eof
    xcopy /s /i "%HOMEDRIVE%\Documents and Settings\%1\Мои Документы" "arch\%1"
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:21 13-11-2007 | Исправлено: 01MDM, 23:35 13-11-2007
    Tipulatoid



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

    Цитата:
    помогите пожалуйста с батником который будет менять это время на 5 минут больше системного на данный момент и выключать комп ! а он должен по идее через 5 мин включиться !

    Ну пробуй. Батник не тестировался, т.к. мою материнку найденная тобой утилита не поддерживает. Перед запуском батника настрой должным образом утилиту Bilarm, убедись что она работает на твоем компе. батник следует запускать из папки где лежат файлы этой утилиты.

    Код:
    @echo off
     
    :: Прибавляем к текущему времени 5 минут, используется код wolf0425
    set delay=5
    set /a time#n=(0%time:~0,1%)*600 + (%time:~1,1%)*60 + (%time:~3,1%)*10 + (%time:~4,1%) + %delay%
    if %Time#n% GEQ 1440 set /a Time#n=%Time#n%-1440
    Set /a Time#h=(%Time#n%)/60
    Set /a Time#m=%Time#n%-(%Time#h%*60)
     
    :: Выясняем номер дня
    set day=%date:~0,2%
     
    :: Запускаем утилиту Bilarm
    Bilarm.exe /set %day%:%time#h%:%time#m%:0
     
    :: Выключаем комп через 10 секунд
    shutdown -s -t 10
     

     
    Это пока тестовый вариант. Батник не переводит день, если он запущен в промежуток времени с 23:55:00 до 23:59:59 Т.е. в этом случае он глючит. Также он не работает с секундами, т.е. время включения может изменяться от 5 минут до 4 минут 1 секунды.
    Пока попробуй, работает ли код в принципе, а потом, если надо, доработаю.
     
    Добавлено:
    Lutvun

    Код:
    @ECHO OFF
    call :rename "c:\auto 3\delme222\OK"
    call :rename "c:\auto 3\delme222\incomplete"
    goto :eof
     
    :rename
    for /f "usebackq tokens=*" %%a in (`dir "%~1" /b /s /a:-d`) do (
       echo "%%~nxa" | find "~" && (
          echo "%%a" | find /i "\noname" || (
             for /f "tokens=1,2 delims=~" %%b in ("%%~nxa") do (
                ren "%%a" "%%b"
                if "%%c"=="" (
                   if not exist "%%~dpa\noname" mkdir "%%~dpanoname"
                   move "%%~dpa%%b" "%%~dpanoname"
                )
             )
          )
       )
    )

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 00:14 14-11-2007 | Исправлено: Tipulatoid, 03:10 14-11-2007
    Lutvun



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    Огромное спасибо. Всё работает как надо.
    П.С. Также огромное спасибо king_stiven!!!

    Всего записей: 286 | Зарегистр. 22-11-2005 | Отправлено: 08:43 14-11-2007
    William Gates

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужен батник которвый откроет из определенного каталога файл temp.rtf, и в случае если пользователь внесет в него какие-либо изменения сохранит его в другом каталоге. Если отследить изменения сложно, можно просто при закрытии окна документа сохранять его в другом каталоге. Заранее благодарю.

    Всего записей: 22 | Зарегистр. 12-10-2007 | Отправлено: 09:05 14-11-2007
    123Maximus123



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    День добрый Уважаемые  
    В наличии есть вот такой бантик  

    Код:
     
    @echo off
    SET FOLDER=%date:~0,2%.%date:~3,2%.%date:~6,4%-%time:~0,2%.%time:~3,2%.%time:~6,2%
    cd С:\BACKUP  
    md  %FOLDER%
    C:  
    cd C:\baza\Demo\
     "C:\Program Files\WinRAR\rar.exe" a -m5 -o+ -r C:\backup\%FOLDER%\backup.rar *.*
    exit
     

     
    Он делает архив в папку C:\backup\ «дата и время»
    Проблема в том что мне надо что бы этот архив создавался на сервере \\server\
    Может кто подскажи решение этой проблемы пробовал подключать сетевой диск тоже самое не может создать архив на нём  
     

    Всего записей: 247 | Зарегистр. 21-03-2006 | Отправлено: 09:27 14-11-2007 | Исправлено: 123Maximus123, 09:33 14-11-2007
    Cyril Konst



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

    Цитата:
    Пожалуй он будет работать только если все пользователи будут "залогинены"  

    Да нет, список пользователей правильно выводится.
    Похоже это 7z тупит. Он типа не различает вышестоящие каталоги.

    Цитата:
    Попытка #2

    Когда делается xcopy, ошибка: "не найден файл Мои Документы"

    Всего записей: 634 | Зарегистр. 12-08-2003 | Отправлено: 10:08 14-11-2007
    soulthiefer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    скопировал предложенный вами батник  
    выдает такую ошибку http://soulthiefer.narod.ru/123.JPG
     
     
     
    Lutvun
    то что вы предложили вообще ничего не делает (( я просто скопировал в батник он выполняется но ниче не происходит .. мож я чтото не так делаю ?(((
     

    Всего записей: 40 | Зарегистр. 11-07-2006 | Отправлено: 10:17 14-11-2007 | Исправлено: soulthiefer, 10:20 14-11-2007
    01MDM



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

    Цитата:
     
    Когда делается xcopy, ошибка: "не найден файл Мои Документы"
     

    Такая ошибка возникает только если к папке "Мои документы" пользователя закрыт общий доступ.
    Я попробовал у себя и все отработало правильно.
     
    Просто через проводник туда зайти можно? Или пишет "Отказано в доступе"

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:26 14-11-2007 | Исправлено: 01MDM, 10:33 14-11-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    да нет же, просто xcopy хочет уточнить, файл это или папка, о чем и говорит нам ошибка
    поэтому надо делать так
    echo f|xcopy в случае, если объект — файл
    echo d|xcopy в случае, если объект — папка
     
    Добавлено:
    -t7z вовсе не обязательно ставить, ибо по дефолту так и так создаются архивы 7z

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 10:50 14-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    Тогда почему ОН одни учетные записи, к которым открыт общий доступ обрабатывает правильно, а в других случаях пишет что не найден файл "Мои документы"?  
    К тому же xcopy с ключем /s - копировать все папки и подпапки вместе с содержимом кроме пустых.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:03 14-11-2007 | Исправлено: 01MDM, 11:06 14-11-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    извиняюсь, нет ща времени вникать в суть задачи
    навскидку такие ошибки бросаются в глаза
    нет файла "Мои документы", это папка
    и возможно ее действительно может не быть, поэтому надо сделать проверку на ее наличие и в случае ее отсутствия, не выполнять копирование
    ну и

    Цитата:
    if %1 equ Администратор goto:eof  
    if %1 equ Гость goto:eof  
    if %1 equ SUPPORT_388945a0 goto:eof  
    if %1 equ HelpAssistant goto:eof  
    if %1 equ ASPNET goto:eof

    в справке вижу такое, то есть имхо ошибка в параметре сравнения есть
     
        EQL - равно
        NEQ - не равно
        LSS - меньше
        LEQ - меньше или равно
        GTR - больше
        GEQ - больше или равно
     
    было бы неплохо увидеть точную постановку задачи
     
    Добавлено:
    да, и вместо %HOMEDRIVE%\Documents and Settings\ имхо лучше использовать %USERPROFILE%\..\ так как в некоторых случаях папка профилей и настроек может быть переопределена

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 11:24 14-11-2007
    Cyril Konst



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

    Цитата:
    было бы неплохо увидеть точную постановку задачи

    Нужно создать архив documents.7z, в котором бы сохранялась структура каталогов пользователей (\user1\Мои документы, \user2\Мои документы...\userN\Мои документы).
    01MDM

    Цитата:
    Просто через проводник туда зайти можно? Или пишет "Отказано в доступе"

    Можно.
    Для всех каталогов пишет "не найден файл Мои Документы"

    Всего записей: 634 | Зарегистр. 12-08-2003 | Отправлено: 11:36 14-11-2007 | Исправлено: Cyril Konst, 11:41 14-11-2007
    Tipulatoid



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

    Цитата:
    скопировал предложенный вами батник  
    выдает такую ошибку http://soulthiefer.narod.ru/123.JPG

    Поскольку у меня утилита Bilarm.exe не работает, то поиграй с нею сам:
    1. запусти консоль (Пуск -> выполнить ... -> пишешь cmd -> ОК)
    2. перейди в папку где лежит Bilarm.exe (пишешь cd "полный путь к папке где лежит Bilarm "
    3. Запускай ее с разными параметрами, т.е. пишешь Bilarm.exe /set 14:21:52:32 , например (где 14 -номер дня, 21-час включения, 52- минута включения, 32- секунда включения). Если ошибка не вылазит, значит ты правильно ее запустил. ТОгда выключай комп и жди. Если комп включился в указаное время, все ОК.
    Если ошибка вылазит, меняешь синтаксис параметров так и сяк, пока не заработает.  Удачную команду пишешь здесь в точности.
     
    PS Кстати, ты когда копировал с форума, концевые пробелы удалил?

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 13:09 14-11-2007
    01MDM



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

    Цитата:
    в справке вижу такое, то есть имхо ошибка в параметре сравнения есть
     
        EQL - равно  

     
    открываю ntcmds.chm и там вижу EQU

    Код:
     
    C:\>set a=123
     
    C:\>set b=123
     
    C:\>if %a% equ %b% echo равно
    равно
     
    C:\>if %a% eql %b% echo равно
    Непредвиденное появление: eql.
     
    C:\>
     

     

    Цитата:
    использовать %USERPROFILE%\..\

    Это только для текущего профиля
     
    Cyril Konst
    Ну я тогда даже не знаю. Может ты его сохранил в кодировке 1251, надо в 866.  Пересохрани в cp866
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:38 14-11-2007 | Исправлено: 01MDM, 14:05 14-11-2007
    soulthiefer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    спасибо большое щас буду пробовать !
    концевые пробелы удалил - это что простите ?

    Всего записей: 40 | Зарегистр. 11-07-2006 | Отправлено: 13:44 14-11-2007
    acue

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможно ли сделать ввод переменной с клавиатуры:
     
    set /p myvar=
     
    так, чтобы во время ввода символов пользователем они не отображались на экране?
    (например, для ввода пароля и последующей его передачи в качестве параметра запускаемой проге)

    Всего записей: 188 | Зарегистр. 02-12-2002 | Отправлено: 14:18 14-11-2007
    Cyril Konst



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

    Цитата:
    Может ты его сохранил в кодировке 1251, надо в 866.  Пересохрани в cp866

    Кстати, да Хотя я пробовал добавлять команду chcp 1251.
    Тут ещё один подводный камень обнаружился... Дело в том, что логины юзеров и названия их каталогов-профилей не всегда совпадают... И в этом случае ничего не копируется ("Мои документы" не найдены).

    Всего записей: 634 | Зарегистр. 12-08-2003 | Отправлено: 14:21 14-11-2007 | Исправлено: Cyril Konst, 14:25 14-11-2007
    soulthiefer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    пытаюсь запустить через коммандную .. bilarm.exe /set 0:12:12:12 пишет что не выбрана материнская плата !!! а как же ее выбрать то ?!?!?(

    Всего записей: 40 | Зарегистр. 11-07-2006 | Отправлено: 14:28 14-11-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