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

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

Автор: jek1976
Дата сообщения: 01.07.2010 16:29
us0r
Нет, ты меня, видимо, не понял до конца.

Зачем нам что-то синхронизировать? Нам нужно только проверить, была ли до нас сделана синхронизация профиля или не была сделана!
Автор: us0r
Дата сообщения: 01.07.2010 16:34
Обычно логика работы синхронизатора такова, что если что- то синхронизировано, то синхронизатор и не дёргается. Если нет- тогда синхронизировать (соответственно)...
Автор: VV2006
Дата сообщения: 01.07.2010 17:01
us0r

Цитата:
Что такое drop.exe?
Drop My Rights (c) M$
Вариант drop.exe opera.exe -U у меня всегда работал - с него и начинал. Но, увы, при запуска из самораспака не канает: Error initializing Opera: module 10
Автор: Engraf
Дата сообщения: 01.07.2010 17:45
Вроде бы я уже неплохо знаю cmd.exe. Но вот этот пример отсюда ну никак не разберу. Проведите ликбез если не жалко

Код: Displaying the first X lines
This example prints one, two and three.

@echo off & setlocal ENABLEEXTENSIONS
set "lines=3"
set i=-1
set "ok="
for /f "delims=" %%a in ('more ^< numbers.txt') do (
set/a i+=1 & for /f %%z in ('echo/%%i%%') do (
if "%%z"=="%lines%" set ok=1
)
if not defined ok echo/%%a
)
Автор: wolf0425
Дата сообщения: 01.07.2010 18:13
Engraf а какие непонятки с set ? чтение set /? не помогло?
установить одну переменную в значение три и разопределить другую переменную если она случайно была определена ранее.
кавычки - чтоб со случайно затесывающимися в конец строк пробелами путаницы не было.

more ^< numbers.txt
в чем тут непонятнка? это more < numbers.txt с заэкранированной для for скобкой.
чем лучше чем type numbers.txt в данном варианте - не знаю, но может тот numbers.txt - уникодный...
выход этой печати файла перехватывается циклом for /f "delims=" %%a

set /a i += 1
увеличить значение переменной i на единичку, читаем set /?

'echo/%%i%%'
это опять специфика исполняемой команды в for и порядка парсинга строк.
удвоение % нужно чтоб переменная %i% НЕ была заменена на значение в момент парсинга команды for /f "delims=" %%a in. с такими удвоенными процентами - в тот момент команда вложенного цикла станет ('echo/%i%') и %i% заменится на значение счетчика только в тот момент когда вызовется выполнение цикла.
причем символ / - в такой позиции строки не печатается, но его наличие в той позиции не-пробела приводит к печати пустрой строки в случае пустого значения %i%, тут такого не бывает - просто у автора правильная привычка, я тоже стараюсь писать echo.%var% даже если та var определяется строкой выше (не говоря о более неопределенных случаях)

Добавлено:
в целом батник делает:
на каждую непустую строку numbers.txt цикл производит:
    инкремент %i%
    после чего извращенным вложенным циклом делается сравнение,
        при достижении %i% значения 3 (т.е. на 4й строке numbers.txt) устанавливается переменная ок.
    последняя строка - печатает тукущую строку numbers.txt если ок не определена,
т.е. от всего numbers.txt цикл печатает три первых строки, что и обещали.

в общем и целом - пример как можно извратиться но не нужно делать

Код: @echo off
setlocal enabledelayedexpansion
set lines=3
set i=0
for /f "delims=" %%a in ('more ^< numbers.txt ') do (
    set /a i += 1
if !i! leq %lines% echo.%%a
)
Автор: jek1976
Дата сообщения: 01.07.2010 19:25

Цитата:
Обычно логика работы синхронизатора такова, что если что- то синхронизировано, то синхронизатор и не дёргается. Если нет- тогда синхронизировать (соответственно)...

