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

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

Автор: renreg
Дата сообщения: 18.05.2007 20:21
pom205

Цитата:
Я пхаю в самараспаковывающиеся архивы с параметрами автозапуска регистрационных файлов по извлечении.


Посмотрю, спасибо


Цитата:
Есть ишшо Thinstall и Molebox


А где на них взглянуть можно?

NIKZZZZ

Цитата:
Quick Batch File Compiler


Спасбо. Кажется это то, что мне нужно. Только бы разобраться в программе. Скачать-то скачал полный комплект.
Автор: pom205
Дата сообщения: 18.05.2007 20:28
wolf0425

Цитата:
если нужен не текущий путь, а путь к запущенному батнику - пользуй %~dp0

Во-о-т! Это важно!
Автор: slaughty
Дата сообщения: 18.05.2007 20:43
Уважаемые, подскажите плиз. Хочу батником корректно сделать последовательно logoff и hibernate в ВинХР.
Кручусь вокруг такого кода, но работает некорректно, сеанс завершается, но машина в хибер не уходит. Как его заставить выполнить хибернет после того как юзер благополучно вышел из системы? (пинг это экспромт, все равно не работает)

Код: %windir%\system32\logoff.exe
ping -n 2 localhost
%windir%\system32\rundll32.exe powrprof.dll,SetSuspendState Hibernate
Автор: NIKZZZZ
Дата сообщения: 18.05.2007 21:29
renreg

Цитата:
Есть ишшо Thinstall и Molebox А где на них взглянуть можно?

Molebox
Thinstall
Но это, боюсь , не совсем то, что тебе нужно - проблем с ними много.



Добавлено:

Цитата:
Только бы разобраться в программе.

Да там все просто - то, что ты добавил в exe'шник + сам батник распаковывается в %Temp% и там запускается батник. После выполнения батника все удаляется.

Автор: Maza Faka
Дата сообщения: 19.05.2007 08:34
slaughty

Цитата:
Хочу батником корректно сделать последовательно logoff и hibernate в ВинХР

Вряд ли получится, ведь после "logoff", все запущеные пользователем процессы завершаются, соответственно завершается и выполнение батника.
Автор: Levitant
Дата сообщения: 19.05.2007 11:41
Maza Faka Большое спасибо ,помог. Теперь осталось разобраться как это работает.
А не подскажет кто-нибудь как скрывать окно?
Автор: Maza Faka
Дата сообщения: 19.05.2007 12:18
Levitant

Цитата:
как это работает


Код:
@Echo off

::создаём метку
:dial_

:: команда "ipconfig" показывает все подключения работающие в данный момент,
:: запускаем её и при помощи символа "|" направляем вывод в команду "Find", которая
:: ищет строку "haz 2" и если такой строки нет (значит подключение не запущено), то
:: команда "Find" завершается с ошибкой. Символ "||" означает, что, если предыдущая
:: команда выполнилась с ошибкой, то запускается команда после символов "||"
ipconfig | Find /i "haz 2">nul || rasphone -d "haz 2"

:: Здесь мы делаем паузу нестандартным методом, то есть пингуем несуществующий IP-
::адрес в течении 600 секунд
ping -n 601 -w 1000 127.0.0>nul

::А затем переходим к метке ":dial_" и начинаем всё сначала, этакий бесконечный цикл
goto :dial_
Автор: Levitant
Дата сообщения: 19.05.2007 12:22
Maza Faka Огромное спасибо. В шапку я глядел, нашел, но там все по английски и у меня не заработало. Сейчас все ОК. Спасибо за разъеснение, блин, совсем не похоже на С++
Автор: wolf0425
Дата сообщения: 19.05.2007 17:01

Цитата:
Вряд ли получится, ведь после "logoff", все запущеные пользователем процессы завершаются, соответственно завершается и выполнение батника.
вот интересно - прописанный в шедулер (по at) батник - тоже завершится? а если у него время стартовать только через минуту после логофа?

imho задачу надо разбать на две:
1. залогофиться за предсказуемое время
2. уйти в гибернейт по команде шедулера (для начала можно потренироваться просто из батника)
если получится по частям - то в сумме вроде ж должно получиться как просили, а что в гибернейт будет уходить не мгновенно - врядли есть разница.
А как корректно посчитать время для шедулера - не так давно обсуждали.
Автор: sm32
Дата сообщения: 19.05.2007 18:47
опять про ftp
идея:
есть удалённый ftp-сервер, с него нужно скачать статистику, которая обнавляется 1 раз в неделю

вход под паролем ( файлы статистики произвольные)
как с помощью bat-файла обнавлять статистику в локальной папке

удалённый сервер ftp.****.by
user user
pass password
дирриктория /stat/

может у кого-нитьбудь есть простое решение, не хочется ворошитьл всю тему

заранее спасибо
Автор: Elroir
Дата сообщения: 19.05.2007 19:57
sm32
В батнике пишешь:
ftp -s:file.txt -v -i

В file.txt:
open host ftp.****.by
user
password
cd stat
binary (если файлы статистики не текстовые)
mget *.*
quit
Автор: wolf0425
Дата сообщения: 19.05.2007 20:07
sm32 в чем заключается "читать статистику"?
она там что, в файл складывается?
тогда читай хэлп про пакетную работу ftp.exe...
Автор: Angel_Ka
Дата сообщения: 19.05.2007 23:39
В справочнике про reg query сказано, что у неё два возвращаемых кода: 0 - удача и 1 - неуд, а в двух разных местах видела проверку на код 2. Это была ошибка или ...?
Подскажите, плз, а то надо проверку наличия куста сделать, а как пока не разберусь.
Автор: Elroir
Дата сообщения: 19.05.2007 23:44
Angel_Ka
А ты проверяй так:

