依你的例子应该是把 WPI 安装在不同的目录下
比如 D:\Soft\WPI\WPI.hta
再来并不是你设定的 %CDROM%\主程式\office更新档\更新档\install.cmd 语法有误
所以你设定的 %CDROM% 在 WPI 的程式比对时就找不着,
主要原因就是他的
generate.js 内容
function FindCDRom()
{
position = "generate.js";
var i, li;
if (LaunchFromCD=="yes")
FindFile="WIN51";
else
FindFile="WPI.hta";
if (foundCDdrv)
return cddrv;
li = GetCDRomDriveLetters();
for (i=0; i<li.length; i++)
{
if (FileExists(li+'\\Soft\\WPI\\'+FindFile))
{
cddrv = li;
debug("Found CDROM as drive " + cddrv,1,2);
}
}
这段程式的意思就是代表程式会去搜寻每个槽面的 ?:\wpi\wpi.hta 这个档案
当搜到的时候把该槽面并宣告 %CDROM% 这一个常数
然后把每一个设定的 %CDROM%\主程式\office更新档\更新档\install.cmd 变更成
D:\主程式\office更新档\更新档\install.cmd 这样才有办法动作跟执行
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i\\Soft\\WPI\\WPI.hta set CDROM=%%i:
echo Found CD-Rom as drive %CDROM%
%System32%\Reg.exe add "HKLM\SoftWare\Microsoft\Windows\CurrentVersion\RunOnce" /V "WPI" /D "%Cdrom%\Soft\WPI\WPI.hta"
但是它主要用意是在搜寻每个槽面的 ?:\Soft\WPI\WPI.hta 然后把该槽面设为 %CDROM%
在去执行它的 WPI.HTA 这一个档案
所以此处的
generate.js跟
WPI.CMD 两个用途是在不同的地方
再来就是你的 INSTALL.cmd 根本就不必写的那么麻烦
CLS
@ECHO OFF
ECHO.
ECHO正在安装OFFICE更新档
ECHO请稍候.....
for %%i in (KB907417.exe) do start /wait %%i /Q:U:N
for %%i in (KB913807.exe) do start /wait %%i /Q:U:N
for %%i in (KB905756.exe) do start /wait %%i /Q:U:N
for %%i in (KB887616.exe) do start /wait %%i /Q:U:N
for %%i in (KB916521.exe) do start /wait %%i /Q:U:N
for %%i in (KB914454.exe) do start /wait %%i /Q:U:N
for %%i in (KB916518.exe) do start /wait %%i /Q:U:N
for %%i in (KB917334.exe) do start /wait %%i /Q:U:N
for %%i in (KB917149.exe) do start /wait %%i /Q:U:N
EXIT
别人都简化这样写给你看了,所以不必做任何变更就可以执行你每个更新档
for %%i in (*.exe) do start /wait %%i /Q:U:N
只要把 /Q:U:N 参数一样的更新档都丢在同一个目录