Во-во! А как синхронизатор это определяет???
Автор: us0r
Дата сообщения: 01.07.2010 19:57
Метки времени, размер файла, хэш файла (в запущеном случае)...
Можно поискать консольную утилиту расчёта тогоже CRC файла и при несовпадении- обновлять... что логично...
drop.exe- дефолтная прога в XP?
VV2006
Скорее всего виноват сам drop.exe.
Хотя ковырни opera_prefs.ini в папке с оперой и поставь MultiUser=0- может помочь...
Автор: VV2006
Дата сообщения: 01.07.2010 20:29
us0r, да нет же, с двумя батниками, один из которых запускает другого, Опера работает нормально и так же нормально удаляется по завершению работы Оперы и её каталог в темпе.
Единственное неудобство - вручную закрывать окно первого батника (его закрытие автоматически закрывает и второй). Вот на всякий случай sfx-конфиг Opera.txt:

Код: п>ї;!@Install@!UTF-8!
InstallPath="%TEMP%\\Opera"
OverwriteMode="1"
RunProgram="hidcon:0.CMD"
GUIMode="2"
Delete="%TEMP%\\Opera"
;!@InstallEnd@!
Автор: jek1976
Дата сообщения: 01.07.2010 22:55

Цитата:
Метки времени, размер файла, хэш файла (в запущеном случае)...

СТОП! Чтобы сравнить метки времени у файлов в профиле, надо, как минимум, прочитать у всех этих файлов эти временные метки! Это сколько же времени у винды будет занимать такая проверка, если просматриваться будут все файлы из профиля!?
Логичнее проверять одну специальную метку в локальном профиле и сравнивать ее с аналогичной меткой в перемещаемом профиле на сервере: если они совпадают, то синхронизация не нужна, и наоборот...
Автор: bomzzz
Дата сообщения: 01.07.2010 23:08
люди ну как же сделать включалку отключалку для видимости зарегистрированных расширений. меню-обновить не помогаит, F5 не помогаит - только или штатно или через контекстное меню эксплорера

вообще наверно окну эксплорера надо послать некую команду
Автор: BVV63
Дата сообщения: 02.07.2010 06:32
Что-то никак не могу придумать универсальный способ, как в батнике временно отключить работу RDP, дабы пользователи во время исполнения батника не цеплялись к серверу. Самый естественный способ, остановить службу "Terminal Services", не прокатывает: служба останавливаться не желает. На крайний случай - вообще отключить работу локальной сети (понятно, без перезагрузки). Может, кто подкинет идею?

Добавлено:
Хотя нет, локальную сеть трогать нельзя. Только RDP.
Автор: res2001
Дата сообщения: 02.07.2010 07:38
BVV63
можно попробовать на встроеном виндовом фаерволе заблокировать порт RDP (TCP 3389).
Только как это сделать из батника - не знаю
Наверняка фаервол где-то в реестре хранит свои настройки. Значит править реестр и дать фаеру команду обновить конфиг.
Автор: bomzzz
Дата сообщения: 02.07.2010 07:43
барндмауер тута живет.

Цитата:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List]
"%windir%\\Network Diagnostic\\xpnetdiag.exe"="%windir%\\Network Diagnostic\\xpnetdiag.exe:*:Enabled:@xpsp3res.dll,-20000"
"%windir%\\system32\\sessmgr.exe"="%windir%\\system32\\sessmgr.exe:*:enabled:@xpsp2res.dll,-22019"
"C:\\Program Files\\FlashFXP\\FlashFXP.exe"="C:\\Program Files\\FlashFXP\\FlashFXP.exe:*:Enabled:FlashFXP v3"


