依你的例子應該是把 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 參數一樣的更新檔都丟在同一個目錄