Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 7

Автор: wolf0425
Дата сообщения: 27.10.2009 01:45

Цитата:
Подскажите, как узнать имя текущего залогиненного пользователя на компе по сети?
Может быть можно как-нибудь просканировать папки в профилях \\comp01\c$\Documents and Settings\*.*, определить самый свежий ntuser.dat
для сетевого компа я не делал, делал похожее для локального.
Разобраться и поменять пути сам сможешь?

Код: setlocal enabledelayedexpansion
cd /d "C:\Documents and Settings\" && for /d %%i in (*) do (
    pushd "%%~i"
    for /f %%j in ('dir /b /ah ntuser.dat 2^>nul') do for /f "tokens=1-5 delims=.: " %%1 in ("%%~tj") do set "ntuser-%%3%%2%%1%%4%%5=%%~i"
    popd
)
for /f "tokens=3 delims=-=" %%a in ('set ntuser') do set "olduser=%%~a" && goto:selected
:selected
set olduser
Автор: slay1212
Дата сообщения: 27.10.2009 11:14
llanowar
Если уж утили Руссиновича используешь попробуй так:
psloggedon.exe -l \\comp | find "."
Выдает вот что
Connecting to Registry of \\comp...

Users logged on locally:
26.10.2009 10:28:39 domain\user
Ну а дальше фильтруешь вывод
Ну права админа должны на компе быть естественно.
Автор: llanowar
Дата сообщения: 27.10.2009 12:07
Спасибо, оба варианта супер!

Добавлено:
Итого, скрипт для поиска ключика от винрара на всех компьюетров в списке.
Если компьютер недоступен, то пишет в один список, если ключик есть, смотрит какой там сейчас работает пользователь, если ключика ент пишет в третий список. Потом формирует лог с подсчетами.

[more]@echo off
for /F %%i in (c:\result\ip.tmp) do Call :test_connection %%i
goto :makelog


:test_connection
@echo off
ping -n 2 -w 1000 %1
if errorlevel 1 (echo %1>> c:\result\lists_unav.txt) ELSE (Call :check_rarreg %1)
exit /b

:check_rarreg
if exist "\\%1\c$\program files\WinRAR\rarreg.key" (Call :rarreg_found %1) ELSE (Call :rarreg_nfound %1)
exit /b

:rarreg_found

REM echo \\%1\c$\program files\WinRAR\rarreg.key>> c:\result\listss.txt
echo %1>> c:\result\lists.txt
Call :check_user2 %1
exit /b

:rarreg_nfound
echo %1>> c:\result\lists_clear.txt
exit /b

:check_user2
psloggedon.exe -l \\%1 | find /I "RU\" >> c:\result\lists.txt
exit /b

:makelog
cd c:\result\
echo Computers with rarreg.key >> log.txt
type lists.txt >> log.txt
echo Computers with rarreg.key in RUZ900: >> log.txt
find /C "RUZ900WS" lists.txt >> log.txt
echo Computers with rarreg.key in RUA001: >> log.txt
find /C "RUA001WS" lists.txt >> log.txt
echo Computers with rarreg.key in RUA002: >> log.txt
find /C "RUA002WS" lists.txt >> log.txt
echo Computers with rarreg.key in RUA003: >> log.txt
find /C "RUA003WS" lists.txt >> log.txt
echo Computers without rarreg.key >> log.txt
type lists_clear.txt >> log.txt
echo Computers not in range >> log.txt
type lists_unav.txt >> log.txt
goto :eof

:eof [/more]

