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

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

Автор: BVV63
Дата сообщения: 01.07.2010 08:35
mugil_cephalus

Цитата:
выполни в батнике с net любые команды и errorlevel всегда будет один и тот же - 1 , как ты егои установил

? Так я же его устанавливал не до того, как вызвать Net, а лишь в случае ошибки.

Добавлено:
mugil_cephalus

Цитата:
в этом примере echo работает по результатам findstr

Т. е. при ошибке на findstr не подаётся ничего по STDOUT (текст ошибки идёт по STDERR), и та выдаёт ошибку? Что ж, возможно. Я такой возможности не учёл.
Автор: mugil_cephalus
Дата сообщения: 01.07.2010 08:42
BVV63
ну в случае ошибки на весь батник будет один и тот же %errorlevel% ...
тебе правильный совет дал res2001

Цитата:
1.Руками errorlevel устанавливать не стоит. Если уж так хочется заведи переменную с другим именем.

типа

Код: set "errlvl=1"
Автор: res2001
Дата сообщения: 01.07.2010 08:44
BVV63

Цитата:
Решил проверить:
Net Time /Domain:<домен> /Set /Yes | FindStr /R . || Echo Failure!
Когда подставлял несуществующий домен отрабатывало эхо, когда правильный - нет.

Понятно, почему отрабатывает - просто когда net time пишет все STDERR, то на вход find ничего не подается и она сама заканчивается с ошибкой, что и вызывает срабатывание echo failure. Это удачное стечение обстоятельств
А вот, например замени find на cd . и увидишь, что echo не срабатывает, в случае ошибки net time.

Добавлено:
что-то я стал долго сообщения писать уходит много времени на проверку
Автор: mugil_cephalus
Дата сообщения: 01.07.2010 08:49
BVV63


Цитата:
Т. е. при ошибке на findstr не подаётся ничего по STDOUT (текст ошибки идёт по STDERR),

временно убери из кода
Цитата:
|| Set ErrorLevel=1",

и на следующ. строке - echo.%errorlevel% (какой выдаст ? )
Автор: BVV63
Дата сообщения: 01.07.2010 08:50
mugil_cephalus
Я понял логику. Но я просто не использую %ErrorLevel% для самого батника, лишь для фрагментов. Сами процедуры "отсчитываются" перед материнским батником при помощи трёх переменных %Warnings%, %Errors% и %Failures%, тот их перемножает на коэффициенты и складывает, а затем "отсчитывается" уже передо мной. Так что %ErrorLevel% я использую чисто в локальных выражениях, посему могу позволить себе править его руками.
Автор: mugil_cephalus
Дата сообщения: 01.07.2010 08:53
res2001

Цитата:
что-то я стал долго сообщения писать уходит много времени на проверку

до мурманска дошло московское пекло ?...
Автор: BVV63
Дата сообщения: 01.07.2010 08:56
mugil_cephalus

Цитата:
и на следующ. строке - echo.%errorlevel% (какой выдаст ? )

Можно такой вопрос: зачем после "echo" стоит точка? Вначале я подумал, что это эквивалент двух вырахений: "echo." и "echo %errorlevel%", но что с точкой, что с пробелом вывод одинаков.
Или просто таков "стиль" ?
Автор: mugil_cephalus
Дата сообщения: 01.07.2010 09:01
BVV63

Цитата:
Но я просто не использую %ErrorLevel% для самого батника, лишь для фрагментов. Сами процедуры "отсчитываются" перед материнским батником при помощи трёх переменных %Warnings%, %Errors% и %Failures%, тот их перемножает на коэффициенты и складывает, а затем "отсчитывается" уже передо мной.

"вертикаль власти" ...
а если ошибешся, запутаешся, зачем усложнять систему?.. ; имхо, не рационально ; в математике проверяют : чем решение проще, тем "лучше" , правильнее ...

Добавлено:
BVV63

Цитата:
Можно такой вопрос:

чтоб на случай ошибки батнописца ( например отсутствует переменная ) не было бы так
F:\>echo
Режим вывода команд на экран (ECHO) включен.
Автор: BVV63
Дата сообщения: 01.07.2010 09:07
mugil_cephalus

Цитата:
а если ошибешся, запутаешся, зачем усложнять систему?.. ; имхо, не рационально ; в математике проверяют : чем решение проще, тем "лучше" , правильнее ...

Специфика работы скриптов. Они по ночам выполняются на серверах и в конце выполнения "должны решить", то ли произошедшие ошибки неважны, и логи подождут своего просмотра, то ли "поднимать тревогу" и оповещать админов (дабы когда те придут, то сразу б увидели).
Автор: mugil_cephalus
Дата сообщения: 01.07.2010 09:13
можно и так

Код: set var
echo\%var%
pause
Автор: res2001
Дата сообщения: 01.07.2010 09:56
mugil_cephalus

Цитата:
до мурманска дошло московское пекло ?...

фиг там, дождь у нас второй день не переставая, +10
Автор: BVV63
Дата сообщения: 01.07.2010 10:52
Подскажите, пожалуйста, возможно ли осуществить перенаправление вывода программы напрямую в переменную? Нигде никаких данных не нашёл, мои эксперименты успехом не увенчались, но решил на всякий случай спросить у знатоков.
Автор: res2001
Дата сообщения: 01.07.2010 11:14
BVV63

Цитата:
Подскажите, пожалуйста, возможно ли осуществить перенаправление вывода программы напрямую в переменную? Нигде никаких данных не нашёл, мои эксперименты успехом не увенчались, но решил на всякий случай спросить у знатоков.

for /f "tokens=*" %%a in ('app.exe') do echo %%a
В %%a будет вывод команды, обрабатываться будет каждая строчка вывода отдельно.

Автор: us0r
Дата сообщения: 01.07.2010 13:37
anton1209
Перед выбором вставь:

Код: echo 1- Первый вариант закачки
echo 2- Второй вариант закачки
Автор: AZJIO
Дата сообщения: 01.07.2010 13:53
Может кому интересно
RUNDLL132.rar, скачал отсюда, и самое главное комменты на русском языке


Цитата:
::Отобразить диалог Диспетчер устройств
rundll32.exe devmgr.dll DeviceManager_Execute

::Вызвать диалог XviD Configuration
rundll32.exe xvidvfw.dll Configure

::Открыть данную папку
rundll32.exe url.dll FileProtocolHandler C:\Windows

::Открыть ярлык интернет либо указанный IP-адрес.
rundll32.exe url.dll OpenURL "http://www.google.ru/"

::Вызвать мастер создания ярлыка для указанного файла.
rundll32 appwiz.cpl, NewLinkHere %~dp0

::Отключить механизм восстановления системы на всех дисках.
rundll32.exe SRCORE.dll SysprepGeneralize

::Удаляет указанный файл либо весь каталог.
rundll32.exe ADVPACK.dll DelNodeRunDLL32 C:\file.cmd

::Установить курсор в правый нижний угол экрана.
rundll32.exe user32.dll SetCursorPos

::Отобразить контекстное меню.
rundll32.exe user32.dll mouse_event
Автор: bomzzz
Дата сообщения: 01.07.2010 14:02
AZJIO
RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True - принудительно обновить все параметры раздела реестра HKCU для текущего пользователя. Например, если вы поменяли путь к заставке или обоям и нужно применить изменения сразу, без перезапуска сеанса.
Автор: res2001
Дата сообщения: 01.07.2010 14:14
AZJIO

Цитата:
Может кому интересно

Сенкс!
Автор: bomzzz
Дата сообщения: 01.07.2010 14:18
зараза - реально не работает

вбс срипт который включает и отключает видимость зарегистрированных расширений. а вот как обновить експлорер без его перезагрузки все не могу найти