Автор: BVV63
Дата сообщения: 02.07.2010 08:00
res2001
bomzzz
Спасибо, но не прокатывает. Отключён. Да и непонятно, как заставить брандмауэр обновить текущие установки, взяв новые из реестра.
Пытаюсь сваять скрипт, который опрашивал бы группу "Remote Desktop Users", используя счётчик сохранял бы членов группы в переменных, и удалял бы их из группы. А впоследствие из переменных при помощи счётчика восстановил бы. Геморно, конечно...
Можно, конечно, и в файл сохранять, тогда без счётчика можно обойтись. Но не люблю как-то использовать временные файлы, предпочитаю (если есть возможность) переменные.
Автор: wolf0425
Дата сообщения: 02.07.2010 09:46

Цитата:
Пытаюсь сваять скрипт, который опрашивал бы группу "Remote Desktop Users", используя счётчик сохранял бы членов группы в переменных, и удалял бы их из группы. А впоследствие из переменных при помощи счётчика восстановил бы. Геморно, конечно...

а чего геморного то? счетчик нужен только при создании списка
net...чего-тотам') do (
    set /a i+=1
    set "_duser_!i!=%%a"
    net localgroup "remote desktop users" %%a /delete
)
a при восстановлении просто 'set _duser_' в фор и вытаскиваешь все имена, загоняешь обратно в группу.
Автор: BVV63
Дата сообщения: 02.07.2010 10:29
wolf0425
Ну, в приведённом Вами примере счётчик наверное совсем не нужен. Очевидно, я его и возьму на вооружение.
Я пытался сделать так:


Код: Set RemoteUsersCounter=0
SetLocal EnableDelayedExpansion
For /F "Tokens=* UseBackQ" %%A In (`Net LocalGroup "Remote Desktop Users" ^| Find /I "\"`) Do (
    Set /A RemoteUsersCounter+=1
echo !RemoteUsersCounter!
    Set RemoteUser_%%A=%%A
пробовал также другой вариант
    Set RemoteUser_!RemoteUsersCounter!=%%A
echo !RemoteUser_RemoteUsersCounter!
    )
EndLocal
Автор: res2001
Дата сообщения: 02.07.2010 11:29
BVV63
Без setlocal будет так:

Код: net...чего-тотам') do (
call set "_duser_=%%_duser_%% %%a"
net localgroup "remote desktop users" %%a /delete
)
Автор: BVV63
Дата сообщения: 02.07.2010 11:42
res2001
Спасибо, я уже сделал:

Код: For /F "Tokens=* UseBackQ" %%A In (`Net LocalGroup "Remote Desktop Users" ^| Find.Exe /I "\"`
    ) Do (
    Set RemoteUser_%%A=%%A
    Net LocalGroup "Remote Desktop Users" "%%A" /Delete
    )
Автор: res2001
Дата сообщения: 02.07.2010 11:53
BVV63
Зачем плодить переменные?

Цитата:
Set RemoteUser_%%A=%%A

посмотри мой пример, там только одна переменная, куда складываются все имена пользователей.
Автор: us0r
Дата сообщения: 02.07.2010 12:15
jek1976
Ну... Кагбэ в зависимости от колва файла... Если файла over 9000 то может секунду- другую и подумает... Но для примера скорости обработки напиши в консоли dir - и всё увидишь сам...
А спецметки в папке- это как? Метку времени самой папки- можно попробовать... Но тебе нужны конкретные файлы, что бы не гонять лишний траффик... Вобщем можно сделать просто и быстро (нужное подчеркнуть).
Автор: BVV63
Дата сообщения: 02.07.2010 12:19
res2001

Цитата:
Зачем плодить переменные?


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

Резонно. А у переменных какое ограничение на длину, точно влезут все пользователи в одну?
Автор: res2001
Дата сообщения: 02.07.2010 13:16
BVV63
Ограничение есть, где-то в хелпе встречал, по моему, 8 Кб. Сейчас не могу найти.
Нюансы в таком варианте будут только если у тебя имена пользователей с пробелами, типа "Вася Пупкин", тогда надо будет поправить set, вставить разделитель не пробел, ";" скажем и во втором форе его прописать.
Автор: boy999
Дата сообщения: 02.07.2010 14:09
mugil_cephalus


