Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Ошибка выполнения скрипта после его запуска через автозапуск. (http://forum.oszone.net/showthread.php?t=310519)

8ash8 18-01-2016 15:06 2596443

Ошибка выполнения скрипта после его запуска через автозапуск.
 
Добрый день друзья!

В процессе написания скрипта возникло 2 вопроса:
1) Как сделать вывод в 1 строку сообщения о успешном выполнении действия?
Пример
Echo *** eToken PKI Client 5.1 SP1) & (
START /WAIT MsiExec.exe /X%PKI% /qn) && ((
Set /a K+=1) & (
Echo *** Выполненно) & (
echo.)))

В данном случае после выполнения действия оповещение о выполнении выводится на следующей строке, как сделать вывод оповещения после выполнения команды в 1 строку?

2) При окончании работы скрипта, вводится запись в реестр (в автозапуск) чтобы скрипт продолжил отработку после перезапуска ПК, но при перезапуске скрипт выдает ошибки " файл по данному адресу не обнаружен", хотя если запустить вручную из того же места все прекрасно работает. Из-за чего такая проблема может возникать?

Пример 2
For /f "usebackq tokens=1,2* skip=2" %%i IN (`Reg Query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /V Key`) DO set Ins=%%k
if not defined Ins (
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Key /d "1") & (
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Run /d ^"C:\Users\123\321.CMD^" /f
Shutdown /t 60 /f /r))
if defined Ins (
Echo *** Установка eToken PKI Client 5.1 SP1 ---) & (
START /WAIT PKI_Client\PKIClient.msi /qn /norestart) && ((
Echo Выполнена) & (
Shutdown /t 60 /f /r)))

Iska 18-01-2016 15:35 2596454

Цитата:

Цитата 8ash8
Как сделать вывод в 1 строку сообщения о успешном выполнении действия? »

Использовать:
Код:

<nul set /p Var=*** eToken PKI Client 5.1 SP1
вместо:
Цитата:

Цитата 8ash8
Echo *** eToken PKI Client 5.1 SP1 »

для начала сообщения.

8ash8 18-01-2016 16:46 2596472

А по второму вопросу, кто может подсказать?

Foreigner 18-01-2016 17:36 2596486

8ash8, А зачем экранировать кавычки, и нужны ли они вообще здесь? Кроме того кавычки при записи в реестр экранируются обратным слешем (\").
Код:

^"C:\Users\123\321.CMD^"

8ash8 19-01-2016 10:57 2596742

Вложений: 1
Вы правы, экранировать кавычки не к чему, скрипт запускается после перезагрузке, что с ними, что без них.
После перезагрузки скрипт запускается, но выдает Файл 133082 я полагаю что при запуске скрипта из автозагрузки он почему то не понимает относительный путь к дистрибутивам. Есть мысли как это поправить? прописывать абсолютный путь не вариант.

Цитата:

8ash8, А зачем экранировать кавычки, и нужны ли они вообще здесь? Кроме того кавычки при записи в реестр экранируются обратным слешем (\").
Код: Выделить весь код

^"C:\Users\123\321.CMD^"


Iska 19-01-2016 11:21 2596755

Цитата:

Цитата 8ash8
при запуске скрипта из автозагрузки он почему то не понимает относительный путь к дистрибутивам. Есть мысли как это поправить? »

Относительный путь задаётся относительно текущего каталога. Начните с проверки того, какой именно путь является текущим для пакетного файла при запуске из «…\Run» (почему, кстати, не RunOnce/RunOnceEx?), например, добавив в код:
Код:

>"%Temp%\CurrDir.txt" echo [%CD%].
и посмотрев на результат.

gora 19-01-2016 11:43 2596767

Цитата:

Цитата 8ash8
Есть мысли как это поправить? прописывать абсолютный путь не вариант. »

Попробуйте прописать полный путь к утилитам, расположенным рядом с батником, через %~dp0 (путь к батнику). Полный путь лучше заключить в кавычки, ибо в нем могут быть пробелы.

8ash8 19-01-2016 14:14 2596819

Цитата:

Цитата Iska
Цитата 8ash8:
при запуске скрипта из автозагрузки он почему то не понимает относительный путь к дистрибутивам. Есть мысли как это поправить? »
Относительный путь задаётся относительно текущего каталога. Начните с проверки того, какой именно путь является текущим для пакетного файла при запуске из «…\Run» (почему, кстати, не RunOnce/RunOnceEx?), например, добавив в код:
Код: Выделить весь код

>"%Temp%\CurrDir.txt" echo [%CD%].

и посмотрев на результат.

Я знаю, что относительный путь задается относительно текущего каталога, в моем случае батник лежит в корне этого каталога, но я не знал, что при автозапуске он его запускает из [C:\Windows\system32], поэтому программки он и не воспринимает.
В идеале скрипт должен запускаться и отрабатывать с флешки, но т.к. на разных ПК флешки могут определяться разными буквами, то полный путь задать не вариант, что можете посоветовать в этом случае?

Относительно того, что почему, не использовал RunOnce/RunOnceEx, т.к. я не давно пытаюсь писать скрипты то много не знаю и в чем преимущество использования этих веток не знаю, но буду благодарен за пояснение или ссылку с инфой.

Цитата:

Цитата gora
Цитата 8ash8:
Есть мысли как это поправить? прописывать абсолютный путь не вариант. »
Попробуйте прописать полный путь к утилитам, расположенным рядом с батником, через %~dp0 (путь к батнику). Полный путь лучше заключить в кавычки, ибо в нем могут быть пробелы.

Спасибо за помощь, но в моем случае мне не подходит использование полного (абсолютного пути).

gora 19-01-2016 14:18 2596820

Цитата:

Цитата 8ash8
в моем случае мне не подходит использование полного (абсолютного пути). »

Тогда попробуйте сменить текущий каталог:
Код:

CD /D %~dp0

8ash8 22-01-2016 09:27 2598002

Цитата:

Цитата gora
Цитата 8ash8:
в моем случае мне не подходит использование полного (абсолютного пути). »
Тогда попробуйте сменить текущий каталог:
Код: Выделить весь код
CD /D %~dp0

Спасибо за помощь, вопрос решился.

Скрытый текст
For /f "usebackq tokens=1,2* skip=2" %%i IN (`Reg Query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /V Key`) DO set Ins=%%k
if not defined Ins (
setlocal EnableDelayedExpansion
set p=%~dp0
>"%Temp%\Dir.txt" echo !p!

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Key /d "1") & (
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Run /d ^"C:\Users\123\321.CMD^" /f
Shutdown /t 60 /f /r))
if defined Ins (
setlocal EnableDelayedExpansion
Set /p X=<"%Temp%\Dir.txt"

Echo *** Установка eToken PKI Client 5.1 SP1 ---) & (
START /WAIT PKI_Client\PKIClient.msi /qn /norestart) && ((
Echo Выполнена) & (
Shutdown /t 60 /f /r)))

Iska 22-01-2016 10:16 2598019

Какой кошмар.

8ash8 22-01-2016 11:35 2598058

Цитата:

Цитата Iska
Какой кошмар.

А в чем кошмар то?

Iska 22-01-2016 22:21 2598281

В коде.


Время: 13:43.

Время: 13:43.
© OSzone.net 2001-