Set WshShell = CreateObject("WScript.Shell")
If WshShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt") = "0" Then
WshShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt","00000001","REG_DWORD"
Else
WshShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt","00000000","REG_DWORD"
End If
Автор: AZJIO
Дата сообщения: 01.07.2010 14:19
bomzzz
Да, эта тема этим параметром исписана достаточно, я поэтому и стал искать.

Оказывается вот ещё есть в этой же теме.

DLL Export Viewer этой утилиткой можно найти функцию по всем системным dll или отобразить сразу все функции.

Для обновления вот эта функция работает
Цитата:
DllCall("shell32.dll", "none", "SHChangeNotify", "long", '0x8000000', "uint", '0x1000', "ptr", '0', "ptr", '0')
осталось понять как её вызвать через RUNDLL32
Автор: jek1976
Дата сообщения: 01.07.2010 15:10
us0r

Цитата:
Тебе надо всё что вновь было создано дублировать на, скажем, диск D:\ и после чего килять всё на диске C:\. Ну а если сервак доступен- тогда всё на сервак засасывать, а потом килять?

Не совсем так...
Если можно как-то надежно определить, что профиль УЖЕ БЫЛ синхронизирован, то зачем его дублировать на другом диске или серваке? В топку его и все! Или я чего-то не догоняю...


Автор: us0r
Дата сообщения: 01.07.2010 15:17
jek1976
Тебе надо настройки профиля сохранять или ещё и пользовательскую инфу?
Просто профиль легче синхронизировать локально (на диск D- сервак же не всегда доступен...
А потом, при доступности сервака- сливать на сервак, если надо... и килять его локально...
Автор: bomzzz
Дата сообщения: 01.07.2010 15:18
AZJIO
[more]
SHChangeNotify

Notifies the system of an event that an application has performed. An application should use this function if it performs an action that may affect the shell.

WINSHELLAPI void WINAPI SHChangeNotify(

LONG wEventId,     
UINT uFlags,     
LPCVOID dwItem1,     
LPCVOID dwItem2    
);    


Parameters

wEventId

Array of flags that specifies the events. This parameter can be a combination of the following values:

SHCNE_ASSOCCHANGED    Changed a file type association.
SHCNE_ATTRIBUTES    Changed a file's attributes.
SHCNE_CREATE    Created a file.
SHCNE_DELETE    Deleted a file.
SHCNE_DRIVEADD    Added a network drive.
SHCNE_DRIVEADDGUI    Added a network drive by way of a graphic user interface.
SHCNE_DRIVEREMOVED    Removed a network drive.
SHCNE_INTERRUPT    Performed the event as a result of a system interrupt.
SHCNE_MEDIAINSERTED    Added removable media, such as a CD-ROM.
SHCNE_MEDIAREMOVED    Removed a removable medium, such as a CD-ROM.
SHCNE_MKDIR    Created a new directory.
SHCNE_NETSHARE    Shared a resource on the network.
SHCNE_NETUNSHARE    Stopped sharing a resource.
SHCNE_RENAMEFOLDER    Renamed a folder.
SHCNE_RENAMEITEM    Renamed an item in a folder.
SHCNE_RMDIR    Removed a directory.
SHCNE_SERVERDISCONNECT    Disconnected a network server.
SHCNE_UPDATEDIR    Updated the contents of a directory.
SHCNE_UPDATEIMAGE    Changed an image in the system global image list.
SHCNE_UPDATEITEM    Changed the properties of a printer or file.


uFlags

Flag that indicates the meaning of dwItem1 and dwItem2. This parameter can be one of the following values:

SHCNF_DWORD    The dwItem1 and dwItem2 parameters are doubleword values.
SHCNF_FLUSH    Flushes the system event buffer. The function does not return until the system is finished processing the given event.
SHCNF_FLUSHNOWAIT    Flushes the system event buffer. The function returns immediately regardless of whether the system is finished processing the given event.
SHCNF_IDLIST    dwItem1 and dwItem2 are the addresses of item identifier lists.
SHCNF_PATH    dwItem1 and dwItem2 are path names.
SHCNF_PRINTER    dwItem1 and dwItem2 are printer "friendly" names.


dwItem1

First event-dependent value.

dwItem2

Second event-dependent value.

Return Values

No return value.
[/more]
ща попробуим
Автор: us0r
Дата сообщения: 01.07.2010 15:21
AZJIO
Начало стандартное: rundll32.exe shel32.dll, SHChangeNotify
А дальше как карта (система?) ляжет...
Может: rundll32.exe shel32.dll, SHChangeNotify %param01% %param02% ... %paramX%
Автор: jek1976
Дата сообщения: 01.07.2010 15:30

Цитата:
Просто профиль легче синхронизировать локально (на диск D- сервак же не всегда доступен...
А потом, при доступности сервака- сливать на сервак, если надо... и килять его локально...

Да ведь весь сыр-бор пошел из-за недостатка дискового места на рабочих машинах!!! Сохранять копию профиля на диске иногда будет просто НЕКУДА!

Мне видится работа так:
1) при запуске(!) операционки, скрипт (батник) берет первый профиль в папке Documents and Settings (исключая All Users, Default и системные) и проверяет в этом профиле факт его последней успешной синхронизации с сервером;
2) если профиль был успешно синхронизирован - то его удаляем, а в противном случае - оставляем до следующей перезагрузки, в надежде на то, что сервер при следующем включении будет доступен и этот профиль синхронизируется сам;
3) переходим к следующему профилю в папке Documents and Settings и повторяем пункт 1.

