2016-09-23 44 views
0

我想創建一個批處理文件來檢查MSOffice安裝類型(32位或64位)的用戶環境,然後複製特定於該環境的文件。我開始使用此代碼,從Batch file check office architecture version獲取版本根據Office版本複製批處理文件

 Echo off&SetLocal 
Set "KEY="&Set "GUID="&Set "IOV="&Set "MWB=32"&Set "MOB=32" 
Echo=%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%|Find "64">Nul&&(
    Set "KEY=\Wow6432Node"&Set "MWB=64") 
Set "KEY=HKLM\Software%KEY%\Microsoft\Windows\CurrentVersion\Uninstall" 
For /f "Delims=" %%a In ('Reg Query %KEY% /k /f "*-001B-*0FF1CE}"') Do (
    If Not Defined GUID Set "GUID=%%~nxa") 
If Not Defined GUID (Echo=Unable to find Office Product&GoTo :EndIt) 
If %GUID:~20,1% Equ 1 Set "MOB=64" 
If %GUID:~4,1% Equ 4 (Set IOV=10) Else (If %GUID:~4,1% Equ 2 (Set IOV=07) Else (
     If %GUID:~4,1% Equ 5 (Set IOV=13) Else (Set IOV=??))) 
Echo=&Echo= Office 20%IOV% %MOB%-bit Product installed on a %MWB%-bit OS 

但想擴大它更多的是巧妙地複製。 我想

If "MOB=32" copy /y "\\file(32-Bit).exe" c:\%USERPROFILE%\Desktop 
    Else copy /y "\\file(64-Bit).exe" c:\%USERPROFILE%\Desktop 
Echo=&Echo= Copy Completed! Have A Nice Day! 

但總是收到「拷貝不希望在這個時候」,利用XCOPY也嘗試過,得到了相同的結果。這將有助於在混合環境中部署任何想法?可以肯定的語法錯誤=(

+1

'如果 「MOB = 32」'應該是'如果MOB%%32 == ' –

+1

閱讀「IF」命令的幫助。它會顯示使用和「IF ... ELSE」命令的確切語法。 – Squashman

+0

我承認[code](http://www.dostips.com/forum/viewtopic.php?t=5383#p33104)。很高興它被發現有用! – Compo

回答

0
If %MOB%==32 (copy /y "\\file(32-Bit).exe" c:\%USERPROFILE%\Desktop 
) Else (copy /y "\\file(64-Bit).exe" c:\%USERPROFILE%\Desktop) 
  1. 必須有IF真實條件目標的左括號前的分離
  2. 即開括號必須是在同一個物理線爲if
  3. 如果使用'else'子句,「true」塊,分隔符和else關鍵字的結尾括號必須位於同一條物理線上
  4. 使用'else'塊時,else關鍵字隔板和 「其他」 塊的開括號必須在相同的物理線路

if condition (
something 
) else (
someotherthing 
) 
+0

謝謝,這工作完美! –

+0

Ok @Magoo經過一些測試後,我意識到它可以在Office安裝位置爲32位的情況下工作,但它不適用於64位安裝,或者它仍然會複製32位文件。 –

+0

在這種情況下,「mob」似乎被設置爲32,而不是64.因爲在例程開始時「mob」被設置爲「32」,並且唯一的地方是它可以被改爲「64 「如果是'%GUID:〜20,1%等於1',那麼看起來你正在提取並期望表示64位的'GUID'不具有第21個字符= 1。注21 - 批量子串的「字符0」開始計數。考慮到系統返回給出問題的值,您需要檢查* that * test是否有效。 – Magoo