我正在尝试编写一个简短的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
)
该脚本运行正常,但是第三个脚本似乎失败并且未成功完成。看来什么也没发生。我到底想念什么?
谢谢!
答案 0 :(得分:0)
您将添加到注册表的RunOnce部分。您要运行多少次? :)
似乎您缺少reg add调用,无法将其添加回:two中的注册表中,否则您应该使用Run部分而不是RunOnce
答案 1 :(得分:0)
@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
将运行。