Добавлено:
Утилита mobsync.exe здесь может помочь?
Автор: us0r
Дата сообщения: 01.07.2010 15:36
jek1976
Теоретически. Добавь нужной папке разрешение работать автономно- прога должна будет её увидеть и обрабатывать...
А всё же- тебе надо копировать всю пользовательскую инфу, или только настройки профиля?
Автор: jek1976
Дата сообщения: 01.07.2010 15:40

Цитата:
Добавь нужной папке разрешение работать автономно- прога должна будет её увидеть и обрабатывать...

Это предполагается делать вручную с каждой папкой?



Цитата:
А всё же- тебе надо копировать всю пользовательскую инфу, или только настройки профиля?

Да желательно всё - и инфу и настройки. Но это же должна делать сама винда, нам до этого - не должно быть никакого дела. Наша задача - определить, был ли профиль успешно синхронизирован!!!


Автор: VV2006
Дата сообщения: 01.07.2010 15:54
Решил сделать 7z екзешник-самораспак для настроенной под себя Opera.
Если использовать запуск "чиста канкретна" Opera.exe после распаковки в темп, то всё отрабатывает нормально, после выхода из Opera её каталог в темпе успешно удаляется.
Загвоздка возникает, когда пробую запустить её батником, понижающим привелегии пользователя.
Пришлось городить два батника:

Код: START "Opera 10.54" /WAIT %~dp0drop.cmd&EXIT
Автор: us0r
Дата сообщения: 01.07.2010 16:09
jek1976
Sad, but true...
На самом деле делаешь это с папкой самого юзера (вложеные папки раскуривать будет прога)...
И если mobsync всёже будет работать- то она всё проверит сама...

О! Есть такая фигня в винде, как портфель... Честно- сам не юзал... Но вроде бы он отвечает за синхронизацию...
Ковырну его в ближайшее время...

VV2006
1) Что такое drop.exe?
2)
Код: setlocal
set param1=opera.exe
set param2=-u
START "OPERA 10.54" /wait drop.exe %param1% %param2%
Автор: jek1976
Дата сообщения: 01.07.2010 16:13

Цитата:
О! Есть такая фигня в винде, как портфель... Честно- сам не юзал... Но вроде бы он отвечает за синхронизацию...

Он нам ничем не поможет, т.к. к профилям отношения не имеет. Что будем "портфелить"?
Автор: us0r
Дата сообщения: 01.07.2010 16:26
Портфель- синхронизатор файла...
Закинь в планировщик заданий и ОК!

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

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


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