Показать полную графическую версию : [решено] Ошибка выполнения скрипта после его запуска через автозапуск.
Добрый день друзья!
В процессе написания скрипта возникло 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) При окончании работы скрипта, вводится запись в реестр (в автозапуск) чтобы скрипт продолжил отработку после перезапуска ПК, но при перезапуске скрипт выдает ошибки " файл по данному адресу не обнаружен", хотя если запустить вручную из того же места все прекрасно работает. Из-за чего такая проблема может возникать?
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)))
Как сделать вывод в 1 строку сообщения о успешном выполнении действия? »
Использовать:
<nul set /p Var=*** eToken PKI Client 5.1 SP1
вместо:
Echo *** eToken PKI Client 5.1 SP1 »
для начала сообщения.
А по второму вопросу, кто может подсказать?
Foreigner
18-01-2016, 17:36
8ash8, А зачем экранировать кавычки, и нужны ли они вообще здесь? Кроме того кавычки при записи в реестр экранируются обратным слешем (\").
^"C:\Users\123\321.CMD^"
Вы правы, экранировать кавычки не к чему, скрипт запускается после перезагрузке, что с ними, что без них.
После перезагрузки скрипт запускается, но выдает 133082 я полагаю что при запуске скрипта из автозагрузки он почему то не понимает относительный путь к дистрибутивам. Есть мысли как это поправить? прописывать абсолютный путь не вариант.
8ash8, А зачем экранировать кавычки, и нужны ли они вообще здесь? Кроме того кавычки при записи в реестр экранируются обратным слешем (\").
Код: Выделить весь код
^"C:\Users\123\321.CMD^"
при запуске скрипта из автозагрузки он почему то не понимает относительный путь к дистрибутивам. Есть мысли как это поправить? »
Относительный путь задаётся относительно текущего каталога. Начните с проверки того, какой именно путь является текущим для пакетного файла при запуске из «…\Run» (почему, кстати, не RunOnce/RunOnceEx?), например, добавив в код:
>"%Temp%\CurrDir.txt" echo [%CD%].
и посмотрев на результат.
Есть мысли как это поправить? прописывать абсолютный путь не вариант. »
Попробуйте прописать полный путь к утилитам, расположенным рядом с батником, через %~dp0 (путь к батнику). Полный путь лучше заключить в кавычки, ибо в нем могут быть пробелы.
Цитата 8ash8:
при запуске скрипта из автозагрузки он почему то не понимает относительный путь к дистрибутивам. Есть мысли как это поправить? »
Относительный путь задаётся относительно текущего каталога. Начните с проверки того, какой именно путь является текущим для пакетного файла при запуске из «…\Run» (почему, кстати, не RunOnce/RunOnceEx?), например, добавив в код:
Код: Выделить весь код
>"%Temp%\CurrDir.txt" echo [%CD%].
и посмотрев на результат.
Я знаю, что относительный путь задается относительно текущего каталога, в моем случае батник лежит в корне этого каталога, но я не знал, что при автозапуске он его запускает из [C:\Windows\system32], поэтому программки он и не воспринимает.
В идеале скрипт должен запускаться и отрабатывать с флешки, но т.к. на разных ПК флешки могут определяться разными буквами, то полный путь задать не вариант, что можете посоветовать в этом случае?
Относительно того, что почему, не использовал RunOnce/RunOnceEx, т.к. я не давно пытаюсь писать скрипты то много не знаю и в чем преимущество использования этих веток не знаю, но буду благодарен за пояснение или ссылку с инфой.
Цитата 8ash8:
Есть мысли как это поправить? прописывать абсолютный путь не вариант. »
Попробуйте прописать полный путь к утилитам, расположенным рядом с батником, через %~dp0 (путь к батнику). Полный путь лучше заключить в кавычки, ибо в нем могут быть пробелы.
Спасибо за помощь, но в моем случае мне не подходит использование полного (абсолютного пути).
в моем случае мне не подходит использование полного (абсолютного пути). »
Тогда попробуйте сменить текущий каталог:
CD /D %~dp0
Цитата 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)))
Какой кошмар.
А в чем кошмар то?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.