Цитата:
hstart.exe положи в корень и вот код батника autorun.inf , в котором пропиши запуск батника vbs.bat , который запустит твой vbscript
[autorun]
open=hstart /NOCONSOLE \vbs.bat
 
vbs.bat ( положи тоже в корень )

Код:
cscript //nologo \1.vbs




Всё так сделал, запускаю hstart, а он:




На флэшке:

mpr\
vbs.bat
autorun.inf
1.vbs
hstart.exe



Ммм!?
Автор: res2001
Дата сообщения: 02.07.2010 14:46
boy999
наверное в авторане нужно эту строчку так сделать:

Цитата:
open=hstart /NOCONSOLE vbs.bat



Добавлено:
All
Народ! У меня сегодня после каждого нажатия на кнопку отправить выдается страница с ошибкой, но сообщение при этом отправляется. Это у всех так?


Добавлено:
Кропал тут батник для собственных нужд. Было в нем 2 вложенных цикла, во втором надо было разделить первую итерацию и остальные. Получилась такая конструкция

Код: for %%a in (..) do (
set \a "count=0"
for %%b in (..) do if !count! eql 0 (set /a "count+=1 & echo 1) else (echo 2)
)
Автор: boy999
Дата сообщения: 02.07.2010 15:37

Цитата:
выдается страница с ошибкой, но сообщение при этом отправляется. Это у всех так?
 


АГА! глючит, сцуко.


Добавлено:

Цитата:
open=hstart /NOCONSOLE vbs.bat  


Всё равно.....втыкаю флэшку - ничего не происходит((.

Ручной запуск батника или скрипта запускает MBR, но не в скрытом виде.

Автор: jek1976
Дата сообщения: 02.07.2010 17:21
us0r
Цитата:
Вобщем можно сделать просто и быстро (нужное подчеркнуть).

Давай "просто".
Автор: wolf0425
Дата сообщения: 02.07.2010 17:27
res2001
Цитата:
for %%a in (..) do (
set \a "count=0"
for %%b in (..) do if !count! eql 0 (set /a "count+=1 & echo 1) else (echo 2)
)
В такой конструкции все время выдается ошибка о неожиданном появлении eql.
Заменил условие на if !count! lss 1 - сразу все заработало.
так и должно было ругаться. чего ты хотел, когда eql вписывал - чтоб на == проверилось? так это пишется не EQL а EQU (переводчику русского хэлпа можешь персональный привет послать, авось икнет и на лестнице запнется)
Автор: res2001
Дата сообщения: 02.07.2010 18:19
wolf0425

Цитата:
так это пишется не EQL а EQU (переводчику русского хэлпа можешь персональный привет послать, авось икнет и на лестнице запнется)

Блин, вот уроды, а я пол часа убил, все ошибку у себя искал. Исправлю на equ. Спасибо за подсказку.
Почему то раньше не пользовался сравнением на равенство.

Добавлено:
boy999

Цитата:
Всё равно.....втыкаю флэшку - ничего не происходит

Видимо в виндах автозапуск с флэшки выключен.
Автор: Engraf
Дата сообщения: 02.07.2010 18:28
Подскажите пожалуйста, где загвоздка?
Почему вызов call :PROC происходит 2 раза с теми же параметрами (каждая строка из файла выводится дважды)?

Код: set Num=50
for /L %%i in (1,1,%Num%) do (
for /F "usebackq tokens=1,* delims=:" %%A in (`findstr /B %%i: file.txt`) do (
call :PROC "%%B" temp2.txt
)
)
goto :EOF

:PROC
echo %1
Автор: wolf0425
Дата сообщения: 02.07.2010 19:39

Цитата:
Почему вызов call :PROC происходит 2 раза с теми же параметрами (каждая строка из файла выводится дважды)?
а у меня - единожды. точно ничего не перепутал в условиях?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


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