Добавлено:
Да, еще. При посике пользователей выводятся только доменные пользователи через find /I "RU\", тк. домен называется RU у меня.
Автор: Ortios
Дата сообщения: 27.10.2009 20:47
wolf0425
Спасибо, отличный код. Завтра попробую адаптировать к сети.
slay1212
Спасибо за подсказку, а то я тоже сначала ломился через psexec
Автор: tolyn77
Дата сообщения: 28.10.2009 14:50
01MDM
Ты приводил код
for /f "tokens=1,2 delims=. " %%i in ("%date%") do set "d=%%j_%%i"
выводилось почему дата и день недели
перебором подошло так
for /f "tokens=2,3 delims=. " %%i in ("%date%") do set "d=%%j_%%i"
не подскажешь в чем загвоздка?
Автор: slay1212
Дата сообщения: 28.10.2009 14:57
Вызывается батник из батника:
...
call par_.cmd setting.ini param2 || exit /b 1
echo para "%param2%" >> log.log

Но параметр 2 возвращается пустой

Вот что в батнике
par_cmd
SETLOCAL ENABLEDELAYEDEXPANSION
SETLOCAL ENABLEEXTENSIONS

....
rem paramss строка формируется
endlocal & set "%2=%paramss%"
echo !%2! >> log.log

Печатает новое значение %2
Можно вернуть новое значение параметра 2 из батника?
Вроде сделал как здесь написано ан дудки. Можно конечно строчку в файл запихать но хотелось через параметры
Автор: segreich
Дата сообщения: 28.10.2009 15:12
Если не сложно выручите текстом батника.
Задача: нужно из известной директории с кучей файлов перенести в другую директорию только один файл.

Пояснение для чего: есть директория с бэкапами и нужно их записать на диски (1 бэкап = 1 диск). Команда для записи дисков в командной строке есть. Нужен поочередный перенос файлов в дирректорию на которую работает команда для записи.

Если что-то подобное было, то буду рад получить посыл в нужном направлении.


Автор: 01MDM
Дата сообщения: 28.10.2009 16:51
tolyn77

Цитата:
не подскажешь в чем загвоздка?

Видимо просили дату и месяц. Поэтому и взял только нужные токены.

Код:
for /f "tokens=1-3 delims=." %%i in ("%date%") do (
echo day: %%i
echo month: %%j
echo year: %%k
)
Автор: segreich
Дата сообщения: 28.10.2009 17:29
01MDM
Спасибо за ответ.


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

Один файл переносится в папку для записи, потом запись этого файла, потом удаление этого файла, потом перенос следующего файла и т.д.

Как я понял мне после "echo Insert CD and press Enter" осталось вставить команду на запись?

Добавлено:
Попробовал, вроде все ок
Надпись Insert CD and press Enter оказалась не нужна, т.к. nerocmd сама предлагает вставить диск и выдвигает лоток, если стоит записанный диск или его там нет.
Еще раз, СПАСИБО!
Автор: king_stiven
Дата сообщения: 28.10.2009 18:10
Кто как думает, вот эта команда
copy /b "*.*" "OUT_*.*"
всегда будет склеивать согласно порядку имён файлов? Если не всегда прошу подсказать, вариант с set е=файл1+файл2... не прокатывает, имён слишком много и в них могут кракозябры быть
segreich
А может лучше никуда ничего не переносить. а указать nerocmd последовательно копировать файлы в указанной папке?
for %%i in ("dir1\*.*") do (
nerocmd "%%i" тут всякие ключи для записи
nerocmd открыть лоток
pause
nerocmd закрыть лоток
)
Автор: 01MDM
Дата сообщения: 28.10.2009 18:31
king_stiven
А если их приклеивать в цикле? Т.е за каждый цикл к результирующему файлу приклеивается новая часть? Что-нибудь на вроде:

Код:
@echo off
cd.>temp.ext
for %%i in (*.ext) do call:join "%%i"
ren temp.ext result.ext
goto:eof

:join
copy /b temp.ext + %1 result.ext
ren result.ext temp.ext
Автор: king_stiven
Дата сообщения: 28.10.2009 19:09
01MDM
Придётся так наверно, с переименованием, может прокатит с неформатными именами.

Добавлено:
команда
copy /b "*.*" "OUT_*.*"
Склеивает файлы согласно времени изменения файлов. Чем можно изменить время изменения файла?

