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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а существует какой-то штатный способ определить - какой юзер сейчас залогинен на \\workstation1 ?

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 19:24 06-12-2010
    res2001



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

    Цитата:
    а существует какой-то штатный способ определить - какой юзер сейчас залогинен на \\workstation1 ?

     
    Нагуглил вариант на vbs:

    Код:
    strComputer = "workstation1"
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colComputer = objWMIService.ExecQuery _
    ("Select * from Win32_ComputerSystem")
     
    For Each objComputer in colComputer
    Wscript.Echo objComputer.UserName
    Next

    но он у меня не заработал.
     
    Есть утилита PsLoggedon.exe из состава утилит от sysinternals.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:17 07-12-2010
    wolf0425



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

    Цитата:
    Есть утилита PsLoggedon.exe из состава утилит от sysinternals.
    эта приблуда как-то совсем не то показывает, причем выполняется только локально...
     
    ладно, подумав я решил, что парсинга вывода tasklist для моих целей будет достаточно...

    Код:
    1>tempfile set "user=unknown user"
    tasklist /s \\%~1 /v /fi "imagename eq explorer.exe" | sed -r -n "/^explorer.exe/ s/^.{88}([^ ]*).*$/\1/igp" >tempfile
    set /p user=<tempfile

     
    теперь надо что-то придумать чтоб на принтерах не вешаться

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 15:11 07-12-2010 | Исправлено: wolf0425, 16:04 07-12-2010
    res2001



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

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

    Что она у тебя показывает?
    Я пол сети своей просканировал - показывает то что надо, правда не серверах почему-то не показывает, но на серверах терминальные юзера.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 16:08 07-12-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    никто не сталкивался с проблемой expand?
    суть в том, что на ХР при извлечении она не понимает русские буквы в пути назначения

    Код:
    expand My.cab -f:1.exe "Моя папка"

    но это только на Хрюше, на Win7 все норм и с латиницей и с кириллицей. Причем конструкция

    Код:
    expand -r My.ex_
    отрабатывает нормально с кириллицей
    Баг экспанда или что-то не так делаю?

    Всего записей: 1516 | Зарегистр. 19-04-2010 | Отправлено: 00:43 08-12-2010 | Исправлено: Free_Soft, 00:44 08-12-2010
    res2001



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

    Цитата:
    что на ХР при извлечении она не понимает русские буквы в пути назначения  

    Аналогично. Да и вообще эта тулза кривая какая-то, я использую 7z для распаковки кабов.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 08:46 08-12-2010
    Zhidkoff



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго дня. Помогите решить задачку.  
     
    Некая программа выгружает каждую ночь файл-реплику, помещает ее в определенную папку. После чего сформированный файл требуется скопировать по сети в шару, по завершении копирования файл удалить. С одной стороны все очень легко и просто, изначально я написал простейший батник копирования, но есть одно неприятное обстоятельство, а именно - нестабильная связь, которая периодически падает, в связи с этим файл соответственно не копируется и приходится потом ручками заходить и забирать его. Решением вижу robocopy, но что-то я совсем не могу в ней разобраться, не получается применить этот метод к моей ситуации. Кому не сложно, поспособствуйте, буду очень признателен .

    Всего записей: 4 | Зарегистр. 16-09-2006 | Отправлено: 09:11 08-12-2010
    Free_Soft



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

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



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

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

    Надолго падает? У команды "Copy" есть ключ /Z для сетевого копирования, по идее если связь обрывается, затем восстанавливается, то "Copy /Z" должно восстановить копирование. Правда, сам не проверял .

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



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

    Цитата:
    Надолго падает?

     
    Бывает по пол дня валяется

    Всего записей: 4 | Зарегистр. 16-09-2006 | Отправлено: 11:52 08-12-2010 | Исправлено: Zhidkoff, 11:52 08-12-2010
    BVV63



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

    Код:
    :0
    Copy /Y /Z ... || GoTo :0

    Если копирование не пройдёт, начнётся заново.

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



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BVV63
     
    Хм, нужно попробовать, спасибо.

    Всего записей: 4 | Зарегистр. 16-09-2006 | Отправлено: 12:07 08-12-2010
    Accessor



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zhidkoff
    может, всё-таки, целесообразнее лить по ftp-протоколу ? Есть связь - льём с докачками. Нету связи - ждём её появления.

    Всего записей: 2861 | Зарегистр. 31-10-2003 | Отправлено: 13:11 08-12-2010
    Zhidkoff



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Accessor
     
    Как это, как это?

    Всего записей: 4 | Зарегистр. 16-09-2006 | Отправлено: 13:24 08-12-2010
    Joo1z



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Psloggedon прекрасно работает и на удаленных машинах, хотя иногда очень тормозит. Для себя писал такой скрипт:
     

    Код:
    @echo off
    setlocal
    set pc=%1
    if /i "%pc%"=="" set pc=%computername%
    if "%pc:~0,2%"=="\\" set pc=%pc:~2%
    Ping -n 1 %pc% >Nul
    If ErrorLevel 1 (
    ECHO Љ®¬ЇмовҐа %pc% -Ґ ¤®бвгЇҐ- Ї® бҐвЁ.
    ping -n 2 127.0.0.1 >Nul
    goto :EOF
    )
    for /f "tokens=3,*" %%t in ('reg query "\\%pc%\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentVersion ^2^>nul ^| findstr 6.1') do GOTO WIN7
    set dpath=Software\Microsoft\Windows\CurrentVersion\Explorer
    for /f "tokens=*" %%a in ('reg query \\%pc%\HKU ^2^>nul^| findstr "HKEY_USERS\S-1-5-21" ^| findstr Classes') do set rpath=%%a\%dpath%
    for /f "tokens=5,*" %%l in ('reg query \\%pc%\%rpath:_Classes=% /v "Logon User Name" ^2^>nul') do (
    rem echo %%l    -    %pc%>>whologon.txt
    echo %%l    -    %pc%
    )
    GOTO :EOF
    :WIN7
    for /f "tokens=*" %%a in ('reg query \\%pc%\HKU ^2^>nul^| findstr "HKEY_USERS\S-1-5-21" ^| findstr Classes') do set rpath=%%a\Volatile Environment
    for /f "tokens=3,*" %%l in ('reg query "\\%pc%\%rpath:_Classes=%" /v UserName ^2^>nul') do (
    rem echo %%l    -    %pc%>>whologon.txt
    echo %%l    -    %pc%
    )
     

    Не всегда, правда, корректно отрабатывает.
     
    Соответственно для сканирования всей сети юзал строку:

    Код:
    for /f %a in ('net view ^| findstr \\') do скриптвыше.cmd %a

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 14:43 08-12-2010 | Исправлено: Joo1z, 14:54 08-12-2010
    wolf0425



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

    Цитата:
    wolf0425
    Psloggedon прекрасно работает и на удаленных машинах, хотя иногда очень тормозит.  

    на удаленных работает, разобрался, а что странно она иногда пишет - осталось.

    Код:
    D:\soft\SysinternalsSuite>PsLoggedon.exe \\192.168.х.ххх
     
    PsLoggedon v1.34 - See who's logged on
    Copyright (C) 2000-2010 Mark Russinovich
    Sysinternals - www.sysinternals.com
     
    Users logged on locally:
         <unknown time>             xx-16\xxxx
         <unknown time>             xx-16\?????????????
         <unknown time>             xxxxx\x.xxxxxxxx
         <unknown time>             xxxxx\xxxxx.xxxxxxx
         <unknown time>             xxxxx\xxxx.xxxxxxx
         <unknown time>             xxxxx\xxxxx.xxxxxxxx
         <unknown time>             xxxxx\xxxx.xxxxxxxxxx
         08.12.2010 11:33:55        xxxxx\xxxx.xxxxxxxx
         <unknown time>             xxxxx\x.xxxxxx
     
    Users logged on via resource shaxxx:
         08.12.2010 14:55:12        xxxxx\x.xxxxxx

    вот только что запустил (буковками х заменены буквы в юзерах/домене, ибо нефиг)
    такое парсить конечно тоже можно, но tasklist парсить не сложнее...
     
    особенно эротично смотрится строка из 13 знаков "?"
    я конечно догадываюсь что это хотели написать Администратор, но почему-то не смогли - но для прекрасно работающей программы это как-то не симпатично...
     
    а в тривиальных случаях - да, из пользователей показывает просто одну строку (где время) - создает видимость прекрасной работы
     
    Добавлено:

    Цитата:
    Соответственно для сканирования всей сети юзал строку:  
    мне только кажется или у твоего скрипта - тоже некоторые проблемы (тормоза), когда ему подсовывают просканировать ip принтерa?

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 15:08 08-12-2010 | Исправлено: wolf0425, 15:30 08-12-2010
    Joo1z



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    А зачем ему принтер подсовывать? Конечно будет тормозить, т.к. reg query будет ждать ответа. Плюс я обычно работаю с сетевыми именами, чего принтер лишен.
     
    Ну или чтобы скрипт не отвлекался на всякие принтеры делать проверку nslookup %ip% | findstr Name:

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 15:33 08-12-2010 | Исправлено: Joo1z, 15:47 08-12-2010
    Accessor



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zhidkoff
    Цитата:
    Как это, как это?
    на одной стороне ставится ftp-сервер. Лидером, я считаю, Gene6 FTP Server. А на второй стороне с помощью штатного ftp.exe этот файл скачивается пакетным файлом. Правда, не уверен умеет ли штатный ftp.exe делать докачку. Если нет, то тогда есть ещё консольные утилиты wget и ncftp. Кто-нибудь из них точно умеет докачивать.
    А вообще, я бы сделал связку Gene6 с одной стороны и ReGet с другой стороны. Т.е. вообще без пакетных файлов. На отдающей машине работает Гена. А на принимающей машине Регет со своим встроенным планировщиком. Регет может быть запущен как круглосуточно, так и запускаться в опредленное время и стартовать закачку.

    Всего записей: 2861 | Зарегистр. 31-10-2003 | Отправлено: 16:01 08-12-2010
    slech



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

    Цитата:
     
    set n=2
    set test%n%=qwerty
    echo %test%n%%
     

    у меня далее по тексту очень много использований этого самого test2 и я хотел бы его объявить единажды, а по необходимости изменять лишь значение n.
    можно ли так сделать ?

    Всего записей: 4890 | Зарегистр. 10-11-2004 | Отправлено: 16:47 08-12-2010
    res2001



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

    Код:
    SetLocal EnableDelayedExpansion
    set n=2
    set test%n%=qwerty
    echo !test%n%!

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 17:14 08-12-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