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

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

    Цитата:
     
    Дело в том, что логины юзеров и названия их каталогов-профилей не всегда совпадают...
     


    Код:
     
    @echo off
    for /f "tokens=*" %%i in ('dir /b /a:d "%HOMEDRIVE%\DOCUMENTS AND SETTINGS"') do (
        set "user=%%i"
        call:next
    )
     
    7z a -t7z docs.7z arch\
    goto:eof
     
    :next    
    if "%user%" equ "Администратор" goto:eof  
    if "%user%" equ "NetworkService" goto:eof  
    if "%user%" equ "All Users" goto:eof  
    if "%user%" equ "Default User" goto:eof  
    if "%user%" equ "LocalService" goto:eof
    xcopy /s /i "%HOMEDRIVE%\Documents and Settings\%user%\Мои Документы" "arch\%user%"
     


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



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

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

    Это значит, запусти Bilarm просто, без параметров, там пройдись по настройкам, найди где выставляются материнки и ыбери в том списке свою, если она там есть. Моей нет, например

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cyril Konst
    saveuserdocs.cmd
    Код:
    @echo off
    chcp 1251>nul
    for /f "delims=" %%a in ('dir/b/a:d "%userprofile%\.."') do if exist "%userprofile%\..\%%a\Мои документы" xcopy/y/e/v/c/i/h/r/k/g "%userprofile%\..\%%a\Мои документы" "docs\%%a\Мои документы\"
    if exist "docs\Администратор" rd/s/q "docs\Администратор"
    set arcname=documents.7z
    if exist %arcname% del/q %arcname%
    7z u -r %arcname% docs
    rd/s/q docs

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 05:29 15-11-2007 | Исправлено: Nagual, 13:04 15-11-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    вот еще один вариант
    saveuserdocs.cmd
    Код:
    @echo off
    chcp 1251>nul
    for /f "tokens=2 delims=\ " %%a in ('wmic useraccount list status^|findstr/i true') do if exist "%userprofile%\..\%%a\Мои документы" xcopy/y/e/v/c/i/h/r/k/g "%userprofile%\..\%%a\Мои документы" "docs\%%a\Мои документы\"
     
    set arcname=documents.7z
    if exist %arcname% del/q %arcname%
    cd/d docs
    7z a -r ..\%arcname% .
    :: rd/s/q docs

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    Первый скрипт работает, спасибо
    А второй  начинает весь профиль копировать...

    Всего записей: 634 | Зарегистр. 12-08-2003 | Отправлено: 09:16 15-11-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cyril Konst
    возможные ошибки:
    1. если все папки Мои документы пустые, то сценарий работает некорректно
    вероятность этого очень мала и сомнительна, учитывая, что у тебя много юзеров, поэтому проверку смысла делать нет
    2. 7z должен лежать в %path%
    если нет, что пиши полный путь к нему
    если 7z лежит рядом со сценарием и не лежит в %path%, то исправь предпоследнюю строку на ..\7z a -r ..\%arcname% .
    3. также проверь кодировку сценария, оба сценария написаны для кодировки windows-1251 (cp1251)
    4. также проверь версию 7z
    в более старых версиях для работы с кодировкой cp1251 необходимо добавлять параметр -scswin, то есть команда будет такой
    7z a -r -scswin ..\%arcname% .
    5. также проверь концевые пробелы, есть вероятность, что из-за них код может работать неправильно
    достоинства второго сценария:
    он копирует непосредственно папки "Мои документы" пользователей, то есть в нем отсуствует надобность в определении и удалении папок "Мои документы", не относящихся к категории пользователей
    код тестировался на win2k3 и winxpsp2
    работает корректно под аккаунтом администратора
     
    Добавлено:
    если имя компьютера содержит пробел(ы), то необходимо немного переписать сценарий

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
     
    Попробовал Ваш saveuserdocs.cmd в обоих вариантах, точнее только часть их.
     
    в первой версии
    Цитата:
    ('dir/b/a;d "%userprofile%\..\"')
    работает только при наличии двоеточия, вместо точки с запятой, если запускать из под FAR-а, то
    Цитата:
    chcp 1251>nul  
    надо убрать, во всяком случае у меня так работает.
    Строки

    Цитата:
    if exist "docs\NetworkService" rd/s/q "docs\NetworkService"  
    if exist "docs\All Users" rd/s/q "docs\All Users"  
    if exist "docs\Default User" rd/s/q "docs\Default User"  
    if exist "docs\LocalService" rd/s/q "docs\LocalService"  

    не нужны, в этих профилях нет папок "Мои документы"
     
    Второй вариант saveuserdocs.cmd у меня заработал, если то, что в скобках записать так:
    ('wmic useraccount list status ^| findstr/i OK')

    Всего записей: 82 | Зарегистр. 08-02-2005 | Отправлено: 10:49 15-11-2007
    Nagual



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

    Цитата:
    ('wmic useraccount list status ^| findstr/i OK')

    такая запись неверна, так как не будет удовлетворять требованиям поставленной задачи и под эту категорию попадет админимстративный аккаунт

    Цитата:
    работает только при наличии двоеточия

    да, конечно, не углядел при замене
    ессно тут должно быть двоеточие, исправлено
    при такой записи ('wmic useraccount list status ^| findstr/i TRUE') работает?
     
    Добавлено:
    ProbaRK
    да, ты прав, лишние строки удалены

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    Странная конструкция %userprofile%\..\
    echo выдает неправильное значение, а if не ошибается

    Код:
     
    @echo off
    for /f "tokens=*" %%i in ('dir /b /a:d "%userprofile%\..\"') do (
        echo "%userprofile%\..\%%i"
        if exist "%userprofile%\..\%%i\Мои Документы" echo %%i-exist && echo.
    )
     

     
    Мой последний вариант так и не пробовали?
     

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    ничего странного, это родительский каталог профиля текущего пользователя просто эту конструкцию надо тестить не командой echo, а примерно так
    cd/d "%userprofile%\.." &echo %cd%
     
     
    Добавлено:
    просто именно такая запись гарантирует, что ты получишь именно каталог документов и настроек, то есть путь к каталогу с профилями, даже если он будет переопределён каким либо образом

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:49 15-11-2007
    ProbaRK

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

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

    Вы же его в любом случае копируете и затем стираете (правда в первом скрипте)

    Цитата:
    if exist "docs\Администратор" rd/s/q "docs\Администратор"  

     
    а во втором скрипте, если не использовать findstr/i OK , то аккаунты одноранговых сетей, где PasswordExpires установлено в FALSE (Срок действия пароля не ограничен), скрипт не найдет ничего. Т.е. отбор строк надо выполнять по колонке Status.

    Всего записей: 82 | Зарегистр. 08-02-2005 | Отправлено: 14:35 15-11-2007
    01MDM



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

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

    Нет не гарантирует, твой профиль может быть на C:, а у Иванова на D:

    Код:
     
    reg query hklm\software\microsoft\windows\currentversion\explorer\docfolderpaths
     

    Вот это я думаю надежней
     
     
     
    Добавлено:
    Что-то вроде:

    Код:
     
    @echo off
    chcp 1251 >nul
    for /f "tokens=2 delims=:" %%i in ('reg query hklm\software\microsoft\windows\currentversion\explorer\docfolderpaths ^| find /i "reg_sz"') do (
        if exist "%homedrive%%%i" echo %homedrive%%%i
    )
    chcp 866 >nul
     

    Без проверки на ДИСК:

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:27 15-11-2007 | Исправлено: 01MDM, 19:02 15-11-2007
    ProbaRK

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

    Цитата:
    Код:  
    reg query hklm\software\microsoft\windows\currentversion\explorer\docfolderpaths  
     
     
    Вот это я думаю надежней  

     
    Интересно то, что на домашней машине был создан и впоследствии удален тестовый аккаунт штатными средствами ОС, а ключ в реестре и путь к уже не существующей папке C:\Documents and Settings\22\Мои документы - остались.
     
    Проверка на %homedrive% оказалась полезной.

    Всего записей: 82 | Зарегистр. 08-02-2005 | Отправлено: 01:04 16-11-2007 | Исправлено: ProbaRK, 01:16 16-11-2007
    Cyril Konst



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

    Всего записей: 634 | Зарегистр. 12-08-2003 | Отправлено: 09:00 16-11-2007
    Tipulatoid



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

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

    Если не rar не умеет сохранять на сетевой диск (я это не проверял), то просто после создания архива перемести его на сетевой диск командой move. т.е. убери строку exit из кода (кстати, зачем она нужна?) и вставь вместо нее
    Код:
     
    mkdir \\server\backup\%FOLDER%\
    move C:\backup\%FOLDER%\backup.rar \\server\backup\%FOLDER%\

    William Gates

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


    Код:
    @echo off
    set "file=temp.rtf"
    set "first_folder=c:\auto 3\delme223"
    set "second_folder=c:\auto 3\delme223\new"
     
    pushd "%first_folder%"
    for /f %%a in ('dir "%file%" /b /a:-d') do set old_size=%%~za
    start /b /wait "" "%file%"
    for /f %%a in ('dir "%file%" /b /a:-d') do set new_size=%%~za
    if /i not %old_size%==%new_size% move /y %file% "%second_folder%"
    popd
     

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 09:20 16-11-2007 | Исправлено: Tipulatoid, 09:33 16-11-2007
    FEvER



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как получить название папки с выполняемым скриптом (НЕ путь, именно название). Путь получаю с помощью %~dp0  а вот как из него вырезать только последнюю папку - хз

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



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

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



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

    Код:
     
    @echo off
    set "fp=%~dp0"
    set "fp=%fp:~0,-1%"
    call :extr "%fp%"
    goto :EOF
    :extr
    echo %~nx1  
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:46 17-11-2007
    FEvER



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM Выдает название файла, а мне нужно название папки
     
    Elroir спасибо работает!

    Всего записей: 39 | Зарегистр. 22-05-2006 | Отправлено: 13:47 17-11-2007 | Исправлено: FEvER, 13:48 17-11-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Ты поторопился

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:48 17-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