Скрипт Windows с установкой Chocolatey и перезагрузкой между шагами - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь написать короткий скрипт для Windows, который установит несколько разных пакетов с использованием chocolatey, но он также перезагрузит компьютер между установками, а затем продолжит работу со сценарием.Ниже приведено то, что у меня есть:

@echo off
call :Resume
goto %current.txt%
goto :eof

:one
::Add script to Run key
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v %~n0 /d %~dpnx0 /f
echo two >%~dp0current.txt
echo -- Section one --
    Choco install -y IOLibs
pause
shutdown -r -t 0
goto :eof

:two
echo three >%~dp0current.txt
echo -- Section two --
    Choco install -y MSCDriver
pause
shutdown -r -t 0
goto :eof

:three
::Remove script from Run key
del c:\temp\current.txt
reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v %~n0 /f
echo -- Section three --
    Choco install -y HPPDriver
pause
goto :eof



:resume
if exist %~dp0current.txt (
    set /p current=<%~dp0current.txt
) else (
    set current=one
)

Сценарий работает нормально, однако в третьем случае он, похоже, завершается неудачно и не завершается успешно.Похоже, ничего не происходит.Что именно мне не хватает?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018
@echo off
setlocal
if not "%~1" == "" goto %~1

:one
echo -- Section one --
    Choco install -y IOLibs
pause
call :runonce "%~f0" two
goto :eof

:two
echo -- Section two --
    Choco install -y MSCDriver
pause
call :runonce "%~f0" three
goto :eof

:three
echo -- Section three --
    Choco install -y HPPDriver
pause
goto :eof

:runonce
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v "%~n1" /d "\"%~dpnx1\" \"%~2\"" /f
shutdown -r -t 0

Ваш скрипт устанавливает имя переменной current и вы используете имя переменной current.txt для goto %current.txt% что было бы неопределенным.

Скрипт требует повторного использования реестра runonce, чтобы его можно было использовать в метке.

Текстовый файл не нужен, так как вы можете использовать скрипт аргументы для передачи имени метки для использования с goto. Первое выполнение скрипта не будет иметь аргументов, поэтому ярлык :one будет запущен.

0 голосов
/ 11 сентября 2018

Вы добавляете в раздел RunOnce реестра. Сколько раз вы хотите, чтобы он работал? :)

Похоже, вам не хватает этого вызова reg add, чтобы добавить его обратно в реестр: два ИЛИ вы должны использовать раздел Run вместо RunOnce

...