Добавлено:
Вопрос отпал. nircmd.exe рулит как всегда
Автор: Ortios
Дата сообщения: 28.10.2009 21:08
wolf0425
Не понял в скрипте самого главного, как надо изменить код, чтобы вывести не самого старого (olduser), а самого нового юзера?
Автор: wolf0425
Дата сообщения: 28.10.2009 23:00

Цитата:
Не понял в скрипте самого главного, как надо изменить код, чтобы вывести не самого старого (olduser), а самого нового юзера?
что, я чего-то лишнее отрезал, когда выдирал?

о, точно, в оригинале у последнего цикла была инверсия:
for /f "tokens=3 delims=-=" %%a in ('set ntuser ^| sort /r') do
когда я хвост сокращал - и ее зачем-то сократил.

но можно просто "&& goto:selected" из конца этого цикла убрать - тогда цикл проскочит по всем именам до последнего, самого нового, его и запомнит. получится врядли медленнее. Это у меня там в do было еще проверок наворочено
Автор: Ortios
Дата сообщения: 28.10.2009 23:18
wolf0425
Уфф, спасибо, давно у меня такой паники не было.
Автор: mugil_cephalus
Дата сообщения: 29.10.2009 00:52
slay1212

Цитата:
Но параметр 2 возвращается пустой

может из-за того, что endlocal закрывает оба setlocal'a, в том числе, соответственно, и SETLOCAL ENABLEDELAYEDEXPANSION

Цитата:
endlocal & set "%2=%paramss%"
echo !%2! >> log.log

Автор: den06051979
Дата сообщения: 29.10.2009 06:59
Подскажите пожалуйста!
Мне нужно в bat скрипте проверить условие такого рода.
Bat скрипт будет запускаться при старте системы.
Если текущее время больше 8-00 утра и меньше 23-00 вечера то запускаем определённую программу!
Как это реализовать средствами bat?
Автор: GRom_V
Дата сообщения: 29.10.2009 07:24
Как можно создать пустой документ в формате ~.rtf через консоль?
Автор: 01MDM
Дата сообщения: 29.10.2009 08:33
den06051979

Код:
@echo off
setlocal

for /f %%i in ('time /t') do set "t=%%i"
if 1%t::=% gtr 10800 (
    if 1%t::=% lss 12300 echo 8:01-22:59
)
Автор: Maqentaer
Дата сообщения: 29.10.2009 08:36
den06051979
примерно так:

Код:
for /F "tokens=1-4 delims=:., " %%a in ('time /t') do (
    if %%a GEQ 8 (
        if %%a LSS 23 (
            start notepad.exe
        )
    )
)
Автор: slay1212
Дата сообщения: 29.10.2009 09:16
mugil_cephalus
Вариант без endlocal и любые другие - опробована куча комбинаций не помог.
Строка присваиваемая параметру - длинная строка параметров разделенная пробелами
Просто вызываемый батник разбирает/редактирует файл параметров имя=значение.
Хотел их все в одну строку запихать и вернуть параметром а не получилось. Ну сделаю через файл
Автор: segreich
Дата сообщения: 29.10.2009 09:25
king_stiven

Цитата:
А может лучше никуда ничего не переносить. а указать nerocmd последовательно копировать файлы в указанной папке?

Тоже вариант, спасибо за оптимизацию.
Автор: den06051979
Дата сообщения: 29.10.2009 09:40

Цитата:
for /F "tokens=1-4 delims=:., " %%a in ('time /t') do (
if %%a GEQ 8 (
if %%a LSS 23 (
start notepad.exe
)
)
)

А как мне регулировать время срабатывания?
Например с 8-00 утра и до 23:59 вечера?
Или какое либо другое?
Автор: Maqentaer
Дата сообщения: 29.10.2009 10:16