Код: if not %errorlevel%==0 echo not exists
Автор: euheny
Дата сообщения: 20.05.2007 02:03
Как определить в какой папке winxp ?
Автор: Elroir
Дата сообщения: 20.05.2007 03:20
euheny

Код: echo %windir%
Автор: Angel_Ka
Дата сообщения: 20.05.2007 06:54
Elroir

Цитата:
А ты проверяй так:

Код:
if not %errorlevel%==0 echo not exists

то есть, если код ошибки не ноль - значит не существует. Тогда не важно какой код у "не существует"

Биг сэнкс!

А ежели наоборот - если раздел в регистри существует, то удалить?

Автор: Maza Faka
Дата сообщения: 20.05.2007 07:18
Angel_Ka
if not %errorlevel%==0 (echo not exist) else (reg delete "Раздел\подраздел")
или:
if %errorlevel%==0 reg delete "Раздел\подраздел"
Автор: Angel_Ka
Дата сообщения: 20.05.2007 08:04
Maza Faka

Биг сэнкс!

Поясните ещё, плз:

Код: reg query "Раздел\подрадел" 2>nul && reg delete "Раздел\подрадел" /F >Nul
Автор: wolf0425
Дата сообщения: 20.05.2007 09:14

Цитата:
синонимы? В чём различие этих конструкций по исполнению?

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



Добавлено:

Цитата:
записать в батник более цивильно?

а чем текущий вариант не устраивает?
Автор: Angel_Ka
Дата сообщения: 20.05.2007 09:23
wolf0425
Биг сэнкс! Ответы на оба вопроса удовлетворяют.

А не подскажете, где можно было бы прочесть про возвращаемые коды reg query по максимуму?
Не ли ссылки?
Автор: Maza Faka
Дата сообщения: 20.05.2007 10:54
Angel_Ka

Цитата:
где можно было бы прочесть про возвращаемые коды reg query по максимуму?

Да там и читать-то нечего, всего два кода возврата:
0 Успех
1 Сбой
Автор: Angel_Ka
Дата сообщения: 20.05.2007 11:03
Maza Faka

Цитата:
Да там и читать-то нечего, всего два кода возврата...

Откуда же тогда берётся запись

Цитата:
reg query "Раздел\подрадел" 2 ...

?
Автор: Maza Faka
Дата сообщения: 20.05.2007 11:13
Angel_Ka

Цитата:
Откуда тогда берётся запись
reg query "Раздел\подрадел" 2

Откуда ты взяла эту запись?
У меня в виндовом справочнике написано:
Примечания
В следующей таблице представлены значения возврата для операции reg query. Значение Описание
0 Успех
1 Сбой

Ось WinXP Pro SP2
Автор: Angel_Ka
Дата сообщения: 20.05.2007 11:25
Maza Faka

Цитата:
У меня в виндовом справочнике написано...

Вот и я о том же, а в батнике, запускающем Far как переносную программу, есть строка:

Цитата:
reg query HKEY_CURRENT_USER\Software\Far\users\%faruser% 2>nul && echo Erasing.. ^
&& Reg Delete HKEY_CURRENT_USER\Software\Far\Users\%Faruser% /F >Nul

и, кажется, она работает. По крайней мере, батничек тот очень полезен и пашет как надо, там на форуме к нему ещё и дополнения хорошие есть...
Автор: yurkesha
Дата сообщения: 20.05.2007 11:33
2>nul это перенаправление потока вывода 2 (stderr) в устройство nul - то есть в никуда...
А поповоду кодов возврата:
errorlevel увеличиватся на 1 в случае неуспеха, а не принимает абсолютное значение 1. Это - две большие разницы...
Автор: Angel_Ka
Дата сообщения: 20.05.2007 11:41
yurkesha

Цитата:
errorlevel увеличиватся на 1 в случае неуспеха, а не принимает абсолютное значение 1. Это - две большие разницы...

Не понятно. Может быть тогда

Цитата:
reg query "Раздел\подрадел" 2>nul && reg delete "Раздел\подрадел" /F >Nul

и

reg query "Раздел\подрадел" >nul
if %errorlevel%==0 reg delete "Раздел\подраздел" /F >Nul

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

Код: if %errorlevel%==2 reg delete "Раздел\подраздел" /F >Nul
Автор: yurkesha
Дата сообщения: 20.05.2007 11:56
Нет не нужно так писать...
2>nul - при запросе значения из реестра не выводить текст ошибки если она случилась
&& - в случае если reg query вернул что-либо(при ошибке он не вернет ничего - строка расшифровки выше) выполнить следующую команду
reg delete "Раздел\подрадел" /F >Nul - выполнить удаление из раздела и не выводить приэтом никаких сообщений...

В принципе последнее действие построено не совсем верно - а что если удаление не получилось? Например не хватило прав...

А if %errorlevel%==0 обозначает что ни в процессе запроса к реестру, ни в предыдущих командах не наступила ошибка...
Автор: Elroir
Дата сообщения: 20.05.2007 11:59
yurkesha

Цитата:
errorlevel увеличиватся на 1 в случае неуспеха, а не принимает абсолютное значение 1

Откуда такие сведения?
Angel_Ka
2>nul никакого отношения к конкретной команде reg не имеет. В Windows-е существует два стандартных потока вывода - обычный вывод и вывод ошибок. Чтобы скрыть вывод ошибок (любой программы),используется конструкция 2>nul (как и написал yurkesha).
Автор: wolf0425
Дата сообщения: 20.05.2007 11:59
вообще-то во втором случае следует писать:
Код: reg query "Раздел\подрадел" 2>nul
if %errorlevel%==0 reg delete "Раздел\подраздел" /F >Nul

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Автозагрузка терминальной сессии


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