Код: for /F "tokens=1-4 delims=:., " %%a in ('time /t') do (
if %%a GEQ 8 (
if %%b GEQ 0 (
if %%a LEQ 23 (
if %%b LEQ 59 (
start notepad.exe
)
)
)
)
Автор: NIKZZZZ
Дата сообщения: 29.10.2009 10:30
GRom_V

Цитата:
Как можно создать пустой документ в формате ~.rtf через консоль?


Запустить WordPad (write.exe), далее с помощью nircmd послать в него коды завершения работы.

А более просто - создать пустой rtf файл и копировать его в нужное место с нужным именем.
Автор: den06051979
Дата сообщения: 29.10.2009 12:16

Цитата:
for /F "tokens=1-4 delims=:., " %%a in ('time /t') do (
if %%a GEQ 8 (
if %%b GEQ 0 (
if %%a LEQ 23 (
if %%b LEQ 59 (
start notepad.exe
)
)
)
)

Данный код не срабатывает на нужный диапазон!
Автор: Maqentaer
Дата сообщения: 29.10.2009 12:57
den06051979
прошу прощения, не проверил, глупая получилась ошибка :)

вот сделал новую версию, хотя получился довольно-таки большой код, зато универсальный :)

Код:
set begin=8:00
set end=23:59

for /f "tokens=1-4 delims=:., " %%a in ("%begin%") do set b_h=%%a&set b_m=%%b
if "%b_h:~0,-1%" == "0" set b_h=%b_h:~1,1%
if "%b_m:~0,-1%" == "0" set b_m=%b_m:~1,1%

for /f "tokens=1-4 delims=:., " %%a in ("%end%") do set e_h=%%a&set e_m=%%b
if "%e_h:~0,-1%" == "0" set e_h=%e_h:~1,1%
if "%e_m:~0,-1%" == "0" set e_m=%e_m:~1,1%

for /f "tokens=1-4 delims=:., " %%a in ('time /t') do set h=%%a&set m=%%b&set p=%%c
if "%h:~0,-1%" == "0" set h=%h:~1,1%
if "%m:~0,-1%" == "0" set m=%m:~1,1%
if /i "%p%" == "pm" if not %h% == 12 set /a h=%h%+12
if /i "%p%" == "am" if %h% == 12 set h=0

if %h% equ %b_h% if %m% geq %b_m% goto pass
if %h% equ %e_h% if %m% leq %e_m% goto pass
if %h% gtr %b_h% if %h% lss %e_h% goto pass

goto :eof

:pass
start notepad.exe
Автор: Babuas
Дата сообщения: 29.10.2009 14:42
Сорри если уже было, нет времени рыть столько страниц. Как реализовать перезагрузку Windows 7 одной кнопкой, а также организовать смену пользователя в Windows 7 по нажатию одной кнопки? заранее спасибо за помощь.
Автор: dscp50
Дата сообщения: 29.10.2009 15:40
Помогите с решением, пожалуйста.
Переодически рушится инет, пока по непонятным причинам... вот пока причины непонятны, требуется скриптец, который проверяет интернет-соединение на обмен (ping)... и если пинг не проходит, то хотелось что бы скриптец сам реконнектился к инету. (проблема, почему-то, решается именно так, после реконнекта пакеты проходят).
Никогда не страдал *.bat программированием, и, к сожалению, нет времени разбираться во всем. Надеюсь на Вашу помощь, товарищи. С меня - вознаграждение в виде пополнения баланса мобильного телефона.

схема, я думаю, понятна

1:repeat "ping" until "Превышен интервал ожидания для запроса."
then:
begin
close connection;
connect;
end;
go to 1.
Автор: mugil_cephalus
Дата сообщения: 29.10.2009 15:43
Babuas
а через ACPI и сочетания клавиш в win'de?
или батник с командой (в winxp - shutdown, в 7-ой - не знаю, посмотри help) , затем ярлык для него, затем hotkey для ярлыка

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.